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

家用的动态公网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'))

效果

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值