python3对接godaddy API,实现自动更改域名解析(DDNS)

python3对接godaddy API,实现自动更改域名解析(DDNS)

文章开始前,先解释下如下问题:

①什么是域名解析?

域名解析一般是指通过一个域名指向IP地址(A解析),然后我们访问这个域名就可以有直接访问这个IP地址的效果,只需要记住域名即可,无需记住IP。

②什么是DDNS?

DDNS是动态域名解析,一个域名可以根据IP的变化,自动修正解析,无论设备的IP地址怎么变化,这个域名将一直指向对应的设备。

③有什么用?

动态域名解析广泛应用于家庭网络,因为家庭网络的IP地址是动态的,每次重启猫,都会造成IP地址变化。如果想要通过外网稳定访问(不一定是web访问)家里的设备,就需要使用动态域名解析,现在用的比较广泛的是花生壳DDNS。

④为什么要用godaddy?

首先godaddy提供更改域名解析的API,其次godaddy是世界上最大的域名服务商,再次,国内其他的运营商都是不提供API。没有API的情况下,就需要通过定时登录获取cookie,然后再模拟更改域名的网页操作,post数据到服务器。

(因平台原因本文中www即为xxx ,zzz即为zzz,cccc/ccccc即为cccc/ccccc)

前言

 使用python3监控公网地址,然后上报给服务器,服务器再修改反代理/发邮件通知用户。由于最近使用远程桌面比较多,每次远程前都要打开邮箱找最近的一次公网地址变更记录。于是想如果可以实现动态域名解析呢?这样申请一个域名,随时都指向最新的IP地址

目前有的域名解析运营商域名解析,每次post成功数据,解析修改完了,账号就被限制登录了。因为这种post是完全模拟网页操作,可能被检测到了,然后就封号。 

 

可以直接更改一个域名的所有解析记录

操作步骤: 

一、gou买一个域名

如果你有域名了,那这一步操作可以忽略掉。

详细步骤不说了,很简单,注册一个godaddy账户,然后搜索你想要的域名。遇到申请下来后点DNS,可以看到域名解析的记录:


 

二、获取API的key

key是用来认证账户身份的,和浏览器的cookie一样,不同的是cookie会过期,而key可以永久不过期。在一段请求中,只要在头部包含这个key,就可以让服务器认定你的身份。

key申请:ccccc://developer.godaddy.com/keys  登录账户,点网页右上角的“cereate new API key”,随便命名,环境选择 production

 

它会给你一个公钥key,和一个私钥secret,复制下来保存好:

 

三、文档中更改域名解析put的用法

地址:ccccc://developer.godaddy.com/doc/endpoint/domains#/v1/recordReplace

 

可以看到,需要提供的参数是domain,还有records。domain就是我们需要修改解析的域名,如本文domain就是xxserver.me。records就是put请求向浏览器发送的参数,里面有data、name、prot等参数。其中要用到的有以下几个参数:

data :解析记录。如将www解析到3.3.3.3,那么data就是3.3.3.3

name :解析名就是所说的域名前缀,如xxx.xxserver.me,name(解析名)就是www,如果为@则表示为空

ttl :域名解析生效时间。域名解析提交后,多久才能生效,当然越短越好,最短600

type:解析类型。 一般用A解析,将一个域名指向一个IP地址。

records的数据以json形式传递。我们试一下填写数据,看官方为我们生成请求的格式:

 

生成格式:

 

这是一个linux的curl格式,我们需要把它转成python3格式。从官方生成的请求格式中可以看到,请求类型为put,-H后面为headers(请求头),包含accept、content-type、authorization。其中accept是请求返回接收的数据格式,content-type是发送的数据格式,authorization是用户认证(API秘钥),格式为:sso-key 你的key:你的secret,请求:ccccc://api.godaddy.com/v1/domains/xxserver.me/records (正式环境去掉ote

四、使用python3实现

这里我们实际操作一下,通过API,将xxserver.me这个域名(没有前缀,解析名为@)直接定向到IP地址:5.5.5.5。详细解释已经注释在代码里了

#导入需要的模块import urllib.requestimport json

这里做个示范,读取用户输入

ip_addr = input(str('输入IP地址:'))

定义请求地址

api_url = 'ccccc://api.godaddy.com/v1/domains/xxserver.me/records';

直接做一个函数,传入API地址和更改的IP

def update_NS(api_url,ip_addr):

    #定义http请求头

    head = {}

    #定义服务器返回json数据给我们

    head['Accept'] = 'application/json'

    #定义我们发送的数据为json

    head['Content-Type'] = 'application/json'

    #定义身份认证信息

    head['Authorization'] = 'sso-key xxxxxxxxx你的key xxxxxxxxx:xxxxxxxxxx你的secret xxxxxxxxxx'

    #定义解析记录

    records_a = {

    "data" : ip_addr,

    "name" : "@",

    "ttl" : 600,

    "type" : 'A',

    }

    #下面这两个必须包含,不可更改

    records_NS01 = {

    "data" : "ns07.domaincontrol.com",

    "name" : "@",

    "ttl" : 3600,

    "type" : "NS",

    }

    records_NS02 = {

    "data" : "ns08.domaincontrol.com",

    "name" : "@",

    "ttl" : 3600,

    "type" : "NS",

    }

    #定义需要发送给服务器的数据为put_data这个列表,包含上面的解析记录

    put_data = [records_a,records_NS01,records_NS02]

    #错误处理

    try:

        #定义请求,包含请求地址,请求头,请求方式,并把put_data从json转换为字符串格式,再转换成bytes

        req = urllib.request.Request(api_url,headers = head,data = json.dumps(put_data).encode(),method = "PUT")

        rsp = urllib.request.urlopen(req)

        #根据官方文档我们只需要知道服务器返回码即可,200为成功,这里获取服务器的返回码

        code = rsp.getcode()

        #判断是否成功

        if code == 200:

            print('成功更改域名解析:'+ip_addr)

        else:

            print('更改失败!')

    #原谅我偷懒。官方有400/401/422等错误,这里统一处理了

    except:

        print('错误!')

执行一下函数,并传入请求地址和我们输入的IP

update_NS(api_url,ip_addr)

执行一下看看效果:


 

 

文中的监测公网地址,实现自动更改解析记录。以后就不要翻邮箱找IP啦。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/108785.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++图形界面编程-MFC

C控制台程序是命令行黑框,如果要写一个图形界面,VS也提供了图形界面编程MFC。建项目的时候选如下选项: 类似于QT。 问:那么MFC项目的运行入口main()或WinMain()在哪里呢? 答:其实,在MFC应用程…

【1++的数据结构】之map与set(一)

👍作者主页:进击的1 🤩 专栏链接:【1的数据结构】 文章目录 一,关联式容器与键值对二,setset的使用 三,mapmap的使用 四,multiset与multimap 一,关联式容器与键值对 像l…

视频云存储/安防监控视频AI智能分析网关V3:抽烟/打电话功能详解

人工智能技术已经越来越多地融入到视频监控领域中,近期我们也发布了基于AI智能视频云存储/安防监控视频AI智能分析平台的众多新功能,该平台内置多种AI算法,可对实时视频中的人脸、人体、物体等进行检测、跟踪与抓拍,支持口罩佩戴检…

redux中间件理解,常见的中间件,实现原理。

文章目录 一、Redux中间件介绍1、什么是Redux中间件2、使用redux中间件 一、Redux中间件介绍 1、什么是Redux中间件 redux 提供了类似后端 Express 的中间件概念,本质的目的是提供第三方插件的模式,自定义拦截 action -> reducer 的过程。变为 actio…

Wireshark数据抓包分析之HTTP协议

一、实验目的: 主要时熟悉wireshark的使用 二、预备知识: HTTP协议的相关知识 what fk,原来只要在右页点击切换,就可以开启2台不同的机器欸!nice 三、实验过程: 1.在机器1中通过管理员身份运行hfs之后&a…

第七周第七天学习总结 | MySQL入门及练习学习第二天

实操练习: 1.创建一个名为 cesh的数据库 2.在这个数据库内 创建一个名为 xinxi 的表要求该表可以包含:编号,姓名,备注的信息 3.为 ceshi 表 添加数据 4.为xinxi 表的数据设置中文别名 5.查询 在 xinxi 表中编号 为2 的全部…

Navicat for Mysql 显示 emoji 表情符号乱码问题 — 其它乱码情况都可参考

系统环境: 操作系统:MAC OS 10.11.6 MySQL:Server version: 5.6.21 MySQL Community Server (GPL) Navicat for MySQL: version 9.3.1 - standard 1、问题发现 在客户端执行用户注册,用户名包括 emoji 表情符号,注册完…

线性代数的学习和整理14: 线性方程组求解

目录 1 线性方程组 2 有解,无解 3 解的个数 1 线性方程组 A*xy 3根直线的交点,就是解 无解的情况 无解: 三线平行无解:三线不相交 有解 有唯一解:三线相交于一点有无数解:三条线重叠 2 齐次线性方程组…

软件测试的方法有哪些?

软件测试 根据利用的被测对象信息的不同,可以将软件测试方法分为:黑盒测试、灰盒测试、白盒测试。 1、白盒测试 1)概念:是依据被测软件分析程序内部构造,并根据内部构造分析用例,来对内部控制流程进行测试…

LabVIEW软件安装包分享(附安装教程)

目录 一、软件简介 二、软件下载 一、软件简介 LabVIEW(Laboratory Virtual Instrument Engineering Workbench)是由美国National Instruments(简称NI)公司开发的一款图形化编程工具,广泛应用于测试、测量和控制系统…

【深度学习】实验03 特征处理

文章目录 特征处理标准化归一化正则化 特征处理 标准化 # 导入标准化库 from sklearn.preprocessing import StandardScalerfrom matplotlib import gridspec import numpy as np import matplotlib.pyplot as plt import warnings warnings.filterwarnings("ignore&quo…

Tomcat 部署时 war 和 war exploded区别

在 Tomcat 调试部署的时候,我们通常会看到有下面 2 个选项。 是选择war还是war exploded 这里首先看一下他们两个的区别: war 模式:将WEB工程以包的形式上传到服务器 ;war exploded 模式:将WEB工程以当前文件夹的位置…

基于风险的漏洞管理

基于风险的漏洞管理涉及对即将被利用的漏洞的分类响应,如果被利用,可能会导致严重后果。本文详细介绍了确定漏洞优先级时要考虑的关键风险因素,以及确保基于风险的漏洞管理成功的其他注意事项。 什么是基于风险的漏洞管理对基于风险的漏洞管…

prometheus监控JVM(接入tomcat)

一、整合jmx_exporter及tomcat 1、 jmx_exporter下载地址 https://github.com/prometheus/jmx_exporter/releases 2、 tomcat配置文件下载地址 https://github.com/prometheus/jmx_exporter/blob/main/example_configs/tomcat.yml 3、创建tomcat_exporter目录 [rootlocalhost ~…

前端需要理解的性能优化知识

优化的目的是展示更快、交互响应快、页面无卡顿情况。 1 性能指标 2 分析方法 使用 ChromeDevTool 作为性能分析工具来观察页面性能情况。其中Network观察网络资源加载耗时及顺序,Performace观察页面渲染表现及JS执行情况,Lighthouse对网站进行整体评分…

【算法训练-双指针】最长无重复子串(数组)

废话不多说,喊一句号子鼓励自己:程序员永不失业,程序员走向架构!本篇Blog的主题是最长无重复子串或最长无重复子数组,这类题目出现频率还是很高的。 最长无重复子数组 先来看看数组数据结构的题目 题干 输入&#…

Android studio 软件git使用

在 test 分支添加的方法 , 现在切换到 master分支 总共 2 个分支 , 当前的分支是 test 出现了 先试一下 force checkout , 尝试之后发现 , 你更改没有带过来 , 以为哪个类在master分支没有 , 所以这边也没有 , 切回分支 test 发现之前的跟改没有 , 这样即可以找回 继续切换…

土豆叶病害识别(图像连续识别和视频识别)

效果视频:土豆叶病害识别(Python代码,pyTorch框架,视频识别)_哔哩哔哩_bilibili 代码运行要求:Torch库>1.13.1,其它库无版本要求 1..土豆叶数据集主要包好三种类别(Early_Blight…

Redis下载与安装

文章目录 Redis简介下载,安装和配置(cmd)图形化工具 Redis 简介 下载,安装和配置(cmd) 开启redis服务 1.在解压出来的文件夹中打开cmd 2.输入 redis-server.exe redis.windows.conf即可开启服务 可以看到…

用香港服务器域名需要备案吗?

​  在选择服务器的时候,很多人会考虑使用香港服务器。香港服务器的一个优势就是不需要备案。不管是虚拟主机还是云主机,无论是个人网站还是商业网站,都不需要进行备案手续。 域名实名认证 虽然不需要备案,但使用香港服务器搭建…