利用阿里云API自动更新宽带动态IP解析,作为DDNS使用
原文引用:http://bbs.atoo.top:8081/viewtopic.php?f=1&t=4
花9元钱在阿里云上云注册一个“atoo.top”的顶级域名,再利用下面的代码定时更新你家路由器的动态IP,不管宽带IP怎么变,都可以正确访问了,这样就实现了DDNS的效果了。
下面Python代码中的AcsClient()这个函数的参数请在https://help.aliyun.com/document_detail/53090.html 上查看。
|
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 |
# 阿里支DNS自动更新IP地址程序(Python) # 文件名 : aliyundns.py # 调用方法: python aliyundns.py www.atoo.top #!/usr/bin/env python #coding=utf-8 import sys import json import urllib import datetime 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 if len(sys.argv)<=1: print 'Usage: python aliyundna.py www.atoo.top' sys.exit(0) accessKeyId = 'LTAIjO*****BfI' accessSecret = 'JlvkmaCPek3SqqYaF*******8Zp' DomainName = sys.argv[1] # print sys.argv[0], sys.argv[1], sys.argv[2] client = AcsClient(accessKeyId, accessSecret, 'cn-hangzhou') request = DescribeSubDomainRecordsRequest() request.set_accept_format('json') request.set_SubDomain(DomainName) response = client.do_action_with_exception(request) # print response response = json.loads(response.decode()) RecordId = response['DomainRecords']['Record'][0]['RecordId'] RR = response['DomainRecords']['Record'][0]['RR'] old_ip = response['DomainRecords']['Record'][0]['Value'] new_ip = urllib.urlopen("http://ip.42.pl/raw").read() if old_ip != new_ip: request = UpdateDomainRecordRequest() request.set_accept_format('json') request.set_Value(new_ip) request.set_Type("A") request.set_RR(RR) request.set_RecordId(RecordId) response = client.do_action_with_exception(request) print datetime.datetime.now(), ' ', DomainName,': ', old_ip, ' => ', new_ip else : print datetime.datetime.now(), ' ', DomainName, ': IP has not changed.', new_ip |
调用方法: python? aliyundns.py? www.atoo.top