家庭宽带公网动态IP域名解析,用Python写的自动更新DNS的脚本,功能类似于花生壳客户端

举报
number99 发表于 2020/03/24 23:09:34 2020/03/24
【摘要】 在家里搭了一个seafile服务器,用了华为云注册的域名,专业的云解析服务比花生壳强很多,唯一美中不足的家庭宽带公网IP是动态的,需要时不时的去网站上更新自己的IP,这样不方便,而且人不在家的时候也很难知道家里的IP变成什么了。花生壳有个客户端可以帮忙自动更新IP,华为云提供了python的sdk可以完成这个操作,刚好我懂一点点编程,就自己写了个脚本,分享出来欢迎大家批评指正。这个脚本的原理...

在家里搭了一个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,然后双击即可。




【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。