第一步,安装alidn的sdk
1 |
pip install aliyun-python-sdk-alidns |
第二步,按下面的脚本修改成为自已的配置
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 |
-*- coding: UTF-8 -*- import json import os import re import sys from datetime import datetime from aliyunsdkalidns.request.v20150109 import UpdateDomainRecordRequest, DescribeDomainRecordsRequest, \ DescribeDomainRecordInfoRequest, AddDomainRecordRequest from aliyunsdkcore import client ''' 下载 https://develop.aliyun.com/sdk/java?spm=5176.doc29772.416540.246.rjauTQ 解压安装 sudo python setup.py install #安装alidns python DSK pip install aliyun-python-sdk-alidns https://help.aliyun.com/document_detail/29772.html?spm=5176.doc29774.6.612.oNWaU3 crontab -e 定时10分钟执行 */10 * * * * /usr/bin/python2 /home/t7.py crontab -l 先创建记下record id ''' # 请填写你的Access Key ID access_key_id = "yourid" # 请填写你的Access Key Secret access_Key_secret = "your" # 请填写你的账号ID account_id = "0000" # 如果选择yes,则运行程序后仅现实域名信息,并不会更新记录,用于获取解析记录ID。 # 如果选择NO,则运行程序后不显示域名信息,仅更新记录 i_dont_know_record_id = 'no' # 请填写你的一级域名 rc_domain = 'xxx.xxx' # 请填写你的解析记录 rc_rr = 'www' # 请填写你的记录类型,DDNS请填写A,表示A记录 rc_type = 'A' # 请填写解析记录ID rc_record_id = 'yourid ' rc_record_RequestId = 'D4' # 请填写解析有效生存时间TTL,单位:秒 rc_ttl = '600' # 请填写返还内容格式,json,xml rc_format = 'json' def my_ip(): get_ip_method = os.popen('curl -s ip.cn') get_ip_responses = get_ip_method.readlines()[0] get_ip_pattern = re.compile(r'\d+\.\d+\.\d+\.\d+') get_ip_value = get_ip_pattern.findall(get_ip_responses)[0] return get_ip_value def check_records(dns_domain): clt = client.AcsClient(access_key_id, access_Key_secret, 'cn-hangzhou') request = DescribeDomainRecordsRequest.DescribeDomainRecordsRequest() request.set_DomainName(dns_domain) request.set_accept_format(rc_format) result = clt.do_action(request) print result return result def old_ip(): clt = client.AcsClient(access_key_id, access_Key_secret, 'cn-hangzhou') request = DescribeDomainRecordInfoRequest.DescribeDomainRecordInfoRequest() #print result, "-------" request.set_RecordId(rc_record_id) request.set_accept_format(rc_format) #print result, "-------" result = clt.do_action(request) #print result, "-------" result = json.JSONDecoder().decode(result) print result result = result['Value'] return result def update_dns(dns_rr, dns_type, dns_value, dns_record_id, dns_ttl, dns_format): print dns_rr, dns_type, dns_value, dns_record_id, dns_ttl, dns_format clt = client.AcsClient(access_key_id, access_Key_secret, 'cn-hangzhou') request = UpdateDomainRecordRequest.UpdateDomainRecordRequest() request.set_RR(dns_rr) request.set_Type(dns_type) request.set_Value(dns_value) request.set_RecordId(dns_record_id) request.set_TTL(dns_ttl) request.set_accept_format(dns_format) print request,"---" result = clt.do_action(request) print result return result def create_dns(rc_domain, dns_rr, dns_type, dns_value, dns_record_id, dns_ttl, dns_format): clt = client.AcsClient(access_key_id, access_Key_secret, 'cn-hangzhou') request = AddDomainRecordRequest.AddDomainRecordRequest() request.set_DomainName(rc_domain) request.set_RR(dns_rr) request.set_Type(dns_type) request.set_Value(dns_value) #request.set_RecordId(dns_record_id) #request.set_TTL(dns_ttl) #request.set_accept_format(dns_format) print request result = clt.do_action(request) print result result = json.JSONDecoder().decode(result) print result print result['RequestId'], result['RecordId'] return result def write_to_file(): time_now = datetime.now().strftime('%Y-%m-%d %H:%M:%S') #current_script_path = sys.argv[0] #print current_script_path # 绝对路径获取 current_script_path = os.path.abspath(sys.argv[0]) current_script_path = os.path.dirname(current_script_path) log_file = current_script_path + '/' + 'aliyun_ddns_log.txt' #print log_file write = open(log_file, 'a') write.write(time_now + ' ' + str(rc_value) + ' ' + str(rc_record_id)+ '\n') write.close() return if __name__ == '__main__': current_script_path = sys.argv[0] print current_script_path,"---" rc_value = my_ip() print rc_value #create_dns(rc_domain, rc_rr, rc_type, rc_value, rc_record_id, rc_ttl, rc_format) rc_value_old = old_ip() print rc_value, rc_value_old if i_dont_know_record_id == 'yes': check_records(rc_domain) elif i_dont_know_record_id == 'no': #rc_value ='58.100.92.135' if rc_value_old == rc_value: print 'The specified value of parameter Value is the same as old' else: update_dns(rc_rr, rc_type, rc_value, rc_record_id, rc_ttl, rc_format) write_to_file() |
第三步:按上面脚本来配置crontab
阿里云的github: https://github.com/aliyun