家里的路由器有自带的VPN功能,通过简单的设定可以很方便地让在国内的家人翻墙。但是因为外网IP不是固定的,经常变化,IP变化后如果能邮件通知的话,就很方便手机等客户端及时修改IP地址以保持随时翻墙的姿态。
做了个简单的python3脚本(以gmail为例):
import urllib.request
import smtplib
import logging
import os

"""
用法:
1,先在本脚本同目录下,建个空的“oldIP.txt“的文本文件
2,在sendMail函数里修改自己的邮箱名和密码等
"""

try:
    newIP = urllib.request.urlopen("https://api.ipify.org").read().decode()
except:
    newIP = urllib.request.urlopen("http://ip.6655.com/ip.aspx").read().decode()

pyScriptFolder = os.path.dirname(os.path.abspath(__file__)) + "/"

with open(pyScriptFolder + "oldIP.txt", "r") as f:
    oldIP = f.read()


def sendMail(contents):
    FROM = "*******" # 发件人信息
    TO = "*******" # 收件人信息,最好设置为免翻墙就可接受邮件的邮箱
    SUBJECT = "Subject: {}".format(contents)  # set subject
    username = "*******"  # 邮箱用户名
    pw = "*******"  # 邮箱密码
    gs = smtplib.SMTP("smtp.gmail.com:587")  # gmail server
    gs.ehlo()
    gs.starttls()
    gs.login(username, pw)
    gs.sendmail(FROM, TO, SUBJECT)
    gs.quit()


if newIP == oldIP:
    pass
else:
    sendMail(newIP)
    with open(pyScriptFolder + "oldIP.txt", "w") as f:
        f.write(newIP)
    # 记录简单的日志
    logging.basicConfig(
        level=logging.DEBUG,
        filename=pyScriptFolder + "logger.log",
        format="%(asctime)s %(message)s")
    logging.info(newIP)
最后,可以把脚本加入到cron中,设定自动运行的时间和频率等。
当然,如果平时电脑不怎么开机使用的话,没有多大意义。
但是如果家里有24小时开机的NAS的话,就方便了。 首先NAS的DDNS可以随时自动连接变化后的IP地址,但是有个风险是,如果NAS提供的DDNS域名被墙了,就悲剧了。反过来看,动不动就变化的外网IP一定程度上可以灵巧地乖避GFW的封锁。
当然,我是把这个脚本挂在NAS上,每隔1小时自动运行1次。