def get_dns_record(self, dns_section): """ Get the dns record from dns provider by a given dns section """ DDNSUtils.info( "Reading dns records for [{section.subDomainName}.{section.domainName}], type=[{section.type}]" .format(section=dns_section)) acsClient = AcsClient(ak=self.access_key_id, secret=self.access_Key_secret, region_id='cn-hangzhou') request = DescribeDomainRecordsRequest.DescribeDomainRecordsRequest() request.set_DomainName(dns_section.domainName) request.set_accept_format('json') result = acsClient.do_action_with_exception(request) result = json.loads(result.decode('utf8')) dns_record_list = result['DomainRecords']['Record'] if not dns_record_list: DDNSUtils.err( "Failed to fetch dns resolution records for [{rec.domainName}] by rr={rec.subDomainName} and type={rec.type}" .format(rec=dns_section)) return None matched_records = [] for record in dns_record_list: if record['DomainName'] == dns_section.domainName and record[ 'RR'] == dns_section.subDomainName and record[ 'Type'] == dns_section.type: matched_records.append(record) if not matched_records: return None if len(matched_records) > 1: DDNSUtils.err( 'Duplicate dns resolution records: [{rec.subDomainName}.{rec.domaiNname}]' .format(rec=dns_section)) try: dns_record = DnsRecord(matched_records[0]) except Exception as exception: raise exception return dns_record
def GetAllDomainRecords(DomainName, Types, IP): DomainRecords = DescribeDomainRecordsRequest.DescribeDomainRecordsRequest() DomainRecords.set_accept_format('json') DomainRecords.set_DomainName(DomainName) DomainRecordsJson = json.loads(clt.do_action_with_exception(DomainRecords)) for HostName in HostNameList: for x in DomainRecordsJson['DomainRecords']['Record']: RR = x['RR'] Type = x['Type'] if RR == HostName and Type == Types: RecordId = x['RecordId'] OldIP = x['Value'] print RecordId, ':', OldIP if OldIP != IP: EditDomainRecord(HostName, RecordId, Types, IP) else: print 'IP not changed - Skip update'
def set_dns_record(DomainName, hostname, status): DomainRecords = DescribeDomainRecordsRequest.DescribeDomainRecordsRequest() DomainRecords.set_accept_format('json') DomainRecords.set_DomainName(DomainName) DomainRecordsJson = json.loads( client.do_action_with_exception(DomainRecords)) for x in DomainRecordsJson['DomainRecords']['Record']: if hostname == x['RR']: RecordId = x['RecordId'] SetDomainRecord = SetDomainRecordStatusRequest.SetDomainRecordStatusRequest( ) SetDomainRecord.set_accept_format('json') SetDomainRecord.set_RecordId(RecordId) SetDomainRecord.set_Status(status) SetDomainRecordJson = json.loads( client.do_action_with_exception(SetDomainRecord)) print(SetDomainRecordJson)
def GetAllDomainRecords(DomainName, Types, IP): DomainRecords = DescribeDomainRecordsRequest.DescribeDomainRecordsRequest() DomainRecords.set_accept_format('json') DomainRecords.set_DomainName(DomainName) DomainRecordsJson = json.loads(clt.do_action_with_exception(DomainRecords)) print DomainRecordsJson for HostName in HostNameList: if DomainRecordsJson['TotalCount'] > 0: for x in DomainRecordsJson['DomainRecords']['Record']: RR = x['RR'] Type = x['Type'] if RR == HostName and Type == Types: RecordId = x['RecordId'] print RecordId if x['Value'] != IP: EditDomainRecord(HostName, RecordId, Types, IP) else: AddDomainRecord(HostName, DomainName, Types, IP)
def GetRecordID(self, i): id_r = DescribeDomainRecordsRequest.DescribeDomainRecordsRequest() id_r.set_DomainName(self.config['Domain'].encode()) id_r.set_RRKeyWord(self.config['RR'][i].encode()) id_re = self.clt.do_action(id_r) # parser aliyun dns Record xml root = ET.fromstring(str(id_re)) for domainrecord in root.findall("DomainRecords"): if len(domainrecord) < 1: Log('"%s.%s" record is not register in aliyun, please register first' % (self.config['RR'][i], self.config['Domain'])) self.config['RecordID'][i] = '0' else: for record in domainrecord.findall("Record"): Line = record.find("Line").text if Line == self.config['Line'][i]: self.config['RecordID'][i] = record.find( "RecordId").text
def list_dns_record(DomainName): DomainRecords = DescribeDomainRecordsRequest.DescribeDomainRecordsRequest() DomainRecords.set_accept_format('json') DomainRecords.set_DomainName(DomainName) DomainRecordsJson = json.loads(client.do_action_with_exception(DomainRecords)) print DomainName+':' # print DomainRecordsJson for x in DomainRecordsJson['DomainRecords']['Record']: RecordId = x['RecordId'] RR = x['RR'] Type = x['Type'] Line = x['Line'] Value = x['Value'] TTL = x['TTL'] Status = x['Status'] txt = RecordId+' '+RR+' '+Type+' '+Line+' '+Value+' '+str(TTL)+' '+Status print txt print '\n'
def getDomainRecordId(domainName, RR): """ :param domainName: 域名,如m.aliyun.com,填aliyun.com :param RR:主机记录,就是域名前缀,如abc.aliyun.com,填abc :return: """ request = DescribeDomainRecordsRequest.DescribeDomainRecordsRequest() request.set_DomainName(domainName) client = getAcsClient() response = client.do_action_with_exception(request) print response jsonObj = json.loads(response) records = jsonObj["DomainRecords"]["Record"] for record in records: if record['RR'] == RR: return record['RecordId'] return None
def query_recored_items(self, host, zone=None, tipe=None, page=1, psize=200): request = DescribeDomainRecordsRequest.DescribeDomainRecordsRequest() request.get_action_name() request.set_DomainName(host) request.set_PageNumber(page) request.set_PageSize(psize) if zone: request.set_RRKeyWord(zone) if tipe: request.set_TypeKeyWord(tipe) resp = self._send_reqeust(request) body = resp.json() return body
def get_RR_requestID(RR): id_r = DescribeDomainRecordsRequest.DescribeDomainRecordsRequest() id_r.set_DomainName("ganjl.top") id_r.set_accept_format("JSON") id_re = c.do_action(id_r) j = json.loads(id_re) change_list = {} for r in j["DomainRecords"]["Record"]: if r["RR"] in RR and r['Type'] == 'TXT' and (not change_list.has_key( r["RR"])): change_list[r["RR"]] = r['RecordId'] for r in RR: if not change_list.has_key(r): change_list[r] = None return change_list
def get_record(self, domain, length, sub_domain, record_type): clt = client.AcsClient(self.access_key_id, self.access_key_secret, 'cn-hangzhou') request = DescribeDomainRecordsRequest.DescribeDomainRecordsRequest() request.set_DomainName(domain) request.set_PageSize(length) request.set_RRKeyWord(sub_domain) request.set_Type(record_type) request.set_accept_format(rc_format) result = clt.do_action(request).decode('utf-8').replace( 'DomainRecords', 'data', 1).replace('Record', 'records', 1).replace( 'RecordId', 'id').replace('Value', 'value').replace( 'Line', 'line').replace('telecom', '电信').replace( 'unicom', '联通').replace('mobile', '移动').replace( 'oversea', '境外').replace('default', '默认') result = json.JSONDecoder().decode(result) return result
def check_record_id(dns_rr, dns_domain): times = 0 # 用于检查对应子域名的记录信息 check = 0 # 用于确认对应子域名的记录信息 request = DescribeDomainRecordsRequest.DescribeDomainRecordsRequest() request.set_DomainName(dns_domain) # 设置请求域名 request.set_accept_format(rc_format) # 设置返回格式 result = clt.do_action_with_exception(request) # 发送请求内容 result = JSONDecoder().decode(result) # 接受返回数据 result = result['DomainRecords']['Record'] # 缩小数据范围 for record_info in result: # 遍历返回数据 if record_info['RR'] == dns_rr: # 检查是否匹配 check = 1; break; # 确认完成结束 else: times += 1 # 进入下个匹配 if check: result = result[times]['RecordId'] # 返回记录数值 else: result = -1 # 返回失败数值 return result
def GetAllDomainRecords(DomainName, Types, IP): DomainRecords = DescribeDomainRecordsRequest.DescribeDomainRecordsRequest() DomainRecords.set_accept_format('json') DomainRecords.set_DomainName(DomainName) try: DomainRecordsJson = json.loads( clt.do_action_with_exception(DomainRecords)) who_data = DomainRecordsJson['DomainRecords']['Record'] log_data['record'] = who_data for HostName in HostReacrd: for x in who_data: RR = x['RR'] Type = x['Type'] if RR == HostName and Type == Types: RecordId = x['RecordId'] EditDomainRecord(HostName, RecordId, Types, IP) except Exception as e: log_data['record_error'] = str(e)
def get_record_info(ali_ctl, domain, sub_domain): request = DescribeDomainRecordsRequest.DescribeDomainRecordsRequest() request.set_DomainName(domain) request.set_accept_format('json') try: result = ali_ctl.do_action_with_exception(request) except Exception as f: return 'An error occurred! Error MSG: ' + str(f) else: result = result.decode() result_dict = json.JSONDecoder().decode(result) result_list = result_dict['DomainRecords']['Record'] result = [] for i in result_list: if sub_domain == i['RR']: result.append(i['RecordId']) result.append(i['Value']) break return result
def get_record(self): if os.path.isfile(self.file_name): file_handler = open(self.file_name, 'r') r = file_handler.read() file_handler.close() else: request = DescribeDomainRecordsRequest.DescribeDomainRecordsRequest( ) request.set_PageSize(10) request.set_action_name("DescribeDomainRecords") request.set_DomainName(self.domain_name) request.set_RRKeyWord(self.rr_keyword) request.set_TypeKeyWord(self.record_type) r = self.client.do_action_with_exception(request).decode() print(r) file_handler = open(self.file_name, 'w') file_handler.write(r) file_handler.close() return json.loads(r)
def edit_dns_record(DomainName, hostname, hostname_new, Types, IP): DomainRecords = DescribeDomainRecordsRequest.DescribeDomainRecordsRequest() DomainRecords.set_accept_format('json') DomainRecords.set_DomainName(DomainName) DomainRecordsJson = json.loads( client.do_action_with_exception(DomainRecords)) for x in DomainRecordsJson['DomainRecords']['Record']: if hostname == x['RR']: RecordId = x['RecordId'] UpdateDomainRecord = UpdateDomainRecordRequest.UpdateDomainRecordRequest( ) UpdateDomainRecord.set_accept_format('json') UpdateDomainRecord.set_RecordId(RecordId) UpdateDomainRecord.set_RR(hostname_new) UpdateDomainRecord.set_Type(Types) UpdateDomainRecord.set_TTL('600') UpdateDomainRecord.set_Value(IP) UpdateDomainRecordJson = json.loads( client.do_action_with_exception(UpdateDomainRecord)) print(UpdateDomainRecordJson)
def edit_dns_record(DomainName, hostname, hostname_new, Types, IP): DomainRecords = DescribeDomainRecordsRequest.DescribeDomainRecordsRequest() DomainRecords.set_accept_format('json') DomainRecords.set_DomainName(DomainName) # 打印显示一页500条记录,最多500,默认20 DomainRecords.add_query_param('PageSize', '500') DomainRecordsJson = json.loads(client.do_action_with_exception(DomainRecords)) # 打印页数 # DomainRecords.add_query_param('PageSize', '2') for x in DomainRecordsJson['DomainRecords']['Record']: if hostname == x['RR']: RecordId = x['RecordId'] UpdateDomainRecord = UpdateDomainRecordRequest.UpdateDomainRecordRequest() UpdateDomainRecord.set_accept_format('json') UpdateDomainRecord.set_RecordId(RecordId) UpdateDomainRecord.set_RR(hostname_new) UpdateDomainRecord.set_Type(Types) UpdateDomainRecord.set_TTL('600') UpdateDomainRecord.set_Value(IP) UpdateDomainRecordJson = json.loads(client.do_action_with_exception(UpdateDomainRecord)) print UpdateDomainRecordJson
def get_sub_domain_info(sd, md): request = DescribeDomainRecordsRequest.DescribeDomainRecordsRequest() request.set_DomainName(md) try: response = client.do_action_with_exception(request) result = json.loads(response) except Exception as e: # print(e) logger.info('Acquire main domain failed[EXIT]:' + str(e)) sys.exit(1) # print(result['DomainRecords']['Record']) # ['RecordId']['RR']['Type']['Line']['Value']['TTL']['Status'] # 0000001 sub_domain A default xxx.xxx.xxx.xx 600 ENABLE try: for domain_list in result['DomainRecords']['Record']: if sd == domain_list['RR']: return domain_list['RecordId'], domain_list['Value'] raise Exception('no sub domain') except Exception as e: logger.info('Sub domain error[EXIT]:' + str(e)) sys.exit(1)
def find_target_txt_record(self, domain, rr): req = DescribeDomainRecordsRequest.DescribeDomainRecordsRequest() # req.set_accept_format("JSON") req.set_DomainName(domain) req.set_PageNumber(1) req.set_PageSize(500) req.set_RRKeyWord(rr) resp_str = self.acs_client.do_action_with_exception(req) resp_dict = json.loads(resp_str) logger.debug("find_target_txt_record:" + resp_str) total_count = resp_dict.get("TotalCount") if total_count and type(total_count) == int: for rec in resp_dict["DomainRecords"]["Record"]: if rec["Type"] == 'TXT' and rec['RR'] == rr: return rec['RecordId'] return None
def list_dns_record(DomainName): DomainRecords = DescribeDomainRecordsRequest.DescribeDomainRecordsRequest() pageSize = 100 recordsAll = [] DomainRecords.set_accept_format('json') DomainRecords.set_DomainName(DomainName) DomainRecords.set_PageSize(pageSize) DomainRecordsJson = json.loads( client.do_action_with_exception(DomainRecords)) #print(DomainRecordsJson['PageNumber']) #print(DomainRecordsJson['PageSize']) totalCounts = DomainRecordsJson['TotalCount'] if (totalCounts % pageSize == 0): pageCounts = int(totalCounts / pageSize) else: pageCounts = int(totalCounts / pageSize) + 1 print("get page counts:" + str(pageCounts)) for count in range(pageCounts): print("\nget records from pagenumber: " + str(count + 1) + " \n") DomainRecords.set_PageNumber(count + 1) DomainRecordsJson = json.loads( client.do_action_with_exception(DomainRecords)) for x in DomainRecordsJson['DomainRecords']['Record']: recordsAll.append(x) RecordId = x['RecordId'] RR = x['RR'] Type = x['Type'] Line = x['Line'] Value = x['Value'] TTL = x['TTL'] Status = x['Status'] txt = RR + ' ' + Type + ' ' + Line + ' ' + Value + ' ' + str( TTL) + ' ' + Status print(txt) print("\nall records number: " + str(len(recordsAll))) return recordsAll
def simple_search(website, pagesize=50): rr_domainname = domainname_split(website) if rr_domainname: rr = rr_domainname[0] domainname = rr_domainname[1] simplesearch_list = [] pagenumber = 1 while True: request = DescribeDomainRecordsRequest.DescribeDomainRecordsRequest( ) request.set_DomainName(domainname) request.set_RRKeyWord(rr) request.set_PageSize(pagesize) request.set_PageNumber(pagenumber) result = send_request(request) simplesearch_list.extend(result['DomainRecords']['Record']) totalcount = result['TotalCount'] max_page_number = totalcount / pagesize + 1 if pagenumber == max_page_number: break pagenumber += 1 return simplesearch_list return False
def setDomainRRAsValue(self, domain, RR, value): print('Set RR {} as value {} for domain {}.'.format(RR, value, domain)) request = DescribeDomainRecordsRequest.DescribeDomainRecordsRequest() request.set_DomainName(self.getBaseDomain(domain)) response = json.loads( self.client.do_action_with_exception(request).decode()) for record in response['DomainRecords']['Record']: if record['Type'] == 'TXT' and record['RR'] == RR and record[ 'Value'] == value: print('value already exists.') return print('Create a new record.') request = AddDomainRecordRequest.AddDomainRecordRequest() request.set_DomainName(self.getBaseDomain(domain)) request.set_Type('TXT') request.set_RR(RR) request.set_Value(value) response = json.loads( self.client.do_action_with_exception(request).decode()) print(response)
v6 = requests.get(url=v6api) #IPV6 Address Variable:"v6.text" print("Your IPV6 Address:") print(v6.text) #--------------------------------------------------------------------------------- client = AcsClient(accesskeyid, accesssecret, 'cn-hangzhou') #Aliyun AccessKey #--------------------------------------------------------------------------------- if ipv4 == 'true': #Judging whether IPV4 DDNS is open print('Your IPV4 DDNS is open.') #Describe IPV4 Records describev4 = DescribeDomainRecordsRequest() #Start Describe Domain Records describev4.set_accept_format('json') describev4.set_DomainName(domain) #Main Domain describev4.set_RRKeyWord(rr) #Your RRKeyWord describev4.set_TypeKeyWord("A") #Your Record Type describebackv4 = client.do_action_with_exception( describev4) #Get Back JSON # python2: print(response) print(str(describebackv4, encoding='utf-8')) #Print JSON #--------------------------------------------------------------------------------- #Read IPV4 JSON recordlistv4 = json.loads(describebackv4) #Read Back JSON
items = [] for item in ResList["DomainRecords"]["Record"]: if item["Status"] == 'ENABLE': items.append(item["Value"]) return items[0] clt = client.AcsClient(ak_parser.getAccessKeyId(), ak_parser.getAccessKeySecrect(), regionId) # 构造修改解析记录的请求 update_request = UpdateDomainRecordRequest.UpdateDomainRecordRequest() update_request.set_action_name("UpdateDomainRecord") update_request.set_Type("A") update_request.set_RR("abysswatcher.xyz") update_request.set_Value(getPubIPAddr()) # 发起修改请求,下面会读取解析列表进行验证 clt.do_action(update_request) # 构造读取解析列表的请求 query_request = DescribeDomainRecordsRequest.DescribeDomainRecordsRequest() query_request.set_DomainName(domain_name) query_request.set_accept_format('json') # 发起请求,获取结果 result = clt.do_action(query_request) # 将json格式的字典转化为 python 列表格式 json_to_pylist = json.loads(result) # print json_to_pylist print getCurrentIP(json_to_pylist)
docelem = domtree.documentElement records = docelem.getElementsByTagName("Record") for record in records: if record.getElementsByTagName("RR")[0].childNodes[0].data == RR: return { "RecordId": record.getElementsByTagName("RecordId")[0].childNodes[0].data, "Value": record.getElementsByTagName("Value")[0].childNodes[0].data } return None rip = "\<code\>(?P<num>[\d\.]*)\</code>" clt = client.AcsClient(keyId, keySecret, 'cn-hangzhou') descDomainReq = DescribeDomainRecordsRequest() descDomainReq.set_DomainName(domain) descDomainRes = clt.do_action(descDomainReq) recordInfo = getRecordInfo(descDomainRes, RR) if recordInfo is None: raise Exception("can't find RR value " + RR) print recordInfo currentIP = recordInfo["Value"] recordId = recordInfo["RecordId"] while True: try: result = urllib2.urlopen('http://ip.cn/', timeout=3) text = result.read() ip = re.findall(rip, text)[0] if currentIP == ip: print time.strftime(ISOTIMEFORMAT, time.localtime(
def listRecords(domainName): request = DescribeDomainRecordsRequest.DescribeDomainRecordsRequest() request.set_DomainName(domainName) response = client.do_action_with_exception(request) return json.loads(response)
#!/usr/bin/python from aliyunsdkcore import client from aliyunsdkalidns.request.v20150109 import DescribeDomainRecordsRequest from aliyunsdkalidns.request.v20150109 import UpdateDomainRecordRequest from aliyunsdkalidns.request.v20150109 import AddDomainRecordRequest from aliyunsdkalidns.request.v20150109 import DeleteDomainRecordRequest AccessKeyID = "xxx" AccessKeySecret = "xxx" import json clt = client.AcsClient(AccessKeyID, AccessKeySecret, 'cn-hangzhou') listRequest = DescribeDomainRecordsRequest.DescribeDomainRecordsRequest() domain = "t5b.net" listRequest.set_DomainName(domain) listRequest.set_accept_format('json') listRequest.set_PageSize(100) listResult = clt.do_action(listRequest) listResult2 = json.loads(listResult) listResult3 = listResult2['DomainRecords']['Record'] for i in range(listResult2['TotalCount']): print listResult3[i]['RR'], listResult3[i]['Value'], listResult3[i][ 'RecordId']