使用接口批量更改阿里云DNS解析记录

因为网络安全需要,公司要关闭掉所有指向公司IP的互联网域名链接。但是又因为业务需求,如果关闭掉了域名解析,钉钉、微信公众号等入口就无法使用了。作为 领导忠实的狗腿子 一个负责任的运维,我要主动替领导分忧解难,所以我决定:把所有指向公司IP的记录值全都改为内网IP(因为我们内网有一个总代服务器,理解成waf也行)。

import json
from aliyunsdkcore.client import AcsClient
from aliyunsdkcore.acs_exception.exceptions import ClientException, ServerException
from aliyunsdkalidns.request.v20150109.DescribeDomainRecordsRequest import DescribeDomainRecordsRequest
from aliyunsdkalidns.request.v20150109.UpdateDomainRecordRequest import UpdateDomainRecordRequest

client = AcsClient('<Your AccessKeyId>', '<Your AccessKeySecret>', '地域')

# get_all_records(domain_name) 函数获取指定域名的所有解析记录。
def get_all_records(domain_name):
    records = []
    page_number = 1
    page_size = 100

    while True:
        request = DescribeDomainRecordsRequest()
        request.set_accept_format('json')
        request.set_DomainName(domain_name)
        request.set_PageNumber(page_number)
        request.set_PageSize(page_size)

        try:
            response = client.do_action_with_exception(request)
            response_dict = json.loads(response)
            records_page = response_dict.get('DomainRecords').get('Record')
            records.extend(records_page)

            total_count = response_dict.get('TotalCount')
            if page_number * page_size >= total_count:
                break
            page_number += 1
        except ClientException as e:
            print(f"A client error occurred: {e}")
            break
        except ServerException as e:
            print(f"A server error occurred: {e}")
            break

    return records

# update_record(record_id, rr, record_type, value, ttl) 函数更新指定解析记录的值。
def update_record(record_id, rr, record_type, value, ttl):
    request = UpdateDomainRecordRequest()
    request.set_accept_format('json')
    request.set_RecordId(record_id)
    request.set_RR(rr)
    request.set_Type(record_type)
    request.set_Value(value)
    request.set_TTL(ttl)

    try:
        response = client.do_action_with_exception(request)
        return json.loads(response)
    except ClientException as e:
        print(f"A client error occurred: {e}")
    except ServerException as e:
        print(f"A server error occurred: {e}")
    return None

# update_records(domain_name, old_ip, new_ip) 函数遍历所有记录,如果记录的值为old_ip,则将其更新为new_ip。
def update_records(domain_name, old_ip, new_ip):
    records = get_all_records(domain_name)
    if not records:
        print(f"No records found for domain {domain_name}")
        return

    for record in records:
        if record['Value'] == old_ip:
            record_id = record['RecordId']
            rr = record['RR']
            record_type = record['Type']
            ttl = record['TTL']
            result = update_record(record_id, rr, record_type, new_ip, ttl)
            if result:
                print(f"Updated record {rr}.{domain_name} from {old_ip} to {new_ip} with TTL {ttl}")
            else:
                print(f"Failed to update record {rr}.{domain_name}")


if __name__ == '__main__':
    domain_name = 'csdn.net'  # 需要更新的域名
    old_ip = '10.10.10.10'	# 原IP
    new_ip = '20.20.20.20'	# 替换的IP

    update_records(domain_name, old_ip, new_ip)

  • 7
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

勾魂皮卡丘

咋滴,打算白嫖啊?

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值