This shows you the differences between two versions of the page.
Both sides previous revision Previous revision | |||
library:linux:aliyun_ddns [2022/08/11 10:31] lhaosen [2. With Configuration file] |
library:linux:aliyun_ddns [2022/08/11 11:06] (current) lhaosen [2. With Configuration file] |
||
---|---|---|---|
Line 118: | Line 118: | ||
===== - With Configuration file ===== | ===== - With Configuration file ===== | ||
<code python ddns.py> | <code python ddns.py> | ||
+ | # | ||
+ | # | ||
+ | #pip3 install aliyun-python-sdk-core-v3 | ||
+ | #pip3 install aliyun-python-sdk-alidns==2.0.6 | ||
+ | |||
+ | import sys | ||
+ | import json | ||
+ | |||
+ | from aliyunsdkcore.client import AcsClient | ||
+ | from aliyunsdkalidns.request.v20150109 import \ | ||
+ | DescribeSubDomainRecordsRequest, | ||
+ | AddDomainRecordRequest, | ||
+ | UpdateDomainRecordRequest, | ||
+ | DeleteDomainRecordRequest | ||
+ | |||
+ | with open(" | ||
+ | json_dict = json.load(json_file) | ||
+ | # | ||
+ | # | ||
+ | # | ||
+ | |||
+ | ID = json_dict[" | ||
+ | SECRET = json_dict[" | ||
+ | regionId = json_dict[" | ||
+ | domainName = json_dict[" | ||
+ | subDomain = json_dict[" | ||
+ | |||
+ | |||
+ | # | ||
+ | # | ||
+ | # | ||
+ | # | ||
+ | |||
+ | |||
+ | def getTemporaryIPv6Address(): | ||
+ | import requests | ||
+ | import time | ||
+ | | ||
+ | while True: | ||
+ | try: | ||
+ | r = requests.get(' | ||
+ | | ||
+ | if r.status_code == 200 : | ||
+ | ipv6 = r.text | ||
+ | else: | ||
+ | ipv6 = '' | ||
+ | |||
+ | break | ||
+ | except: | ||
+ | print(' | ||
+ | pass | ||
+ | | ||
+ | time.sleep(5) | ||
+ | | ||
+ | return ipv6 | ||
+ | |||
+ | |||
+ | def getDomainInfo(domain, | ||
+ | request = DescribeSubDomainRecordsRequest.DescribeSubDomainRecordsRequest() | ||
+ | request.set_accept_format(' | ||
+ | |||
+ | request.set_Type(Type) | ||
+ | |||
+ | request.set_SubDomain(domain) | ||
+ | |||
+ | response = client.do_action_with_exception(request) | ||
+ | response = str(response, | ||
+ | |||
+ | return json.loads(response) | ||
+ | |||
+ | def updateDomainRecordEx(client, | ||
+ | request = UpdateDomainRecordRequest.UpdateDomainRecordRequest() | ||
+ | request.set_accept_format(' | ||
+ | |||
+ | # request.set_Priority(' | ||
+ | request.set_TTL(' | ||
+ | request.set_Value(ip) # 新的ip地址 | ||
+ | request.set_Type(recordtype) | ||
+ | request.set_RR(subdomain) | ||
+ | request.set_RecordId(record_id) # 更新记录需要指定 record_id ,该字段为记录的唯一标识,可以在获取方法的返回信息中得到该字段的值 | ||
+ | |||
+ | response = client.do_action_with_exception(request) | ||
+ | response = str(response, | ||
+ | return response | ||
+ | |||
+ | |||
+ | if __name__ == " | ||
+ | hostIPv6 = getTemporaryIPv6Address() | ||
+ | typeIPv6 = ' | ||
+ | |||
+ | |||
+ | if hostIPv6 != '': | ||
+ | print(' | ||
+ | else: | ||
+ | print(' | ||
+ | sys.exit(1) | ||
+ | |||
+ | client = AcsClient(ID, | ||
+ | |||
+ | domain = subDomain + ' | ||
+ | info = getDomainInfo(domain, | ||
+ | | ||
+ | if info[" | ||
+ | originalIPv6 = info[" | ||
+ | |||
+ | if hostIPv6 == originalIPv6: | ||
+ | print( " | ||
+ | else: | ||
+ | record_id = info[" | ||
+ | update_result = updateDomainRecordEx(client, | ||
+ | print( " | ||
+ | else: | ||
+ | print(' | ||
+ | sys.exit(2) | ||
+ | | ||
+ | sys.exit(0) | ||
+ | | ||
</ | </ | ||
<code json ddns.json> | <code json ddns.json> | ||
+ | |||
{ | { | ||
" | " | ||
" | " | ||
- | " | + | |
- | " | + | |
+ | " | ||
} | } | ||
</ | </ |