欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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'))

效果

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

相关标签: dns服务器