首页 文章 精选 留言 我的

精选列表

搜索[ddns],共49篇文章
优秀的个人博客,低调大师

使用python实现阿里云动态域名解析DDNS

前言 前置条件 1、域名是在阿里云购买的2、地址必须是公网地址,不然加了解析也没有用 简介 通过阿里云提供的SDK,然后自己编写程序新增或者修改域名的解析,达到动态解析域名的目的;主要应用于pppoe拨号的环境,比如家里设置了服务器,但是外网地址经常变化的场景;再比如公司的pppoe网关,需要建立vpn的场景。 安装阿里云SDK 需要安装两个SDK库,一个是阿里云核心SDK库,一个是阿里云域名SDK库;阿里云核心SDK库:pip install aliyun-python-sdk-core阿里云域名SDK库:pip install aliyun-python-sdk-domain阿里云SDK帮助 关于调试 阿里云提供一个在线调试,支持在线调试好之后,再复制回来本地即可。使用调试平台需要先登录。在线调试平台API的模块名称都可以通过帮助文档查询 设计思路 一、获取阿里云的accessKeyId和accessSecret二、获取外网ip三、判断外网ip是否与之前一致四、外网ip不一致时,新增或者更新域名解析记录 详细步骤 获取accessKeyId和accessSecret 可以在阿里云控制台个人中心直接获取,但是一般建议使用RAM角色来进行权限控制,这样这个accessKey和accessSecret就只能操作域名,不能操作其他的资源,相对会比较安全。关于RAM快速入门,请点击链接获取到accessKeyId和accessSecret之后,填入相对应的函数中即可: from aliyunsdkcore.client import AcsClient from aliyunsdkcore.acs_exception.exceptions import ClientException from aliyunsdkcore.acs_exception.exceptions import ServerException from hwx_function import * import os import time client = AcsClient('<accessKeyId>', '<accessSecret>', 'cn-hangzhou') 获取外网IP 通过网络上面的外网ip的API获取,可以使用多个,我这里只是列举了一个,具体代码如下: def get_internet_ip(): with urllib.request.urlopen('http://www.3322.org/dyndns/getip') as response: html = response.read() ip = str(html, encoding='utf-8').replace("\n", "") return ip 判断IP是否一致 因为阿里云不允许修改相同的解析,所以需要比对IP是否一致;因为把上一次解析的IP写入文件,所以只需要读取出来,跟本次得到的外网IP相比较,一致则不修改解析记录,不一致则修改解析记录。关于域名解析操作的代码,下面会有解释。 with open("./ip", 'r') as f: old_ip = f.read() if ip == old_ip: print("noupdate"+"\nnew_ip:"+ip+"\nold_ip:"+old_ip) else: #print("update"+"\nnew_ip:"+ip+"\nold_ip:"+old_ip) wirte_to_file("./ip",ip) des_relsult = Describe_SubDomain_Records(client,"A","sz.huangwx.cn") #判断子域名解析记录查询结果,TotalCount为0表示不存在这个子域名的解析记录,需要新增一个 if des_relsult["TotalCount"] == 0: add_relsult = add_record(client,"5","600","A",ip,"sz","huangwx.cn") record_id = add_relsult["RecordId"] print("域名解析新增成功!") #判断子域名解析记录查询结果,TotalCount为1表示存在这个子域名的解析记录,需要更新解析记录,更新记录需要用到RecordId,这个在查询函数中有返回des_relsult["DomainRecords"]["Record"][0]["RecordId"] elif des_relsult["TotalCount"] == 1: record_id = des_relsult["DomainRecords"]["Record"][0]["RecordId"] update_record(client,"5","600","A",ip,"sz",record_id) print("域名解析更新成功!") else: record_id = 0 print("存在两个子域名解析记录值,请核查删除后再操作!") path = './RecordId' wirte_to_file(path,record_id) 域名解析记录操作 域名解析记录不存在时,就新增解析记录,如果已经存在,则修改解析记录;所以这里还需要用到查询子域名解析记录的API; 子域名解析记录查询 Describe_SubDomain_Records(client,"A","sz.huangwx.cn")这个函数会返回一大堆东西,但是目前我们需要使用的就两个,一个是解析记录的数量,一个就是RecordId,RecordId修改域名解析时需要用到; #这个是函数 def Describe_SubDomain_Records(client,record_type,subdomain): request = DescribeSubDomainRecordsRequest() request.set_accept_format('json') request.set_Type(record_type) request.set_SubDomain(subdomain) response = client.do_action_with_exception(request) response = str(response, encoding='utf-8') relsult = json.loads(response) return relsult #以下是函数调用以及说明 des_relsult = Describe_SubDomain_Records(client,"A","sz.huangwx.cn") des_relsult["TotalCount"]:解析记录的数量,0表示解析记录不存在,1表示有一条解析记录 des_relsult["DomainRecords"]["Record"][0]["RecordId"]:当des_relsult["TotalCount"]为1时,会返回这个RecordId,后续的修改域名解析记录中需要用到 新增域名解析记录 如果域名解析记录不存在时,就需要新增域名解析记录,新增域名解析记录比较简单,直接填写参数即可 def add_record(client,priority,ttl,record_type,value,rr,domainname): request = AddDomainRecordRequest() request.set_accept_format('json') request.set_Priority(priority) request.set_TTL(ttl) request.set_Value(value) request.set_Type(record_type) request.set_RR(rr) request.set_DomainName(domainname) response = client.do_action_with_exception(request) response = str(response, encoding='utf-8') relsult = json.loads(response) return relsult #函数调用 add_relsult = add_record(client,"5","600","A",ip,"sz","huangwx.cn") record_id = add_relsult["RecordId"]#同样会返回一个RecordId,修改的时候也可以直接调用 更新域名解析记录 如果域名解析记录已存在,则不能使用新增,而是更新域名解析记录。更新的时候需要用到RecordId,这个一般查询的时候就会有返回,直接使用即可 def update_record(client,priority,ttl,record_type,value,rr,record_id): request = UpdateDomainRecordRequest() request.set_accept_format('json') request.set_Priority(priority) request.set_TTL(ttl) request.set_Value(value) request.set_Type(record_type) request.set_RR(rr) request.set_RecordId(record_id) response = client.do_action_with_exception(request) response = str(response, encoding='utf-8') return response #函数调用 record_id = des_relsult["DomainRecords"]["Record"][0]["RecordId"] update_record(client,"5","600","A",ip,"sz",record_id) 再加个循环或者定时任务即可定时更新域名解析记录了 总结 1、阿里云函数的使用依赖于阿里云的SDK库,所以这个一定要安装好2、新增解析记录的时候,可以把RecordId存储在本地文件,下次直接判断文件是否存在即可,不用每次都调用查询API

优秀的个人博客,低调大师

Python实现阿里云域名DDNS支持ipv4和ipv6

前言 首先得有一个阿里云的域名:https://www.aliyun.com/minisite/goods?userCode=jdjc69nf 然后你的IP必须是公网IP,不然解析了也没用。 本文章讲怎样通过阿里云的SDK来添加修改域名解析,检查本机IP与解析的IP是否一致,不一致自动修改解析,达到动态解析的目的,主要用于家庭宽带这些动态IP的地方。 安装阿里云SDK和其他第三方库 pip install aliyun-python-sdk-core-v3 pip install aliyun-python-sdk-domain pip install aliyun-python-sdk-alidns pip install requests 直接在CMD中输入上面的命令即可,如果下载速度太慢可以百度搜windows下Python换源。 使用Pycharm之类IDE的自行百度pycharm怎样安装第三方库 详细步骤 获取accessKeyId和accessSecret 可以在阿里云控制台个人中心直接获取,但是一般建议使用RAM角色来进行权限控制,这样这个accessKey和accessSecret就只能操作域名,不能操作其他的资源,相对会比较安全。关于RAM快速入门:https://help.aliyun.com/document_detail/28637.html?source=5176.11533457&userCode=jdjc69nf 源码下载 gitee:https://gitee.com/zeruns/aliddns_Pythongithub:https://github.com/zeruns/-Python-aliddns_ipv4-ipv6求Star将aliddns.py文件下载下来。 然后用notepad++或其他编辑器打开,按照注释提示修改并保存。 然后运行一下看看有没有问题: 打开cmd输入python 脚本目录 设置定时任务 右键点击电脑左下角,再点击计算机管理 点击任务计划程序,再点击创建任务,输入要设置的任务名称。 新建触发器,执行间隔可以自己设置,持续时间改成无限期。 新建操作,这一步很重要,配置错误就会导致脚本文件执行不成功!!! 最后确认就行。 Linux设置方法自行百度Linux定时任务 推荐文章 搭建内网穿透服务器:https://blog.zeruns.tech/archives/397.html 高性价比和便宜的VPS/云服务器推荐:https://blog.zeruns.tech/archives/383.html 各大CDN平台速度评测:https://blog.zeruns.tech/archives/506.html IPv6/IPv4 + aliddns 实现黑群晖外网控制和访问:https://blog.zeruns.tech/archives/263.html 学生优惠权益大全:https://blog.zeruns.tech/archives/321.html

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册