예제 #1
0
파일: ddns.py 프로젝트: oratun/ddns
def update_domain(domain, current_ip):
    request = DescribeSubDomainRecordsRequest()
    sub_domain = domain['RR'] + '.' + domain['DomainName']
    print(sub_domain)
    request.set_SubDomain(sub_domain)
    response = client.do_action_with_exception(request)
    r = json.loads(response)
    print(datetime.datetime.now(), r)

    records = r['DomainRecords']['Record']
    if records:
        # 存在记录
        record = records[0]
        if record['Value'] != current_ip:
            update_request = UpdateDomainRecordRequest()
            # 主机记录
            update_request.set_RR(domain['RR'])
            # 记录ID
            update_request.set_RecordId(record['RecordId'])
            # 主机记录值设为当前主机IP
            update_request.set_Value(current_ip)
            # 解析记录类型
            update_request.set_Type(domain['Type'])
            update_response = client.do_action_with_exception(update_request)
            print(json.loads(update_response))
예제 #2
0
파일: aliddns.py 프로젝트: zzh731/AliDDNS
def updateDomainRecord(client, rr, domain, ip, type):
    records = getRecords(client, rr, domain)
    record_id = None
    for record in records:
        if record['RR'] == rr and record['DomainName'] == domain and record[
                'Type'] == type:
            record_id = record['RecordId']
            avail_ip = record['Value']
            avail_record = record
            break
    if record_id is None:
        print("不存在记录,正在添加记录")
        addDomainRecord(client, rr, domain, ip, type)
    else:
        print("存在记录:" + str(avail_record))
        if avail_ip == ip:
            print("ip未改变,不更改记录,原ip=" + avail_ip + ",现ip=" + ip)
        else:
            print("ip已改变,准备更改记录,原ip=" + avail_ip + ",现ip=" + ip)
            request = UpdateDomainRecordRequest()
            request.set_action_name("UpdateDomainRecord")
            request.set_RR(rr)
            request.set_RecordId(record_id)
            request.set_Type(type)
            request.set_Value(ip)
            request.set_TTL(600)
            request.set_accept_format('json')
            response = client.do_action_with_exception(request)
            print(str(response, encoding='utf-8'))
            return json.loads(response)['RecordId']
예제 #3
0
def update_dns_record(ali_api_id, ali_api_secret, ip, record_id,
                      request_sub_domain):
    client = AcsClient(ali_api_id, ali_api_secret, 'cn-hangzhou')

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

    request.set_RecordId(record_id)
    request.set_RR(request_sub_domain)
    request.set_Type("A")
    request.set_Value(ip)

    try:
        response = client.do_action_with_exception(request)
    except (ClientException, ServerException) as reason:
        log.error("update dns failed. do_action_with_exception")
        return False

    result = str(response, encoding='utf-8')
    log.info("update dns record result: \r\n" + result)
    json_obj = json.loads(result)

    if len(json_obj['RecordId']) == 0:
        log.error("update dns failed. error code " + json_obj['code'])
        return False
    return True
예제 #4
0
def modify_record_name(domain_name, name, record_id, new_ip_addr):
    request = UpdateDomainRecordRequest()
    request.set_accept_format('json')
    request.set_RecordId(record_id)
    request.set_RR(name)
    request.set_Type("A")
    request.set_Value(new_ip_addr)
    with open(log_file, "a") as logfile:
        try:
            response = client.do_action_with_exception(request)
            sms.dns_record_update_sms(
                '.'.join([name, domain_name]).replace(".", "-"),
                new_ip_addr.replace('.', '-'))
            serverchan_ip_change_msg(name, "-".join(new_ip_addr.split(".")))
            logfile.write(
                "%s \t %s \n" %
                (str(time.asctime(time.localtime(time.time()))), response))
            r_j = json.loads(response.decode())
            request_id = r_j["RequestId"]
            record_id = r_j["RecordId"]
            insert_change(request_id=request_id,
                          record_id=record_id,
                          domain=domain_name,
                          name=name,
                          ip_addr=new_ip_addr)
            exist_and_count(domain_name, name, record_id)
            OK_response("200.3 OK")
        except Exception as e:
            logfile.write("%s \t %s \n" %
                          (str(time.asctime(time.localtime(
                              time.time()))), traceback.print_exc()))
            code = "503.4"
            serverchan_error_msg(domain_name, code, e)
            error_response(code)
예제 #5
0
def Dns(_rr):
    request = UpdateDomainRecordRequest()
    request.set_accept_format('json')

    logging.info('Update %s.%s DNS' % (_rr, domain))
    logging.info("Getting RecordId....")
    record = getRecord(_rr)
    recordId = record['RecordId']
    logging.info("RecordId:%s" % recordId)

    logging.info("Getting IP....")
    ip = getIP()
    logging.info("IP:%s" % ip)

    if ip == record['Value']:
        return "IP consistency does not need to be updated."

    logging.info("Updating DNS....")
    request.set_Value(ip)
    request.set_RecordId(recordId)
    request.set_RR(_rr)
    request.set_Type("A")

    response = client.do_action_with_exception(request)
    return json.loads(response.decode("UTF-8"))
예제 #6
0
파일: ddns.py 프로젝트: AzurIce/aliddns
def update_domain_record(client, record_id, rr, value):
    """
    更新解析记录
    :param client
    :param record_id:
    :param rr:
    :param value:
    :return:
    """
    request = UpdateDomainRecordRequest()
    request.set_RecordId(record_id)
    request.set_RR(rr)
    request.set_Type('A')
    request.set_Value(value)

    response = client.do_action_with_exception(request)
    return response
예제 #7
0
 def update_domain_record(record):
     if record['Value'] == ip:
         return
     log.write('\n')
     log.write(asctime(localtime(time())))
     log.write('\n解析记录' + record['RR'] + ' -> \t当前IP:' + ip)
     log.write('\n记录IP: \t' + record['Value'])
     log.write('\n当前ip和记录不一致,将被替换\n')
     log.flush()
     request = UpdateDomainRecordRequest()
     request.set_RecordId(record['RecordId'])
     request.set_accept_format('json')
     request.set_RR(record['RR'])
     return request
예제 #8
0
def update_record(client, priority, ttl, record_type, value, rr, record_id):
    request = UpdateDomainRecordRequest()
    request.set_accept_format('json')

    request.set_Priority(priority)
    request.set_TTL(ttl)
    request.set_Value(value)
    request.set_Type(record_type)
    request.set_RR(rr)
    request.set_RecordId(record_id)

    response = client.do_action_with_exception(request)
    response = str(response, encoding='utf-8')
    return response
예제 #9
0
파일: DDNS.py 프로젝트: StarSky1/ddns
def update():
    print("start time:" + time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()))
    new_ip = get_ip()
    with open("./config.json", 'r') as load_f:
        load_dict = json.load(load_f)
    accessKeyId = load_dict['AccessKeyId']
    accessKeySecret = load_dict['AccessKeySecret']
    domain = load_dict['domain']
    secondDomain = load_dict['second-level-domain']
    client = AcsClient(accessKeyId, accessKeySecret, 'cn-hangzhou')
    request = DescribeDomainRecordsRequest()
    request.set_accept_format('json')
    request.set_DomainName("haifeng.ink")
    response = client.do_action_with_exception(request)
    records = json.loads(response)['DomainRecords']['Record']

    old_record_id = ''
    old_ip = ''
    for record in records:
        if record['RR'] == secondDomain:
            old_ip = record['Value']
            old_record_id = record['RecordId']
            break

    if old_record_id != '' and old_ip != new_ip:
        request = UpdateDomainRecordRequest()
        request.set_accept_format('json')
        request.set_RecordId(old_record_id)
        request.set_RR(secondDomain)
        request.set_Type('A')
        request.set_Value(new_ip)
        client.do_action_with_exception(request)
        print('更新ip:' + new_ip)
    elif old_record_id == '':
        request = AddDomainRecordRequest()
        request.set_accept_format('json')
        request.set_DomainName(domain)
        request.set_RR(secondDomain)
        request.set_Type('A')
        request.set_Value(new_ip)

        response = client.do_action_with_exception(request)
        # python2:  print(response)
        print(str(response, encoding='utf-8'))
        print('添加新ip:' + new_ip)
    else:
        print('不需要更新')

    print(time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()))
예제 #10
0
def UpdateDomainRecord(client, yaml_data, RecordId, ip):
    try:
        dnsData = yaml_data['DnsData']
        request = UpdateDomainRecordRequest()
        request.set_accept_format('json')
        DomainValue = ip
        request.set_Value(DomainValue)
        request.set_Type(dnsData['DomainType'])
        request.set_RR(dnsData['RR'])
        request.set_RecordId(RecordId)
        response = client.do_action_with_exception(request)
        print("更新域名解析成功")
        print("域名:" + dnsData['DomainName'] + " 主机:" + dnsData['RR'] +
              " 记录类型:" + dnsData['DomainType'] + " 记录值:" + DomainValue)
    except Exception as e:
        print("更新域名解析失败")
        print(e)
예제 #11
0
 def update(RecordId, RR, Type, Value):
     from aliyunsdkalidns.request.v20150109.UpdateDomainRecordRequest import UpdateDomainRecordRequest
     request = UpdateDomainRecordRequest()
     request.set_accept_format("json")
     request.set_RecordId(RecordId)
     request.set_RR(RR)
     request.set_Type(Type)
     request.set_Value(Value)
     DDNSUnit.response(request)
예제 #12
0
 def __setRecordValue(self, record_value):
     self.__requireParmSet()
     # creat request,set parm
     if self.has_remote_record:
         if record_value == self.remote_record_value:
             print "current local internet ip is " + record_value + ", which same as the remote record [SKIP]"
             return True
         else:
             print "current local internet ip is " + record_value + ", which different from the remote record " + self.remote_record_value + " [UPDATE]"
             request = UpdateDomainRecordRequest()
             request.set_RecordId(self.record_id)
             request.set_RR(self.sub_domain_name)
             request.set_Type(self.record_type)
             request.set_Value(record_value)
     else:
         print "current local internet ip is " + record_value + ", the remote sub domain record do not exist ! [ADD]"
         request = AddDomainRecordRequest()
         request.set_DomainName(self.domain_name)
         request.set_RR(self.sub_domain_name)
         request.set_Type(self.record_type)
         request.set_Value(record_value)
     # execute
     res = self.__tryExecute(request)
     if res[0]:
         if self.has_remote_record:
             print "update [OK]"
         else:
             print "add [OK]"
     else:
         if self.has_remote_record:
             print "update [ERROR] " + res[1]
         else:
             print "add [ERROR] " + res[1]
예제 #13
0
파일: aliyun.py 프로젝트: UnknowName/aliops
async def dns_change_ip(request):
    domain = request.query.get("domain")
    ip = request.query.get("ip")
    domain_dic = config.get_domain(domain)
    backup_ips = domain_dic.get('ips')
    if ip not in backup_ips:
        resp = dict(msg="非法IP!修改只限已给定列表中的IP")
        return web.json_response(resp)
    record_id = request.query.get("id")
    domain_record, *_ = domain.split(".")
    request = UpdateDomainRecordRequest()
    request.set_accept_format('json')
    request.set_RecordId(record_id)
    request.set_RR(domain_record)
    request.set_Type("A")
    request.set_Value(ip)
    response = dns_client.do_action_with_exception(request)
    if json.loads(response.decode("utf8")).get("RecordId") == record_id:
        resp = dict(msg="OK")
        return web.json_response(resp)
    err_resp = dict(msg="error")
    return web.json_response(err_resp)
예제 #14
0
def UpdateDomainRecordHelper(Client, RecordId, RR, Type, Value, Line):
    Request = UpdateDomainRecordRequest()
    Request.set_accept_format('json')

    #设置新的记录的信息
    Request.set_RecordId(RecordId)
    Request.set_RR(RR)
    Request.set_Type(Type)
    Request.set_Value(Value)
    Request.set_Line(Line)

    result = ExecuteGetResults(Client,Request)
    #print(result)
    return result
예제 #15
0
    def update_record(self, *args, **kwargs):
        request = UpdateDomainRecordRequest()
        request.set_accept_format('json')

        request.set_RecordId(kwargs.get('record_id'))
        request.set_RR(kwargs.get('domain_rr'))
        request.set_Type(kwargs.get('domain_type'))
        request.set_Value(kwargs.get('domain_value'))
        request.set_TTL(kwargs.get('domain_ttl'))
        request.set_Line(kwargs.get('line'))

        response = self.__client.do_action_with_exception(request)
        return json.loads(str(response, encoding="utf8")).get('RecordId')
예제 #16
0
def editByDomainRecords(_client: AcsClient, _Record_data: dict, _value: str):
    """
    修改解析记录
    :param _client:
    :param _Record_data: 通过获取列表得来的解析信息
    :param _value: 要修改的记录值
    :return:
    """
    request = UpdateDomainRecordRequest()
    request.set_accept_format('json')

    request.set_RecordId(_Record_data.get('RecordId'))
    request.set_RR(_Record_data.get("RR"))
    request.set_Type(_Record_data.get('Type'))
    request.set_Value(_value)

    try:
        response = _client.do_action_with_exception(request)
    except ServerException as exce_entity:
        if exce_entity.message == 'The DNS record already exists.':
            err_msg = "{RR} 解析已被修改为 {value} ,无需修改.".format(
                RR=_Record_data.get("RR"), value=_value)
        else:
            err_msg = "未知异常; 阿里云异常消息原文: " + exce_entity.message
        raise Exception(err_msg)
    return json.loads(str(response, encoding='utf-8'))
def updata_ip(new_cloud_date, my_ip):
    client = AcsClient(accessKeyId, accessSecret, 'cn-hangzhou')
    request = UpdateDomainRecordRequest()
    request.set_accept_format('json')
    request.set_RecordId(new_cloud_date["RecordId"])
    request.set_RR(new_cloud_date['RR'])
    request.set_Type(new_cloud_date["Type"])
    request.set_Value(str(my_ip))

    response = client.do_action_with_exception(request)

    print('Host-RR:' + new_cloud_date['RR'], "IP updata ip success!")
예제 #18
0
def update(RecordId, RR, Type, Value):  # 修改域名解析记录
    from aliyunsdkalidns.request.v20150109.UpdateDomainRecordRequest import UpdateDomainRecordRequest
    request = UpdateDomainRecordRequest()
    request.set_accept_format('json')
    request.set_RecordId(RecordId)
    request.set_RR(RR)
    request.set_Type(Type)
    request.set_Value(Value)
    response = client.do_action_with_exception(request)
예제 #19
0
def refresh_domain_records():
    """
    更新域名 DNS
    """
    try:
        ip = get_ip()
        client = AcsClient(ALI_AK, ALI_SECRET, ALI_REGION_ID)
        req_get_records = DescribeDomainRecordsRequest()
        req_get_records.set_accept_format('json')
        req_get_records.set_DomainName(ALI_DOMAIN)
        response = json.loads(client.do_action_with_exception(req_get_records))
        msg = ""
        for record in response["DomainRecords"]["Record"]:
            recode_ip = record["Value"]
            if recode_ip != ip:
                req_set_record = UpdateDomainRecordRequest()
                req_set_record.set_RecordId(record["RecordId"])
                req_set_record.set_RR(record["RR"])
                req_set_record.set_Type(record["Type"])
                req_set_record.set_TTL(record["TTL"])
                req_set_record.set_Value(ip)
                req_set_record.set_accept_format('json')
                client.do_action_with_exception(req_set_record)
                info = str.format("{0}.{1} {2} --> {3}", record["RR"],
                                  ALI_DOMAIN, recode_ip, ip)
                logging.info(info)
                msg += info + "\n"
        if msg != "":
            send_mail(msg)
    except:
        logging.exception("Exception occurred")
예제 #20
0
    def setDnsRecord(self, ip):
        request = UpdateDomainRecordRequest()
        request.set_accept_format('json')

        request.set_Type(self.config['Type'])
        request.set_Value(ip)
        request.set_RR(self.config['RR'])
        request.set_RecordId(self.config['RecordId'])

        response = self.client.do_action_with_exception(request)
        # python2:  print(response) 
        print(str(response, encoding='utf-8'))
예제 #21
0
 def update_record(self, index: int, record_id: str, ip: str):
     """ update domain item to target ip address """
     req = UpdateDomainRecordRequest()
     req.set_RR(self._config.rr_list[index])
     req.set_RecordId(record_id)
     req.set_Type('A')
     req.set_Value(ip)
     req.set_Line('default')
     resp = self._client.do_action_with_exception(req).decode()
     logger.debug(f'update domain response: {resp}')
예제 #22
0
    def update_record(self, priority, ttl, record_type, value, rr, record_id):
        logging.info("更新域名解析记录")
        from aliyunsdkalidns.request.v20150109.UpdateDomainRecordRequest import UpdateDomainRecordRequest
        request = UpdateDomainRecordRequest()

        request.set_accept_format('json')
        request.set_Priority(priority)
        request.set_TTL(ttl)
        request.set_Value(value)
        request.set_Type(record_type)
        request.set_RR(rr)
        request.set_RecordId(record_id)

        response = self.client.do_action_with_exception(request)
        response = str(response, encoding='utf-8')
        logging.debug(response)
        return response
예제 #23
0
def aliyun_update_subdomain(client, subdomain, ipaddress, addtype, recordid):
    request = None
    response = None
    request = UpdateDomainRecordRequest()
    request.set_accept_format('json')

    tmp = subdomain.partition('.')
    request.set_RecordId(recordid)
    request.set_RR(tmp[0])
    if addtype == 'ipv4':
        request.set_Type('A')
    else:
        request.set_Type('AAAA')
    request.set_Value(ipaddress)

    try:
        response = client.do_action_with_exception(request)
    except ServerException as e:
        print('Server Error! Domain: {}, Code: {}.'.format(
            subdomain, e.get_error_code()))
        print(e.get_error_msg())
        return None
    except ClientException as e:
        print('Client Error! Domain: {}, Code: {}.'.format(
            subdomain, e.get_error_code()))
        print(e.get_error_msg())
        return None
    return json.loads(str(response, encoding='utf-8'))
예제 #24
0
def updateDomainRecord():
    addr = getIPv6Address()
    print(addr)
    if addr == getValueByRecordID():
        print("已是最新,无需更新")
        return
    request = UpdateDomainRecordRequest()
    request.set_accept_format('json')
    request.set_RecordId(recordID)
    request.set_RR(hostName)
    request.set_Type("AAAA")
    request.set_Value(addr)
    response = client.do_action_with_exception(request)
    print(str(response, encoding='utf-8'))
예제 #25
0
def update_record(record_id, value):
    try:
        logging.info('UpdateDomainRecordRequest %s %s' % (SUBDOMAIN, value))
        request = UpdateDomainRecordRequest()
        request.set_RecordId(record_id)
        request.set_RR(RECORD)
        request.set_Type(RECORD_TYPE)
        request.set_Line('default')
        request.set_Value(value)
        request.set_accept_format('json')
        response = acsClient.do_action_with_exception(request)
        return json.loads(response)['RecordId']
    except Exception as e:
        logging.error(e)
예제 #26
0
def modify_record(my_ip):
    acs_client = AcsClient(AccessKeyId, AccessKeySecret, RegionId)
    for domain in domain_config:
        recored_id = domain.get("recored_id")
        prefix = domain.get("prefix").encode("utf-8")
        logging.info("Now set recored_id: %s, prefix: %s -> %s" %
                     (recored_id, prefix, my_ip))

        request = UpdateDomainRecordRequest()
        request.set_RecordId(recored_id)
        request.set_RR(prefix)
        request.set_Type("A")
        request.set_Value(my_ip)
        request.set_TTL(600)
        try:
            response = acs_client.do_action_with_exception(request)
        except Exception as e:
            logger.error("Sync to aliyun error: %s." % e)
            save_error_info()
        else:
            logger.info("Sync to aliyun finished, nore info: %s" % response)
예제 #27
0
def aliupdate(gy, sy, _recordid, _rr, _type, _value):
    credentials = AccessKeyCredential(gy, sy)
    client = AcsClient(region_id='cn-hangzhou', credential=credentials)
    request = UpdateDomainRecordRequest()
    request.set_accept_format('json')
    request.set_RecordId(_recordid)
    request.set_RR(_rr)
    request.set_Type(_type)
    request.set_Value(_value)
    response = client.do_action_with_exception(request)
    # python2:  print(response)
    print(str(response, encoding='utf-8'))
예제 #28
0
    def update_record(self, obj):
        self.client = AcsClient(obj.domain_name.account.access_id,
                                obj.domain_name.account.access_key,
                                'cn-hangzhou')
        request = UpdateDomainRecordRequest()
        request.set_accept_format('json')

        request.set_RecordId(obj.record_id)
        request.set_TTL(obj.ttl)
        request.set_Line(obj.line)
        request.set_Value(obj.value)
        request.set_Type(obj.type)
        request.set_RR(obj.rr)
        if obj.priority:
            request.set_Priority(obj.priority)

        try:
            response = self.client.do_action_with_exception(request)
            ret = json.loads(str(response, encoding='utf-8'))
            return {'code': 1, 'message': ret}
        except Exception as e:
            return {'code': 0, 'message': e}
예제 #29
0
def update_domain_record(client, sub_domain, current_ip, record_id):
    """
    update aliyun dns ip address value
    """
    request = UpdateDomainRecordRequest()
    request.set_accept_format('json')

    request.set_RR(sub_domain)
    request.set_Value(current_ip)
    request.set_RecordId(record_id)
    request.set_Type('A')

    try:
        response = client.do_action_with_exception(request)
    except Exception as e_message:
        return 'An error occurred! Error MSG: ' + str(e_message)
    else:
        return response
예제 #30
0
    def update_record(accessKeyId, accessSecret, recordid, RR, Type, target):

        client = AcsClient(accessKeyId, accessSecret, 'cn-hangzhou')

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

        request.set_RecordId(recordid)
        request.set_RR(RR)
        request.set_Type(Type)
        request.set_Value(target)

        response = client.do_action_with_exception(request)