async def dns_get_ip(request): if request.method == 'POST': data = await request.post() _config_domain = data.get("domain") full_domain = _config_domain.split("_")[0] domain_dic = config.get_domain(_config_domain) dns_domain = domain_dic.get('domain') if not dns_domain: print("The domain in config.yml not set domain attribute") # 通过索引切片,获取最前面的RR值。如www.unknowname.win取值www full_len = len(full_domain) domain_len = len(dns_domain) + 1 query_keyword = full_domain[:full_len - domain_len] request = DescribeDomainRecordsRequest() request.set_accept_format('json') request.set_DomainName(dns_domain) request.set_Lang("en") request.set_PageSize(20) request.set_KeyWord(query_keyword) try: response = dns_client.do_action_with_exception(request) resp = str(response, encoding='utf-8') detail = json.loads(resp) backup_ips = domain_dic.get("ips") detail["BackupIPs"] = backup_ips return web.json_response(detail) except Exception as e: print(e) return web.json_response({})
def fetch_records(domain: str, access_key_dict: dict, domain_dict: dict): item = domain_dict[domain] ak_ref = item['accesskey'] ak_item = access_key_dict[ak_ref] client = AcsClient(ak_item['id'], ak_item['secret'], ak_item['area']) item['client'] = client request = DescribeDomainRecordsRequest() request.set_accept_format('json') request.set_DomainName(domain) request.set_PageNumber('1') request.set_Type('A') request.set_PageSize('500') all_records = [] for host in item['hosts']: if item['hosts'][host] is not None: request.set_SearchMode('LIKE') request.set_KeyWord('.' + host) else: request.set_SearchMode('EXACT') request.set_KeyWord(host) try: resp = to_dict(client.do_action_with_exception(request)) domain_records = resp['DomainRecords'] if resp['TotalCount'] > 0 and domain_records is not None and len( domain_records['Record']) > 0: all_records.extend(domain_records['Record']) except ServerException as err: print(" ERROR: {}".format(err.get_error_msg())) return all_records
def get_domain_record(client, domain, rr): """ 获取解析记录 :param client :param domain: :param rr: :return: """ request = DescribeDomainRecordsRequest() request.set_accept_format('json') request.set_DomainName(domain) request.set_KeyWord(rr) response = client.do_action_with_exception(request) records = json.loads(response)['DomainRecords']['Record'] if len(records) > 0: for item in records: if item['RR'] == rr: return item return None