家庭宽带公网动态IP域名解析,用Python写的自动更新DNS的脚本,功能类似于花生壳客户端
在家里搭了一个seafile服务器,用了华为云注册的域名,专业的云解析服务比花生壳强很多,唯一美中不足的家庭宽带公网IP是动态的,需要时不时的去网站上更新自己的IP,这样不方便,而且人不在家的时候也很难知道家里的IP变成什么了。
花生壳有个客户端可以帮忙自动更新IP,华为云提供了python的sdk可以完成这个操作,刚好我懂一点点编程,就自己写了个脚本,分享出来欢迎大家批评指正。
这个脚本的原理是用curl命令获取自己的公网IP,你可以命令行运行试试curl cip.cc看看效果,如果IP有变化就调用华为云的sdk更新一下。
curl终究是通过其他网站获取自己的IP,比如上面说的cip.cc。这有两个弊端:一是网站可能会失效,二是过于频繁的访问某个网站可能会被ban掉。
为了解决第一个弊端,脚本提供了5个可用的网址,每次先随机乱序排列这5个网址再逐个curl,只要有一个能工作的,就不再访问下一个了。
为了解决第二个弊端,程序每隔一分钟(自己设定)ping一下自己的公网IP,因为是自己的IP所以每次都能得到固定的ttl,如果ttl变化或者ping不通了,说明公网IP可能变了,这时候再用curl命令获取IP。然而公网IP可能几个月都不变,几个月都不重新确认一下公网IP我又有点不放心,所以设定了正常情况下大约每隔12个小时会用curl命令查一下公网IP,这样对于那5个网址来说我平均60个小时才会访问一次。
我的服务器是运行ubuntu系统的,要使用这个脚本,需要先安装curl程序和华为SDK:
sudo apt install curl sudo pip3 install huaweicloud-sdk-python
在国内安装huaweicloud-sdk-python可能会很慢,也可能pip版本不够新而安装不上,如果出现这两种情况,可以用清华的镜像源升级和安装:
sudo pip install -i https://pypi.tuna.tsinghua.edu.cn/simple pip -U sudo pip install huaweicloud-sdk-python -i https://pypi.tuna.tsinghua.edu.cn/simple some-package
脚本里需要设置的信息见脚本注释,这里不多说。
设置完之后,用以下命令使其在后台执行脚本:
python3 inform_dns.py &
当然你可能需要先不加那个&符号让脚本在前台运行看看会不会报错,等确认能用了再后台运行。
脚本会在工作目录输出log文件, 所以最好先cd到脚本目录再运行,让log和脚本在一起,若无任何需要操作的异常,脚本会每5分钟向log文件写一条废话证明自己还活着。
脚本第一次运行会首先检测公网IP但不会立即更新,只有IP变化时才会更新。所以要么自己先手动在华为云建立一条记录,要么拔掉路由器电源等几分钟再插上让IP变化,这样还顺便测试一下脚本功能,脚本不会在终端打印什么东西,一切都在log文件里。
如果服务器是windows系统,你只需要改一下curl和ping的用法,在脚本里搜索curl和ping,改成windows风格即可,但我没测试过windows,有问题欢迎留言。
windows后台运行python脚本的方法是改后缀名为.pyw,然后双击即可。
- 点赞
- 收藏
- 关注作者
评论(0)