之前一直用f3322.net的域名解析,但是因为觉得它不够稳定,所以近期改用dnspo免费域名解析,为了更稳定地使用,我利用腾讯云SDK实现了ip地址动态更新
        由于本人的opwrt不知道什么原因,在折腾了一翻后仍然无法正常安装gcc,而该机上已经安装好python编译环境(其实是懒得编译GCC),所以用的是python版SDK(链接在此:SDK 中心 - 腾讯云)(不用对API进行签名,可以少码点在字)。
        安装python版本SDK有两种办法:1.安装pip 并 执行“pip install --upgrade tencentcloud-sdk-python”命令;2.从以上链接下载SDK后在指定目录解压或者直接在指定目录下用git clone下载,在目录内执行“python setup.py install”,然后安装curl、 apscheduler、ubus。
        接下来开始写代码。思路是:在目录内创建一个用于保存IP的文本,并定时读取,得到的值与WAN口IP对比,如果相同,则不更新该值;如果不同则说明WAN口IP已经改变,保存新IP到文本,然后获取外网IP与WAN口IP对比,如果值相同,则说明拨号得到的IP是公网IP,对DNSPOD域名解析绑定的IP更新;如果不同,则输出信息。
        写代码可以充分利用API在线调试取得相应的API请求代码块(链接在此:登录 - 腾讯云)放入自定义的函数中,然后编写主逻辑程序,调用函数,最后编写无参函数调用主逻辑程序,利用apscheduler实现定时执行。
        过程:
        在API EXPORER中左侧找到DNSPod->更新动态DNS记录->输入参数,点击Domain旁边的?得到执行该调用必须填写Domain、RecordId、RecordLine和Value

Domain就是您的主域名(去掉www) ,RecordId 要通过API调用取得,如果您要执行定时更新操作的域名解析是默认的,则RecordLine值为:“默认”,否则也要通过API调用取得。
        找到DNSPod->获取域名的解析记录>点右边的查看文档,找到“3.输出参数”,点击“DomainList ”右边“类型” “Array of”下面的“RecordListItem”,在新页面查看记录列表元素,里面有我们想要的“RecordId”、“Value”和“Line”,说明这是我们需要的第一个API调用。

返回前一页面,点击“代码生成”选择“python”,在“输入参数”中输入您的主域名,然后复制右边的代码放入您的第一个自定义函数中。然后在代码中填入您的“SecretId”和“SecretKey”(关于SecretId和SecretKey的申请,请在API说明中查找)。该调用输出的是一大串字符串,您可以直接用截取方式得到“RecordId”、“Value”和“Line”或者转为字典(利用内置函数evl(str)可以很方便地转为字典)然后将相应的字典值赋值给相应变量。
        以同样的方式写好更新域名解析IP(利用 API  ModifyDynamicDNS更新IP)的函数以便在主函数中调用。
        主函数和无参函数写完后,最后一项就是添加自启动项。
1.在保存py文件的文件夹中添加一个运行py文件的文件,内容如下:

#!/bin/sh
python3  /存放py文件的绝对路径/py文件名.py
然后给它执行
“chmod -R 777 ”

2.在/etc/init.d/中添加一个自定义的运行文件,该文件结构如下:       
#!/bin/sh /etc/rc.common
START=99start(){
    /你保存的运行py文件的路径/
运行py文件的文件.sh
}
stop(){
   
/你保存的运行py文件的路径/运行py文件的文件.sh -s
}  
restart(){
   
/你保存的运行py文件的路径/运行py文件的文件.sh
}

给该文件 执行 “chmod -R 777 ”
接着执行“/etc/init.d/运行文件名 enable”激活开机启动
现在可以运行“/etc/init.d/
运行文件名 start” 来运行启动文件了

附:py 文件代码


import json
import os
import subprocess
from tencentcloud.common import credential
from tencentcloud.common.profile.client_profile import ClientProfile
from tencentcloud.common.profile.http_profile import HttpProfile
from tencentcloud.common.exception.tencent_cloud_sdk_exception import TencentCloudSDKException
from tencentcloud.dnspod.v20210323 import dnspod_client, models
from threading import Thread,Timer
import time
import ast
from apscheduler.schedulers.blocking import BlockingScheduler#  给定Domain、Subdomain和RecordType的值
Domain="liker169.top"
Subdomain="www"
RecordType="A"
RecordId=""
RecordLine="默认"SecretId="AKIDOdeQp0zkIivsa6RYQ3RdaKq77rMfmeGd"
SecretKey="95mDOJ1Yt2ye7NQI0XrysZ4JI5ex2sTp"ip=''
dns_ip=''
# 定义调用dnspod API DNSPOD_DescribeRecordList所需的参数列表
params1={"Domain":Domain,"Subdomain":Subdomain,"RecordType":RecordType
}# 定义通过dnspod API接口获取域名解析列表函数并返回列表
def get_DNSPOD_DescribeRecordList(SecId,SecKey,pas):try:cred = credential.Credential(SecId,SecKey)httpProfile = HttpProfile()httpProfile.endpoint = "dnspod.tencentcloudapi.com"clientProfile = ClientProfile()clientProfile.httpProfile = httpProfileclient = dnspod_client.DnspodClient(cred, "", clientProfile)req = models.DescribeRecordListRequest()req.from_json_string(json.dumps(pas))resp = client.DescribeRecordList(req)print(resp.to_json_string())return resp.to_json_string()except TencentCloudSDKException as err:print(err)# 定义调用dnspod API dnspod_ModifyDynamicDNS所需的参数列表
params2={"Domain":Domain,"Subdomain":Subdomain,"RecordId":RecordId,"RecordLine":RecordLine,"Value":ip
}# 定义通过dnspod API接口更新域名记录的方式更新ip的函数
def dnspod_ModifyDynamicDNS(SeId,SeKey,pams):try:cred = credential.Credential(SeId, SeKey)httpProfile = HttpProfile()httpProfile.endpoint = "dnspod.tencentcloudapi.com"clientProfile = ClientProfile()clientProfile.httpProfile = httpProfileclient = dnspod_client.DnspodClient(cred, "", clientProfile)req = models.ModifyDynamicDNSRequest()req.from_json_string(json.dumps(pams))resp = client.ModifyDynamicDNS(req)print(resp.to_json_string())except TencentCloudSDKException as err:print(err)#  主逻辑函数
def IP_update_main(StId,StKey,parm1,parm2):  print("dnspod_ip_auto_update.py运行于")print (time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()))# 从本地文件获取保存的IPold_ip=""with open('./local_store_ip.txt','r') as storeIP:print("获取本地保存的IP ...")old_ip=str(storeIP.read())print("本地文件保存的IP为:",old_ip)storeIP.close#  获取wan口IP#ubus call network.interface.wan2 status | jq '.route[0].nexthop' -rprint("正在获取wan口IP ...")#ubus call network.interface.wan2 status | grep \"address\" 得到字典类型IP地址wan_address=subprocess.getoutput("ubus call network.interface.wan2 status | grep \"address\"")wan_ip=wan_address[49:64]print("获取到的wan口IP为:\n",wan_ip)#  从myip.ipip.net获取外网地址print("正在获取外网IP......")net_ip=str(subprocess.getoutput("curl -s myip.ipip.net"))[6:21]net_ip=net_ip.replace(" ","")print("获取到外网IP:",net_ip)    # 检查已经保存的IP是否与刚获取的WAN口中IP一致if (net_ip!=wan_ip):print("您的IP不是公网IP,请联系运营商!\n")print("您的wan口IP为:",wan_ip)print("您的外网地址ip为:",net_ip)return "没有公网ip,不对域名IP做任何操作!"else:print("您的IP是公网IP,IP为:\n",wan_ip)if(wan_ip==old_ip):print("IP没有变更,不更新域名IP!\n") else:print("wan_ip已经变更为",wan_ip)with open('./local_store_ip.txt','wt') as storeIP:print("将新wan口IP更新到本地文件!...")storeIP.write(wan_ip)storeIP.closeprint("\n现在更新域名IP!\n")print("正在获取域名解析记录列表!......\n")get_DescribeRecordList_Result=get_DNSPOD_DescribeRecordList(StId,StKey,parm1)get_DescribeRecordList_Result=get_DescribeRecordList_Result.replace('null','000')RecordList_dict=eval(get_DescribeRecordList_Result)print("获取到域名解析记录,列表如下:\n")print(RecordList_dict)print("\n")print("正在提取记录id!......\n")dns_ip=RecordList_dict["RecordList"][0]["Value"]RecordId=RecordList_dict["RecordList"][0]["RecordId"] parm2["Value"]=wan_ipparm2["RecordId"]=RecordIddnspod_ModifyDynamicDNS(StId,StKey,parm2)print("已经将域名IP更新为:",wan_ip)def autorun_pertimes():IP_update_main(SecretId,SecretKey,params1,params2)# 创建调试器:BlockingScheduler
scheduler=BlockingScheduler()
#IP_update_main(SecretId,SecretKey,params1,params2)
scheduler.add_job(autorun_pertimes,'interval',minutes=1,id='dnspod_ip_auto_update')
scheduler.start()

本代码在openwrt R21.9.18  python3.10.1测试通过

利用腾讯云 SDK 动态更新dnspod域名IP(原创)相关推荐

  1. 从QQ音乐开发,探讨如何利用腾讯云SDK在直播中加入视频动画

    欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文由 腾讯游戏云发表于 云+社区专栏 看着精彩的德甲赛事,突然裁判一声口哨,球赛断掉了,屏幕开始自动播放"吃麦趣鸡盒,看德甲比赛 ...

  2. 利用腾讯云为静态页面添加“动态”相册

    title: 利用腾讯云为静态页面添加"动态"相册 date: 2019-11-24 10:52:34 tags: 腾讯云cos桶 Frontend categories: Fro ...

  3. 微信小程序利用腾讯云IM发送语音 + 图片

    微信小程序利用腾讯云IM发送语音 + 图片 能做到这里 说明你已经可以发送普通文本了 如果没有的话可以看一下我的上一篇文章 有完整的讲解 效果图 语音聊天 发送图片 传送 → 发送图片 发送语音 ** ...

  4. web利用腾讯云点播上传视频

    web利用腾讯云点播上传视频到云服务器 第一步导入 <script src="//imgcache.qq.com/open/qcloud/js/vod/sdk/ugcUploader. ...

  5. 利用腾讯云轻量搭建私人云盘-Cloudreve

    利用腾讯云轻量搭建私人云盘-Cloudreve 购买链接:https://cloud.tencent.com/act/pro/lighthouse 大陆地区1核1G3Mbps的机器128一年,非常适合 ...

  6. python 腾讯视频签到_利用腾讯云函数设置定时任务实现腾讯视频自动签到获得V力值...

    腾讯视频vip花了钱,还不能自动升级,要每天签到才涨V力值.升级VIP等级..实在蛋疼.这次又是云服务器函数,搞了个脚本COOKIES方式登录.测试了40多天.还没到期,感觉自用够了.分享出来吧..c ...

  7. 利用腾讯云Python函数实现机场每日自动签到领流量

    利用腾讯云Python函数实现机场每日自动签到领流量 基于项目 https://github.com/zhjc1124/ssr_autocheckin 修改 sspanel自动签到脚本(腾讯云函数) ...

  8. 利用腾讯云函数做蓝奏云解析API

    利用腾讯云函数做蓝奏云解析API 前言 忽然在网上看到网友说tenapi的蓝奏云解析不能用了,恰巧又在B站上看到某up主的相关文章,一时起意就用up主的代码稍加更改,改造了个能在腾讯云函数跑起来的版本 ...

  9. 【腾讯云服务器+PicGo搭建自己的图床】利用腾讯云服务器搭建自己的私人图床

    起因 一直以来用的gitee图床挂了,本来想折腾折腾再换个图床的,但仔细想想任何图床都有再次挂掉的风险,千好万好不如自己有,之前一直图方便懒就没搭建自己的图床,今天趁这个机会自己利用腾讯云COS搭建一 ...

最新文章

  1. 今年天津分数线高考成绩查询2021年,2021年天津高考分数线预测(2021年天津高考录取分数线)2021年天津高考分数会降低吗...
  2. Android 告急!
  3. SpringBoot+Vue视频干货
  4. ML之Hog_HammingDistance:基于Hog特征提取“RGB”图像的768个值的单向vector利用汉明距离算法进行判别
  5. 数据库原理学习笔记(一)关系完整性以及数据库完整性
  6. angular面试题及答案_关于最流行的Angular问题的StackOverflow上的48个答案
  7. 大数据技术和python开发工程师
  8. 01 - java 开始
  9. python中with的用法简单来说_Python中with的用法
  10. 山东大学2020计算机考研学硕,2020山东大学考研学硕复试分数线
  11. SpringMVC-@RequestMapping的参数和用法
  12. java内存映射缓存,java – 用于数据库实现的内存映射的MappedByteBuffer或直接ByteBuffer?...
  13. 微型计算机工作适宜的温度,应用电脑(1)第一章 第一节 计算机的基本组成...
  14. 分析2022年新型传播的.360后缀勒索病毒与数据恢复案例
  15. sdk前置服务器 设备和商户信息不匹配,豌豆荚融合SDK接入常见问题
  16. 信号与系统学习笔记与代码实现3-周期信号的傅里叶级数表示
  17. 百度AI接口测试案列一:车牌识别
  18. Virtualbox如何配置Linux的网络连接
  19. android数字滚动动画,数字滚动效果 RollingText
  20. MyCAT的作用及使用场景

热门文章

  1. 5. Linux 多线程基础总结
  2. 言过其行、言而不行。
  3. SCAU JAVA期末复习
  4. 上行NOMA和下行NOMA(解码顺序)
  5. 休闲食品战场竞争激烈,店宝宝:三只松鼠还能稳居第一吗?
  6. Java获取视频的时长——日期时间处理
  7. 2020计算机保研之路:211上岸上海985
  8. 大数据白皮书材料整理
  9. plsql forall 详解
  10. 阿里云服务器2核4G配置性能参数表