1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > Python+阿里云DNS 搭建DDNS动态域名解析

Python+阿里云DNS 搭建DDNS动态域名解析

时间:2018-09-02 12:35:49

相关推荐

Python+阿里云DNS 搭建DDNS动态域名解析

家用的动态公网IP在断电以及一段时间后会变化,现在家宽公网IP开网盘以及代理管得越来越严格,已经有检测到被封的案例

上海检测web封停

这让我这种挂种子的PT党(迫真)感到害怕

以前我把国外的免费域名通过Cloudflare的免费动态解析到自己的路由器上,因为国外的免费域名不能备案,怕被查水表(似乎这么久也没挨停机,或许广西比较宽松),为防止万一,在阿里的万网上整了一个几块钱一年的域名来备案解析

看了一圈下来阿里似乎没有提供现成的DDNS动态域名解析,只能自力更生了

参考:使用python实现阿里云动态域名解析DDNS

不过这篇文章有一点过时,里面提到的一些函数已经不可用

于是查阅阿里的SDK说明

云解析API说明

实现思路

1.每天定时查询(例如使用crontab)本机IP,与阿里云DNS的A记录做对比

2.如果不同就更新A记录

代码

import json,requestsfrom aliyunsdkcore.client import AcsClientfrom aliyunsdkcore.acs_exception.exceptions import ClientExceptionfrom aliyunsdkcore.acs_exception.exceptions import ServerExceptionfrom aliyunsdkalidns.request.v0109.UpdateDomainRecordRequest import UpdateDomainRecordRequestfrom aliyunsdkalidns.request.v0109.DescribeSubDomainRecordsRequest import DescribeSubDomainRecordsRequestclient = AcsClient('***', '*****', 'cn-hangzhou')request = DescribeSubDomainRecordsRequest()request.set_accept_format('json')request.set_SubDomain("***.***")response = client.do_action_with_exception(request)print(str(response, encoding='utf-8'))old=json.loads(str(response, encoding='utf-8'))old=old["DomainRecords"]["Record"][0]["Value"]now=requests.get("/dyndns/getip")now=now.text.replace("\n", "")if(now!=old):print(old,"需要更新为",now)request = UpdateDomainRecordRequest()request.set_accept_format('json')request.set_RecordId("*****")request.set_RR("dns")request.set_Type("A")request.set_Value(now)response = client.do_action_with_exception(request)print(str(response, encoding='utf-8'))

效果

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。