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.mzph.cn/news/51812.shtml

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

相关文章

SpringBoot-1-Spring Boot实战:快速搭建你的第一个应用,以及了解原理

SpringBoot-1-Spring Boot实战:快速搭建你的第一个应用,以及了解原理 今日内容 SpringBootWeb入门 前言 我们在之前介绍Spring的时候,已经说过Spring官方(Spring官方)提供很多开源项目,点击projects,看到spring家族…

【前端】深入解析CSS:选择器、显示模式、背景属性和特征剖析

目录 一、前言二、CSS的复合选择器1、后代选择器①、语法②、注意事项 2、子选择器①、语法②、注意事项 3、并集选择器①、语法②、注意事项 4、链接伪类选择器①、语法②、注意事项 三、CSS元素显示模式转换1、转换为块元素display:block2、转换为行内元素display:inline3、转…

带您解读DeepBook经济原理

DeepBook是Sui上的第一个原生流动性层,通过Sui可预测且低廉的gas费,将促进DeepBook上的大规模交易活动。鉴于DeepBook的中央限价订单簿(Central Limit Order Book,CLOB)架构,交易量越大,资产价格…

java gradle 项目 在idea上 搭建一个简单的thrift实例

前言 Thrift是RPC通信的一种方式,可以通过跨语言进行通信,最近项目需要进行跨语言的通信,因此首先尝试搭建了一个简单的thrift框架,因为网上的实例大都参差不全,通过gpt查询得到的结果对我帮助更大一点,但…

通信原理 | 窗函数 | 矩形窗 | 汉宁窗 | 汉明窗 | 布莱克曼窗 | 补零对频谱的影响

文章目录 矩形窗矩形窗的时域表达式N=32的时域图N=32的频域图时域补零后的时域序列时域补零后的频域序列时域补零到序列长度为4096,对应的频域序列纵轴取对数汉宁窗N=32的情况下的时域序列N=32的频域图时域补零后的时域序列和对应频域序列时域补零到序列长度为4096,对应的频域…

CentOS KVM虚拟安装和开机启动

1. 配置系统 关闭SELinux setenforce 0持久化关闭配置 vi /etc/selinux/config2. 安装虚拟化软件 安装 KVM、QEMU等虚拟化软件。 yum install qemu-kvm qemu-img virt-manager libvirt virt-install virt-viewer 检查LVM模块是否已经加载 lsmod |grep kvm设置开机启动 s…

回归预测 | MATLAB实现GWO-BP灰狼算法优化BP神经网络多输入单输出回归预测(多指标,多图)

回归预测 | MATLAB实现GWO-BP灰狼算法优化BP神经网络多输入单输出回归预测(多指标,多图) 目录 回归预测 | MATLAB实现GWO-BP灰狼算法优化BP神经网络多输入单输出回归预测(多指标,多图)效果一览基本介绍程序…

零基础如何使用IDEA启动前后端分离中的前端项目(Vue)?

一、在IDEA中配置vue插件 点击File-->Settings-->Plugins-->搜索vue.js插件进行安装,下面的图中我已经安装好了 二、搭建node.js环境 安装node.js 可以去官网下载:安装过程就很简单,直接下一步就行 测试是否安装成功:要…

JavaScript如何实现数据的深拷贝、浅拷贝?

原文合集地址如下,有需要的朋友可以关注 本文地址 什么是深浅拷贝 说到深浅拷贝就得提起JavaScript中的数据类型之前的文章中有介绍过,这里就不再细说了。 浅拷贝:对基本数据类型进行值复制,对引用数据类型复制引用地址。浅拷贝会创建一个…

队列(Queue):先进先出的数据结构队列

栈与队列https://blog.csdn.net/qq_45467165/article/details/127958960?csdn_share_tail%7B%22type%22%3A%22blog%22%2C%22rType%22%3A%22article%22%2C%22rId%22%3A%22127958960%22%2C%22source%22%3A%22qq_45467165%22%7D 队列(Queue)是一种常见的线…

Apache Shiro是什么

特点 Apache Shiro是一个强大且易用的Java安全框架,用于身份验证、授权、会话管理和加密。它的设计目标是简化应用程序的安全性实现,使开发人员能够更轻松地处理各种安全性问题,从而提高应用程序的安全性和可维护性。下面是一些Apache Shiro的关键特点和概念: 特点和概念…

【芯片设计封装与测试】芯片测试目的、方法、分类及案例

目录 1.芯片测试概述(目的、方法) 1.1.测试在芯片产业价值链上的位置 2.测试如何体现在设计的过程中 2.1.半导体测试定义与基本工作机制 2.2.半导体测试环节分类及对应设备 2.3.设计验证 3.测试的各种类型 3.1.抽样测试和生产全测 3.2.测试相关…

controller层如何接收带参数的查询

在控制器(Controller)层接收带参数的查询可以通过多种方式实现。以下是几种常见的方法: 使用 URL 路径参数:将参数作为 URL 的一部分,例如 /users/{userId}。在 Spring MVC 中,您可以使用 PathVariable 注解…

Mysql知识梳理

Mysql知识梳理 索引索引分类索引未命中的原因性能调优命令Explain回表 mysql性能优化事务四大特性事务隔离级别设置事务隔离级别 存储引擎聚簇索引和非聚簇索引聚簇索引非聚簇索引 最左前缀结合原则全文索引 索引 索引分类 mysql有普通索引、空间索引、主键索引、唯一索引、组…

高忆管理:股市交易时间和规则?

股市是指股票买卖商场,出资者买卖股票来获取出资回报。买卖时刻和规矩是股票商场的核心,它约束了股票价格的改变和买卖者的行为。那么,股市的买卖时刻和规矩是什么?咱们应该怎么了解和运用它们来出资? 一、股市买卖时刻…

集成放大器 电路 分析 设计过程中的概念和要点

集成运放的三大特性:虚短、虚断、 和 虚地把这几个特性理解明白了, 后面的电路分析就很容易上手。 虚短:UPUN,两输入端电压相等。虚断:IPIN0,两输入端的输入电流为0。虚地:UPUN0&#xff0c…

Python Scrapy网络爬虫框架从入门到实战

Python Scrapy是一个强大的网络爬虫框架,它提供了丰富的功能和灵活的扩展性,使得爬取网页数据变得简单高效。本文将介绍Scrapy框架的基本概念、用法和实际案例,帮助你快速上手和应用Scrapy进行数据抓取。 Scrapy是一个基于Python的开源网络爬…

软考高级系统架构设计师系列之:论文典型试题写作要点和写作素材总结系列文章三

软考高级系统架构设计师系列之:论文典型试题写作要点和写作素材总结系列文章三 一、论Web Service 技术的应用与发展趋势1.论文题目2.写作要点和写作素材二、论系统的可靠性1.论文题目2.写作要点和写作素材三、论软件可靠性设计与应用1.论文题目2.写作要点和写作素材四、论软件…

17.1.2 【Linux】systemd使用的unit分类

systemd 有什么好处? 平行处理所有服务,加速开机流程: 旧的 init 启动脚本是“一项一项任务依序启动”的模式,因此不相依的服务也是得要一个一个的等待。但目前我们的硬件主机系统与操作系统几乎都支持多核心架构了,s…

【路由器】小米 WR30U 解锁并刷机

文章目录 解锁 ssh环境准备解锁过程 刷入 mt798x uboot简介刷入流程 刷入 ImmortalWrt简介刷入流程 刷为原厂固件参考资料 本文主要记录个人对小米 WR30U 路由器的解锁和刷机过程,整体步骤与 一般安装流程 类似,但是由于 WR30U 的解锁 ssh 和刷机的过程中…