因需求公司路由器公网ip不是动态的,需要及时的修改阿里云的域名解析
二、准备
1、公网IP(向运营商申请的动态IP)
2、域名(通过阿里云购买的域名)
3、可以运行python程序的服务器(路由器/电脑/树莓派)
4、安装两个Python-SDK库
# 核心库
pip install aliyun-python-sdk-core
# 域名库
pip install aliyun-python-sdk-alidns
如果出现该报错:aliyunsdkcore.acs_exception.exceptions.ClientException: SDK.HttpError (‘Connection aborted.’, ConnectionResetError(104, ‘Connection reset by peer’))
安装另一个核心库即可,安装代码如下:
pip install aliyun-python-sdk-core-v3
aliyun-python-sdk-core-v3
aliyun-python-sdk-alidns==2.0.6 #版本自定义
通过阿里云控制台进入RAM访问控制页面新建子用户,获取 AccessKey ID 和 AccessKey Secret
1、获取当前IP
2、存储获取到的IP
3、比对IP(因为阿里云不允许修改相同的解析,所以需要比对IP是否有变化)
4、获取解析记录列表
# 获取公网IP并进行修改
def Get_IPv4(self):
# 获取IP方法一
ipv4 = json.load(urlopen('http://jsonip.com'))['ip']
print("获取到IPv4地址:%s" % ipv4)
# 获取IP方法二,爬取IP地址
# ipv4 = getip()
request = DescribeSubDomainRecordsRequest()
request.set_accept_format('json')
request.set_DomainName(self.domain)
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 = ""
#阿里云的新建账户id
access_key_secret = ""
region = ""
#时区
record_type = "A"
domain = ""
#上面是你的一级域名
name_ipv4 = ["二级域名1","二级域名2","二级域名3","二级域名4","二级域名5"]
#上面是你要修改的域名,我们的比较多,然后呢就以数组的方式去挨个修改
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(self, 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 = self.client.do_action_with_exception(request)
# 获取公网IP并进行修改
def Get_IPv4(self):
# 获取IP方法一
ipv4 = json.load(urlopen('http://jsonip.com'))['ip']
print("获取到IPv4地址:%s" % ipv4)
# 获取IP方法二,爬取IP地址
# ipv4 = getip()
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, ipv4)
print("新建域名:" + item + ",解析成功")
elif domain_list['TotalCount'] == 1:
if domain_list['DomainRecords']['Record'][0]['Value'].strip() != ipv4.strip():
self.update(domain_list['DomainRecords']['Record'][0]['RecordId'], item, self.record_type, ipv4)
print("修改域名:" + item + ",解析成功")
else:
print("IPv4地址没变")
elif domain_list['TotalCount'] > 1:
# 删除所有解析过的记录,并重新添加新的解析记录
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, ipv4)
print("修改域名解析成功")
if __name__ == "__main__":
Dnscontroller().Get_IPv4()
网上找一下文档这里我就省略到了
wget https://www.python.org/ftp/python/3.7.2/Python-3.7.2.tgz
步骤1;先查找python的 绝对路径
使用 which 查询 python3 解释器所在路径
pip3 install pyyaml
pip3 install aliyun-python-sdk-core-v3
pip3 install aliyun-python-sdk-alidns==2.0.6
#! /usr/bin/python3
#!
这个符号叫做 Shebang
或者 Sha-bang
Shebang
通常在 Unix
系统脚本的中 第一行开头 使用上传到服务器上
修改 主 python 文件 的文件权限,增加执行权限
$ chmod +x dns.py
root@192:~/python_dns# python3 dns.py
获取到IPv4地址:xxxxxxxxx
IPv4地址没变
IPv4地址没变
IPv4地址没变
IPv4地址没变
IPv4地址没变
配置计划任务每天执行
一、Crontab的安装
1、Debian下面安装Crontab
apt-get install cron //大部分情况下Debian都已安装。
/etc/init.d/cron restart //重启Crontab
二、Crontab使用方法
1、查看crontab定时执行任务列表
crontab -l
1
2、添加crontab定时执行任务
crontab -e
————————————————
0 9 * * 1 python3 /root/python_dns/dns.py > dns.log #每周一早上9点执行这个python
装。
/etc/init.d/cron restart //重启Crontab
二、Crontab使用方法
1、查看crontab定时执行任务列表
crontab -l
1
2、添加crontab定时执行任务
crontab -e
————————————————
0 9 * * 1 python3 /root/python_dns/dns.py > dns.log #每周一早上9点执行这个python
[外链图片转存中…(img-yVBcSUP9-1662623656428)]