因为网络安全需要,公司要关闭掉所有指向公司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)