Пример #1
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
Пример #2
0
 def __getRecordValue(self):
     self.__requireParmSet()
     # create request and set parm
     request = DescribeDomainRecordsRequest()
     request.set_DomainName(self.domain_name)
     request.set_TypeKeyWord(self.record_type)
     request.set_RRKeyWord(self.sub_domain_name)
     # execute
     res = self.__tryExecute(request)
     if res[0]:
         print "ok: " + res[1]
         resJsonObj = json.loads(res[1])
         for record in resJsonObj["DomainRecords"]["Record"]:
             if record["RR"] == self.sub_domain_name:
                 self.has_remote_record = True
                 self.record_id = record["RecordId"]
                 self.remote_record_value = record["Value"]
                 return True, record["Value"]
         self.has_remote_record = False
         self.record_id = ""
         self.remote_record_value = ""
         return True, None
     else:
         print "error: " + res[1]
         return res
Пример #3
0
    def get_dns_list(self):

        request = DescribeDomainRecordsRequest()
        request.set_accept_format('json')
        request.set_DomainName(self.get_data()['domainName'])
        request.set_RRKeyWord(self.get_data()['tertiaryDomain'])
        response = self.client.do_action_with_exception(request)
        res_json = json.loads(str(response, encoding='utf-8'))
        return res_json['DomainRecords']['Record']
Пример #4
0
 def _get_domain_records_by_page(self, domain, rr, record_type, page_no):
     desc_domain_req = DescribeDomainRecordsRequest()
     desc_domain_req.set_DomainName(domain)
     desc_domain_req.set_accept_format("JSON")
     desc_domain_req.set_PageNumber(page_no)
     if rr is not None:
         desc_domain_req.set_RRKeyWord(rr)
     if record_type is not None:
         desc_domain_req.set_TypeKeyWord(record_type)
     desc_domain_res = self.clt.do_action_with_exception(desc_domain_req)
     return json.loads(desc_domain_res)
Пример #5
0
 def get_record(self, index: int):
     """ get the domain record on ali yun control center """
     req = DescribeDomainRecordsRequest()
     req.set_DomainName(self._config.domain)
     req.set_RRKeyWord(self._config.rr_list[index])
     resp = self._client.do_action_with_exception(req).decode()
     dic = json.loads(resp)
     records = dic['DomainRecords']['Record']
     if not records:
         raise Exception('record not exist')
     record = records[0]
     return record
Пример #6
0
def get_record(rr=None):
    client = AcsClient(accessKeyId, accessSecret, 'cn-hangzhou')

    request = DescribeDomainRecordsRequest()
    request.set_accept_format('json')

    request.set_DomainName("henqy.club")
    if not rr:
        pass
    else:
        request.set_RRKeyWord(rr)
    response = client.do_action_with_exception(request)
    record = loads(response)['DomainRecords']['Record']
    return record
Пример #7
0
def get_dns_record(client: AcsClient, subdomain: str, topdomain: str):
    result = {"ipv4": None, "ipv6": None}
    request = DescribeDomainRecordsRequest()
    request.set_accept_format("json")
    request.set_DomainName(topdomain)
    request.set_RRKeyWord(subdomain)
    response = client.do_action_with_exception(request)
    response = json.loads(response)
    for record in response["DomainRecords"]["Record"]:
        if result["ipv4"] is None and record["Type"] == "AA":
            result["ipv4"] = record
        if result["ipv6"] is None and record["Type"] == "AAAA":
            result["ipv6"] = record
    return result
Пример #8
0
    def _find_domain_record_id(self, domain, rr='', typ='', value=''):
        request = DescribeDomainRecordsRequest()
        request.set_accept_format("json")

        request.set_DomainName(domain)
        request.set_TypeKeyWord(typ)
        request.set_RRKeyWord(rr)
        request.set_ValueKeyWord(value)

        records = json.loads(self._client.do_action_with_exception(request))

        for record in records['DomainRecords']['Record']:
            if record['RR'] == rr:
                return record['RecordId']
        raise errors.PluginError(
            'Unexpected error determining record identifier for {0}: {1}'.
            format(rr, 'record not found'))
Пример #9
0
    def get_domain_records(self,
                           domain_name: str,
                           host_record_keyword: str = None,
                           type_keyword: str = 'A',
                           value_keyword: str = None) -> dict:
        if not self._data_valid(domain_name):
            raise RuntimeError('缺少域名名称')

        request = DescribeDomainRecordsRequest()
        request.set_accept_format('json')

        request.set_DomainName(domain_name)
        # request.set_PageSize('100')
        if self._data_valid(host_record_keyword):
            request.set_RRKeyWord(host_record_keyword)
        request.set_TypeKeyWord(type_keyword)
        if self._data_valid(value_keyword):
            request.set_ValueKeyWord(value_keyword)

        response = self.client.do_action_with_exception(request)  # type: bytes
        response_data = json.loads(response.decode('utf-8'))
        return response_data
Пример #10
0
def get_domain_record(keyID, keySecret, domainName, recordName):
    from aliyunsdkcore.client import AcsClient
    from aliyunsdkalidns.request.v20150109.DescribeDomainRecordsRequest import DescribeDomainRecordsRequest

    client = AcsClient(keyID, keySecret, 'cn-hangzhou')

    request = DescribeDomainRecordsRequest()
    request.set_accept_format('json')

    request.set_DomainName(domainName)
    request.set_RRKeyWord(recordName)

    response = client.do_action_with_exception(request)

    records = json.loads(str(response,
                             encoding='utf-8'))["DomainRecords"]["Record"]
    records = filter(
        lambda record: record["RR"] == recordName and record["Type"] == "A",
        records)
    records = list(records)
    assert len(records) == 1, "找不到域名%s的A记录%s" % (domainName, recordName)

    return records[0]
Пример #11
0
def get_domain_ip(domainname, rrkeyworld, _type):
    try:
        request = DescribeDomainRecordsRequest()
        request.set_accept_format('json')
        request.set_TypeKeyWord(_type)
        request.set_DomainName(domainname)
        request.set_RRKeyWord(rrkeyworld)

        response = client.do_action_with_exception(request)
        try:
            source_data = str(response, encoding='utf-8')
            print('请求数据成功')
        except Exception as e:
            print('请求数据失败')
            print(e)
            sys.exit()
        try:
            datas = json.loads(source_data)['DomainRecords']['Record'][0]
            print('找到主机记录')
        except Exception:
            print('没有找到主机记录')
            sys.exit()

        if datas:
            print('\t域名\t: ' + str(datas['RR'] + '.' + datas['DomainName']))
            print('\t类型\t: ' + str(datas['Type']))
            print('\t记录值\t: ' + str(datas['Value']))
            print('\tTTL\t: ' + str(datas['TTL']))
            print('\tStatus\t: ' + str(datas['Status']))
            return str(datas['Value']), str(datas['RR']), str(
                datas['RecordId']), str(datas['Type'])
        else:
            print('请求数据失败')
            print(source_data)
    except Exception as e:
        print('请求数据失败')
        print(e)
Пример #12
0
class AliDNS():

    def __init__(self):
        with open(os.path.abspath('config.json'), 'r') as f:
            self.config = json.load(f)
            self.AccessKeyId = self.config['AccessKeyId']
            self.AccessKeySecret = self.config['AccessKeySecret']
            self.Region = self.config['Region']
            self.client = AcsClient(self.AccessKeyId, self.AccessKeySecret, self.Region)

    def Get_RecordId(self, DomainName, RR):
        ''' 获取域名的RecordId'''
        self.request = CommonRequest()
        self.request.set_domain('alidns.aliyuncs.com')
        self.request.set_version('2015-01-09')
        self.request.set_action_name('DescribeDomainRecords')
        self.request.add_query_param('DomainName', DomainName)
        try:
            response = self.client.do_action_with_exception(self.request)
            jsonObj = json.loads(response.decode("UTF-8"))
            records = jsonObj["DomainRecords"]["Record"]
            for code in records:
                if code["RR"] == RR:
                    return code["RecordId"]
        except:
            Logger().info("Error")

    def Add_Domain_Record(self, RR, value, DomainName, Type):
        '''新增域名解析方法:
            RR:二级域名记录值;
            value:所要解析的IP地址;
            DominName:主域名
        '''
        self.request.set_accept_format('json')
        self.request.set_domain('alidns.aliyuncs.com')
        self.request.set_method('POST')
        self.request.set_version('2015-01-09')
        self.request.set_action_name('AddDomainRecord')
        self.request.add_query_param('RR', RR)
        self.request.add_query_param('Type', Type)
        self.request.add_query_param('Value', value)
        self.request.add_query_param('DomainName', DomainName)
        response = self.client.do_action(self.request)
        jsonObj = json.loads(response.decode("UTF-8"))
        Logger().info(jsonObj)

    def update_Domain_Record(self, RR, value, Type, DomainName):
        '''修改域名解析记录'''
        self.request = CommonRequest()
        record_id = self.Get_RecordId(RR=RR, DomainName=DomainName)
        self.request.set_accept_format('json')
        self.request.set_domain('alidns.aliyuncs.com')
        self.request.set_method('POST')
        self.request.set_version('2015-01-09')
        self.request.set_action_name('UpdateDomainRecord')
        self.request.add_query_param('RR', RR)
        self.request.add_query_param('Type', Type)
        self.request.add_query_param('Value', value)
        self.request.add_query_param('RecordId', record_id)
        response = self.client.do_action(self.request)
        jsonObj = json.loads(response.decode("UTF-8"))
        Logger().info(jsonObj)

    def Get_Result(self, keyword, domain, Type):
        self.request = DescribeDomainRecordsRequest()
        self.request.set_accept_format('json')
        self.request.set_RRKeyWord(keyword)
        self.request.set_DomainName(domain)
        response = self.client.do_action_with_exception(self.request)
        jsonObj = json.loads(response.decode("UTF-8"))
        try:
            for i in jsonObj['DomainRecords']['Record']:
                if i['Type'] == Type and i['RR'] == keyword:
                    return i['Value']
        except:
            return '127.0.0.1'

    def run(self):
        while 1:
            value = GetIP().getLocalHost()
            for i in range(len(self.config['args'])):
                Type, domain = self.config['args'][i]['Type'], self.config['args'][i]['domain']
                for r in self.config['args'][i]['RR']:
                    domainIP = self.Get_Result(r, domain, Type)
                    if domainIP == value:
                        Logger().info('{}.{}:当前解析记录无异常'.format(r, domain))
                    elif domainIP == '127.0.0.1':
                        continue
                    else:
                        Logger().info('{}.{}:当前解析地址为:{}'.format(r, domain, domainIP))
                        Logger().info('{}.{}:域名当前解析地址与本地地址不致,开修改解析记录'.format(r, domain))
                        self.update_Domain_Record(RR=r, value=value, Type=Type, DomainName=domain)
            Logger().info('进程休眠中...')
            time.sleep(1800)
Пример #13
0
form = cgi.FieldStorage()

access_key_id = form.getvalue('access_key_id')
access_secret = form.getvalue('access_secret')
dns_domain_name = form.getvalue('dns_domain_name')
dns_rr = form.getvalue('dns_rr')
dns_type = form.getvalue('dns_type')
dns_value = form.getvalue('dns_value')

client = AcsClient(access_key_id, access_secret, 'cn-hangzhou')

request = DescribeDomainRecordsRequest()
request.set_accept_format('json')
request.set_DomainName(dns_domain_name)
request.set_RRKeyWord(dns_rr)
response = client.do_action_with_exception(request)

data2 = json.loads(str(response, encoding='utf-8'))

dns_record_id = data2['DomainRecords']["Record"][0]["RecordId"]
old_value = data2['DomainRecords']["Record"][0]["Value"]

if old_value != dns_value:

    request2 = UpdateDomainRecordRequest()
    request2.set_accept_format('json')
    request2.set_Value(dns_value)
    request2.set_Type(dns_type)
    request2.set_RR(dns_rr)
    request2.set_RecordId(dns_record_id)