#!/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)
#!/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