700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > 阿里云DDNS(动态域名解析)获取解析并对比

阿里云DDNS(动态域名解析)获取解析并对比

时间:2018-09-06 08:04:04

相关推荐

阿里云DDNS(动态域名解析)获取解析并对比

一、问题由来

昨天家里停电了,来电后IP地址改变了。但是并没有更新到域名解析数据上。所以感觉之前写的代码有一丝丝的不稳定。

今天重新写一个直接点的。直接查询域名服务器的解析地址,与本地公网IP地址比对,不同后执行修改解析Api自动修改解析地址。

本机环境

Ubuntu 20.04

注意:看本文之前请查看我前两篇文章,本文基于上述两篇文章编写。

获取IP发邮件

个人服务器实现阿里云DDNS(动态域名解析)

二、具体实施

1.阿里云获取解析地址api

根据传入参数获取指定主域名的所有解析记录列表

只需要填写域名即可

在你的服务器上安装此sdk

2.修改代码

首先修改代码删除其他我们不需要的数据,只留下解析IP。

import jsonmy_ip=str(response, encoding='utf-8')c = json.loads(my_ip)onlineIP=c['DomainRecords']['Record'][0]['Value']print(onlineIP)

我们将前面文章内的存储文件通过python的方法读取出来,做对比。

file = open('check_ip.text')#打开存储IP的文件localIP = file.readline().strip('\n')file.close()print(localIP)if onlineIP != localIP:# 对比是否有区别

如果两个文件内的IP地址不一样,则掉用调用阿里云修改解析地址的API进行修改。

整体代码下载

#!/usr/bin/env python3#coding=utf-8import jsonfrom urllib.request import urlopenfrom json import loadfrom aliyunsdkcore.client import AcsClientfrom aliyunsdkcore.acs_exception.exceptions import ClientExceptionfrom aliyunsdkcore.acs_exception.exceptions import ServerExceptionfrom aliyunsdkcore.auth.credentials import AccessKeyCredentialfrom aliyunsdkcore.auth.credentials import StsTokenCredentialfrom aliyunsdkalidns.request.v0109.DescribeDomainRecordsRequest import DescribeDomainRecordsRequestfrom aliyunsdkalidns.request.v0109.UpdateDomainRecordRequest import UpdateDomainRecordRequestcredentials = AccessKeyCredential('your-access-key-id', 'your-access-key-secret')# use STS Token# credentials = StsTokenCredential('<your-access-key-id>', '<your-access-key-secret>', '<your-sts-token>')client = AcsClient(region_id='cn-qingdao', credential=credentials)request = DescribeDomainRecordsRequest()request.set_accept_format('json')request.set_DomainName("你的域名")response = client.do_action_with_exception(request)# python2: print(response)my_ip=str(response, encoding='utf-8')c = json.loads(my_ip)onlineIP=c['DomainRecords']['Record'][0]['Value']print(onlineIP)file = open('check_ip.text')#打开存储IP的文件localIP = file.readline().strip('\n')file.close()print(localIP)if onlineIP != localIP:# 对比是否有区别print("Mismatch")my_ip = load(urlopen('/?format=json'))['ip']credentials = AccessKeyCredential('your-access-key-id', 'your-access-key-secret')# use STS Token# credentials = StsTokenCredential('<your-access-key-id>', '<your-access-key-secret>', '<your-sts-token>')client = AcsClient(region_id='cn-hangzhou', credential=credentials)request = UpdateDomainRecordRequest()request.set_accept_format('json')request.set_RecordId("8888888888")request.set_RR("@")request.set_Type("A")request.set_Value(my_ip)response = client.do_action_with_exception(request)# python2: print(response)print(str(response, encoding='utf-8'))else:print("Match with online")

‘your-access-key-id’, 'your-access-key-secret’记得替换成自己的。

保存在/usr/local/bin/test.py下,写进checkIP.sh文件。

将python3 test.py 写在If上面即可。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。