Python+阿里云DNS 搭建DDNS动态域名解析
程序员文章站
2022-07-09 22:44:08
...
家用的动态公网IP在断电以及一段时间后会变化,现在家宽公网IP开网盘以及代理管得越来越严格,已经有检测到被封的案例
上海检测web封停
这让我这种挂种子的PT党(迫真)感到害怕
以前我把国外的免费域名通过Cloudflare的免费动态解析到自己的路由器上,因为国外的免费域名不能备案,怕被查水表(似乎这么久也没挨停机,或许广西比较宽松),为防止万一,在阿里的万网上整了一个几块钱一年的域名来备案解析
看了一圈下来阿里似乎没有提供现成的DDNS动态域名解析,只能自力更生了
参考:使用python实现阿里云动态域名解析DDNS
不过这篇文章有一点过时,里面提到的一些函数已经不可用
于是查阅阿里的SDK说明
云解析API说明
实现思路
1.每天定时查询(例如使用crontab)本机IP,与阿里云DNS的A记录做对比
2.如果不同就更新A记录
代码
import json,requests
from aliyunsdkcore.client import AcsClient
from aliyunsdkcore.acs_exception.exceptions import ClientException
from aliyunsdkcore.acs_exception.exceptions import ServerException
from aliyunsdkalidns.request.v20150109.UpdateDomainRecordRequest import UpdateDomainRecordRequest
from aliyunsdkalidns.request.v20150109.DescribeSubDomainRecordsRequest import DescribeSubDomainRecordsRequest
client = 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("http://www.3322.org/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'))
效果
上一篇: c语言实现循环队列和链式队列
下一篇: DNS域名系统