示例#1
0
    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
示例#2
0
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'
示例#3
0
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)
示例#4
0
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)
示例#5
0
 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
示例#6
0
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'
示例#7
0
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
示例#8
0
 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
示例#9
0
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
示例#10
0
 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
示例#11
0
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
示例#12
0
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)
示例#13
0
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
示例#14
0
 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)
示例#15
0
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)
示例#16
0
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
示例#17
0
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)
示例#18
0
    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
示例#19
0
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
示例#20
0
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
示例#21
0
    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)
示例#22
0
    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
示例#23
0
    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(
示例#25
0
def listRecords(domainName):
    request = DescribeDomainRecordsRequest.DescribeDomainRecordsRequest()
    request.set_DomainName(domainName)
    response = client.do_action_with_exception(request)
    return json.loads(response)
示例#26
0
#!/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']