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 | #!/usr/bin/env python #coding=utf-8 """ 新增域名解析记录,参数说明如下: <accessKeyId>:填写自己的accessKey,建议使用RAM角色管理的Key <accessSecret>:填写自己的accessSecret,建议使用RAM角色管理的Secret """ from aliyunsdkcore.client import AcsClient from aliyunsdkcore.acs_exception.exceptions import ClientException from aliyunsdkcore.acs_exception.exceptions import ServerException from leokim_function import * from check_cnnect_network import * import os import time while True : #判断存放IP的文件是否存在,不存在则创建 if os.path.exists( "./ip" ): pass else : wirte_to_file( "./ip" , "0.0.0.0" ) client = AcsClient( '<accessKeyId>' , '<accessSecret>' , 'cn-hangzhou' ) if (connect_code() = = 200 ): #通过函数获取外网ip ip = get_internet_ip() #print(ip) else : time.sleep( 5 ) continue #下面开始对比ip,如果ip与之前记录的ip一致,则不执行任何操作,如果ip有变化,则会更新本地存储文件和更新域名解析 with open ( "./ip" , 'r' ) as f: old_ip = f.read() if ip = = old_ip: print ( "noupdate" + "\nnew_ip:" + ip + "\nold_ip:" + old_ip) else : #print("update"+"\nnew_ip:"+ip+"\nold_ip:"+old_ip) wirte_to_file( "./ip" ,ip) des_relsult = Describe_SubDomain_Records(client, "A" , "rpi.sgl1885.com" ) #判断子域名解析记录查询结果,TotalCount为0表示不存在这个子域名的解析记录,需要新增一个 if des_relsult[ "TotalCount" ] = = 0 : add_relsult = add_record(client, "5" , "600" , "A" ,ip, "rpi" , "sgl1885.com" ) record_id = add_relsult[ "RecordId" ] print ( "域名解析新增成功!" ) #判断子域名解析记录查询结果,TotalCount为1表示存在这个子域名的解析记录,需要更新解析记录,更新记录需要用到RecordId>,这个在查询函数中有返回des_relsult["DomainRecords"]["Record"][0]["RecordId"] elif des_relsult[ "TotalCount" ] = = 1 : record_id = des_relsult[ "DomainRecords" ][ "Record" ][ 0 ][ "RecordId" ] update_record(client, "5" , "600" , "A" ,ip, "rpi" ,record_id) print ( "域名解析更新成功!" ) else : record_id = 0 print ( "存在两个子域名解析记录值,请核查删除后再操作!" ) path = './RecordId' wirte_to_file(path,record_id) time.sleep( 10 ) |
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 | #!/usr/bin/env python #coding=utf-8 """ Priority(5):解析优先级,非必填 TTL(600):TTL值,默认600秒,非必填 Value("121.201.65.98"):记录值,必填 request.set_Type("A"):解析类型,A为解析成IPv4,如需解析根域名,填写@,必填 request.set_RR("www"):子域名,必填 request.set_DomainName("xiaoanran.club"):根域名,必填 返回值说明: RecordId:解析记录ID,修改和查询域名时需要用到 RequestId:请求ID """ from aliyunsdkalidns.request.v20150109.AddDomainRecordRequest import AddDomainRecordRequest from aliyunsdkalidns.request.v20150109.UpdateDomainRecordRequest import UpdateDomainRecordRequest from aliyunsdkalidns.request.v20150109.DescribeSubDomainRecordsRequest import DescribeSubDomainRecordsRequest import urllib import json #写入文件 def wirte_to_file(path,content): with open (path, 'w' ) as f: f_name = open (path, 'w' ) f_name.write(content) #新增解析记录,返回json格式的数据 def add_record(client,priority,ttl,record_type,value,rr,domainname): request = AddDomainRecordRequest() request.set_accept_format( 'json' ) request.set_Priority(priority) request.set_TTL(ttl) request.set_Value(value) request.set_Type(record_type) request.set_RR(rr) request.set_DomainName(domainname) response = client.do_action_with_exception(request) #response = str(response, encoding='utf-8') relsult = json.loads(response) return relsult #更新解析记录 def update_record(client,priority,ttl,record_type,value,rr,record_id): request = UpdateDomainRecordRequest() request.set_accept_format( 'json' ) request.set_Priority(priority) request.set_TTL(ttl) request.set_Value(value) request.set_Type(record_type) request.set_RR(rr) request.set_RecordId(record_id) response = client.do_action_with_exception(request) #response = str(response, encoding='utf-8') return response #查询解析记录 def Describe_SubDomain_Records(client,record_type,subdomain): request = DescribeSubDomainRecordsRequest() request.set_accept_format( 'json' ) request.set_Type(record_type) request.set_SubDomain(subdomain) response = client.do_action_with_exception(request) #response = str(response, encoding='utf-8') relsult = json.loads(response) return relsult #获取外网地址 def get_internet_ip(): response = urllib.urlopen( 'http://www.3322.org/dyndns/getip' ) ip = response.read() return ip |