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 get_dns_record_id(client, domain, host, ip_address): r""" Get DNS RecordId from Aliyun :param client: client object :param domain: domain name, e.g. "dongs.xyz" :param host: host, e.g. "www" :param ip_address: new Ip address, e.g. "127.0.0.1" :return: record id """ try: request = DescribeDomainRecordsRequest() request.set_accept_format('json') request.set_DomainName(domain) request.set_PageSize(100) response = client.do_action_with_exception(request) json_data = json.loads(str(response, encoding='utf-8')) for RecordId in json_data['DomainRecords']['Record']: if host == RecordId['RR']: logging.info("Found a matched RecordId: {_record_id}.".format( _record_id=RecordId["RecordId"])) if ip_address == RecordId['Value']: return None else: return RecordId['RecordId'] except Exception as e: logging.error("Unable to get RecordId.") logging.error(e) sys.exit(-1)
def get_addAndModifyDomainList(ip, domainList): addDomainList = [] modifyDomainList = [] for domain in domainList: domain_name = domain['DomainName'] # logger.debug('domain:{}',domain_name) describeDomainRecordsRequest = DescribeDomainRecordsRequest() describeDomainRecordsRequest.set_TypeKeyWord(type_keyWord) describeDomainRecordsRequest.set_RRKeyWord(rr_keyWord) describeDomainRecordsRequest.set_PageNumber(1) describeDomainRecordsRequest.set_PageSize(10) describeDomainRecordsRequest.set_DomainName(domain_name) describeDomainRecordsResponse = client.do_action_with_exception( describeDomainRecordsRequest) describeDomainRecords = json.loads( str(describeDomainRecordsResponse, encoding='utf-8')) # logger.debug('domain:{}',describeDomainRecords) if describeDomainRecords['TotalCount'] > 0: record = describeDomainRecords['DomainRecords']['Record'][0] # logger.debug('record :{}', record) if ip != record['Value']: {'domain_name': domain_name, 'old_ip': record['Value']} modifyDomainList.append({ 'domain_name': domain_name, 'old_ip': record['Value'] }) else: addDomainList.append(domain_name) logger.debug('addDomainList:{}', addDomainList) logger.debug('modifyDomainList:{}', modifyDomainList) return addDomainList, modifyDomainList
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_record_page(self, domain_name, page_number=1): request = DescribeDomainRecordsRequest() request.set_accept_format('json') request.set_PageNumber(page_number) request.set_PageSize(self.page_size) request.set_DomainName(domain_name) response = self.__client.do_action_with_exception(request) return json.loads(str(response, encoding="utf8"))['DomainRecords']
def get_dns_domain(self, format, page, limit, domain): from aliyunsdkalidns.request.v20150109.DescribeDomainRecordsRequest import DescribeDomainRecordsRequest request = DescribeDomainRecordsRequest() request.set_accept_format(format) request.set_DomainName(domain) request.set_PageNumber(page) request.set_PageSize(limit) try: response = self.client.do_action_with_exception(request) except: return False return response
def get_domain_name_records(self, obj): self.client = AcsClient(obj.account.access_id, obj.account.access_key, 'cn-hangzhou') request = DescribeDomainRecordsRequest() request.set_accept_format('json') request.set_PageSize(100) request.set_DomainName(obj.domain_name) try: response = self.client.do_action_with_exception(request) ret = json.loads(str(response, encoding='utf-8'))['DomainRecords']['Record'] return {'code': 1, 'message': ret} except Exception as e: return {'code': 0, 'message': e}
def get(self, request, format=None): domain_name = request.GET.get('domain_name') page = request.GET.get('page') per_page = request.GET.get('per_page') client = settings.ALIAPI_LINGFANNAO req = DescribeDomainRecordsRequest() req.set_accept_format('json') req.set_DomainName(domain_name) req.set_PageNumber(page) req.set_PageSize(per_page) res = client.do_action_with_exception(req).decode('utf-8') return Response(json.loads(res))
def sub_domains(self): """ 查询所有子域名 :return: list|None """ try: client = AcsClient(self.key, self.secret, 'cn-hangzhou') request = DescribeDomainRecordsRequest() request.set_accept_format('json') request.set_PageSize(500) # 分页查询时设置的每页行数,最大值500,默认为20 request.set_DomainName(self.second_level_domain) response = client.do_action_with_exception(request) response = json.loads(response) records = response["DomainRecords"]["Record"] if not records: logger.error(F"query sub domains failed: {response}") return None data = [] types_ = ("MX", "TXT", "SRV", "NS") # 过滤掉"MX", "TXT", "SRV", "NS"类型的记录 for item in records: if item["RR"] != self.prefix_domain and item["Type"] not in types_ and \ item["RR"].endswith(self.prefix_domain): data.append( { "name": item["RR"] + "." + self.second_level_domain, "type": item["Type"], "line": self.record_line(key=item["Line"]), "value": item["Value"], "mx": item["Priority"] if "Priority" in item else "0", "ttl": item["TTL"], "status": "正常" if item["Status"] == "ENABLE" else "暂停", # ENABLE DISABLE } ) return data except KeyError as e: logger.error(F"domain not exist: {e}") except Exception: logger.error("query sub domains unknown exception") logger.error(traceback.format_exc())
def get_domain_records(self, domain_name, page_num=1, page_size=20): ''' 获取域名解析记录列表 ''' request = DescribeDomainRecordsRequest() request.set_accept_format('json') request.set_DomainName(domain_name) request.set_PageNumber(page_num) request.set_PageSize(page_size) data = self._request(request) total = data.get('TotalCount') data = data.get('DomainRecords') data_list = data.get('Record') data = { 'total': total, 'data_list': data_list, } return data
def __get_total_page_num(self, domainName, PageNum=1, PageSize=1): ''' 获取解析记录页数 :param domainName: 域名 :return: ''' request = DescribeDomainRecordsRequest() request.set_DomainName(domainName) request.set_PageNumber(PageNum) request.set_PageSize(PageSize) response = self.__do_action(request) if self.TotalPageNum != 0: return response['DomainRecords']['Record'] else: if int(response['TotalCount']) % self.PageSize != 0: self.TotalPageNum = int( response['TotalCount'] / self.PageSize) + 1 else: self.TotalPageNum = int(response['TotalCount'] / self.PageSize) return self.TotalPageNum