栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

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

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

一、问题由来

昨天家里停电了,来电后IP地址改变了。但是并没有更新到域名解析数据上。所以感觉之前写的代码有一丝丝的不稳定。
今天重新写一个直接点的。直接查询域名服务器的解析地址,与本地公网IP地址比对,不同后执行修改解析Api自动修改解析地址。

本机环境

Ubuntu 20.04

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

获取IP发邮件
个人服务器实现阿里云DDNS(动态域名解析)

二、具体实施 1.阿里云获取解析地址api

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

只需要填写域名即可

在你的服务器上安装此sdk

2.修改代码

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

import json
my_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-8

import json
from urllib.request import urlopen
from json import load


from aliyunsdkcore.client import AcsClient
from aliyunsdkcore.acs_exception.exceptions import ClientException
from aliyunsdkcore.acs_exception.exceptions import ServerException
from aliyunsdkcore.auth.credentials import AccessKeyCredential
from aliyunsdkcore.auth.credentials import StsTokenCredential
from aliyunsdkalidns.request.v20150109.DescribeDomainRecordsRequest import DescribeDomainRecordsRequest
from aliyunsdkalidns.request.v20150109.UpdateDomainRecordRequest import UpdateDomainRecordRequest

credentials = AccessKeyCredential('your-access-key-id', 'your-access-key-secret')
# use STS Token
# credentials = StsTokenCredential('', '', '')
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('https://api.ipify.org/?format=json'))['ip']
    credentials = AccessKeyCredential('your-access-key-id', 'your-access-key-secret')
    # use STS Token
    # credentials = StsTokenCredential('', '', '')
    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上面即可。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/751136.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号