前置工作
- 安装阿里模块
pip install aliyun-python-sdk-core-v3
pip install aliyun-python-sdk-alidns==3.0.1
- 阿里云获取 AccessKey
实现代码
import os
import socket
from aliyunsdkcore.client import AcsClient
from aliyunsdkalidns.request.v20150109.DescribeSubDomainRecordsRequest import DescribeSubDomainRecordsRequest
from aliyunsdkalidns.request.v20150109.DeleteSubDomainRecordsRequest import DeleteSubDomainRecordsRequest
from urllib.request import urlopen
import json
class DnsController:
access_key_id = ""
access_key_secret = ""
region = ""
record_type = "A"
domain = "langzihan.top"
name_ipv4 = ["p330"]
def __init__(self):
self.client = AcsClient(
self.access_key_id,
self.access_key_secret,
self.region
)
def add(self, DomainName, RR, Type, Value):
from aliyunsdkalidns.request.v20150109.AddDomainRecordRequest import AddDomainRecordRequest
request = AddDomainRecordRequest()
request.set_accept_format('json')
request.set_DomainName(DomainName)
request.set_RR(RR)
request.set_Type(Type)
request.set_Value(Value)
response = self.client.do_action_with_exception(request)
def update_target_dns(self, ip_address):
request = DescribeSubDomainRecordsRequest()
request.set_accept_format('json')
request.set_DomainName(self.domain)
for item in self.name_ipv4:
request.set_SubDomain(item + '.' + self.domain)
response = self.client.do_action_with_exception(request)
domain_list = json.loads(response)
if domain_list['TotalCount'] == 0:
self.add(self.domain, item, self.record_type, ip_address)
else:
if domain_list['DomainRecords']['Record'][0]['Value'].strip() != ip_address.strip():
request = DeleteSubDomainRecordsRequest()
request.set_accept_format('json')
request.set_DomainName(self.domain)
request.set_RR(item)
response = self.client.do_action_with_exception(request)
self.add(self.domain, item, self.record_type, ip_address)
def main():
root_path = '.'
log_path = root_path + '/ip_log.log'
fa = open(log_path, 'a', encoding='utf-8')
cur_ip = socket.gethostbyname(socket.gethostname())
if not os.path.isfile(log_path) and fa.read().strip() == '':
fa.write(cur_ip + '##')
DnsController().update_target_dns(cur_ip)
fa.close()
return 0
with open(log_path, 'r', encoding='utf-8') as fr:
old_ip = fr.read().strip('##').split('##')[-1]
if old_ip != cur_ip or old_ip is None:
fa.write(cur_ip + '##')
DnsController().update_target_dns(cur_ip)
fa.close()
if __name__ == '__main__':
main()
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)