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

欢迎查看我的摸爬滚打DDNS之三

摸爬滚打DDNS之一
摸爬滚打DDNS之二
摸爬滚打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('<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('https://api.ipify.org/?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上面即可。

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值