Python带你访问动态公网IP下的NAS!

项目目标:实现家庭拨号条件下动态公网IP的每日监测,并汇报新IP地址。

项目背景:在家组建了私有NAS,使用黑群晖系统,需要实现外网访问。内网IP地址固定但是外网访问时拨号获得的IP地址并不固定。所以本方法适用于家庭拨号上网没有固定公网IP,又不想使用QuickConnect或者DDNS的用户。

方案思路:对本地路由器设置端口转发。使用群晖的linux系统搭建python环境,用python自带库实现本地公网IP地址的抓取与判断,当公网IP发生变动之后主动发送新IP地址给用户。可以使用邮箱可以使用微信等,本方案使用邮箱作为发生方式。用户便可以使用新IP地址对NAS进行访问。

实施细节:使用SSH登录NAS,下载ipkg包管理器并编译,安装python环境。本地调试代码成功后scp到NAS端,在NAS端后台运行(nohup python ./*.py &)即可。

项目代码:

Python学习交流群:1004391443,这里是python学习者聚集地,有大牛答疑,有资源共享!小编也准备了一份python学习资料,有想学习python编程的,或是转行,或是大学生,还有工作中想提升自己能力的,正在学习的小伙伴欢迎加入学习。

#!/usr/bin/python
# -*- coding:utf8 -*-
import urllib2
import re
import datetime
import time
import smtplib
import gc
from email.mime.text import MIMEText
from email.utils import formataddr
##使用urllib2库实现对网页内容的访问并正则匹配抓取IP地址
def get_ip():
    url = urllib2.urlopen("http://txt.go.sohu.com/ip/soip")
    text = url.read()
    ip = re.findall(r'\d+.\d+.\d+.\d+',text)
    return ip
##使用SMTP协议发送邮件
my_sender='[email protected]'     #输入发送端邮箱地址,发送和接收邮箱可以相同
my_user='[email protected]' 
def mail(ipAdd):
    ret=True
    try:
        
        msg=MIMEText(ipAdd[0],'plain','utf-8')
        
        msg['From']=formataddr(["NasName",my_sender])   
        msg['To']=formataddr(["UserName",my_user])   
        msg['Subject']="NasIP"
        server=smtplib.SMTP("smtp.Xmail.com",25) 
        server.login(my_sender,"********")     # 登录,星号处输入邮箱密码  
        server.sendmail(my_sender,[my_user,],msg.as_string())  
        server.quit()  
        
    except Exception:   
        ret=False
    return ret
##使用time库实现每日定时执行本检查程序,当监测到IP地址变动时发送新IP到指定邮箱
def timer(h=0, m=0):
    ipadd0 = []
    while True:
        now = datetime.datetime.now()
        #print(now.hour, now.minute)
        if now.hour == h:
            ipadd1 = get_ip()
            if ipadd0 != ipadd1:
                ret=mail(ipadd1)
                ipadd0 = ipadd1
                if ret:
                    print("Send")
                else:
                    print("failed")  
        time.sleep(3600)
        gc.collect()
##运行主函数
timer()

猜你喜欢

转载自blog.csdn.net/weixin_39108368/article/details/90109755