Python 3.x + 阿里云SDK 实现DDNS

想找个现成的阿里云DDNS自动更新Python程序,找了一圈竟然没有一个好用的。
大部分问题都是需要阿里云的Github代码,也就是所谓的 aliyunsdkalidns ,其实根本没必要。
有一个倒是可以直接用,但是代码写的太复杂,简单的功能非要搞好几个类,绕来绕去的。
还是自己动手丰衣足食了。

以下代码需安装 阿里云核心SDK 和 阿里云域名SDK,即:

pip install aliyun-python-sdk-core
pip install aliyun-python-sdk-domain

另外需要申请主用户的AccessKey,注意不能是子用户的。

from aliyunsdkcore.client import AcsClient
from aliyunsdkcore.request import CommonRequest
import json
import requests
import re

# 初始化
client = AcsClient('<AccessKey>', '<AccessKeySrc>', 'cn-hangzhou')
request = CommonRequest()
request.set_domain('alidns.aliyuncs.com')
request.set_version('2015-01-09')
domain = "域名"
prefix = "前缀"

# 获取公网IP地址
html_text = requests.get("https://ip.cn/").text
ip_text = re.findall(r'(?<![\.\d])(?:25[0-5]\.|2[0-4]\d\.|[01]?\d\d?\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?)(?![\.\d])', html_text)
ip = ip_text[0]
print("公网IP地址:"+ ip)
print("域名:"+ prefix + "." + domain)

# 获取二级域名的RecordId
request.set_action_name('DescribeDomainRecords')
request.add_query_param('DomainName', domain)
response = client.do_action_with_exception(request)
jsonObj = json.loads(response.decode("UTF-8"))
records = jsonObj["DomainRecords"]["Record"]
record = None
for rec in records:
    if rec["RR"] == prefix:
        record = rec
        break
if record == None:
    print("未找到二级域名记录")
    exit()
elif record['Value'] == ip:
    print("现有IP记录已为最新")
    exit()

# 更新IP记录
request.set_action_name('UpdateDomainRecord')
request.add_query_param('RecordId', record['RecordId'])
request.add_query_param('RR', prefix)
request.add_query_param('Type', 'A')
request.add_query_param('Value', ip)
response = client.do_action_with_exception(request)

print("DDNS更新完成\n")

 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值