Пример #1
0
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({})
Пример #2
0
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)
Пример #3
0
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
Пример #4
0
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
Пример #5
0
 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']
Пример #6
0
    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
Пример #7
0
    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}
Пример #8
0
    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))
Пример #9
0
    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())
Пример #10
0
    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