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

news2024/11/17 13:50:51

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.coloradmin.cn/o/921571.html

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

相关文章

缓存之争:Redis和JVM面对面,你会选谁?

大家好,我是你们的小米!今天要和大家聊聊一个在技术面试中经常被问到的问题:Redis缓存和JVM缓存有什么区别呢?相信这个问题在不少小伙伴的面试路上都遇到过,今天就让我们来深入剖析一下吧! 缓存的作用和意…

【Spring Boot】详解条件注解以及条件拓展注解@Conditional与@ConditionalOnXxx

Spring Conditional Spring 4.0提供的注解。作用是给需要装载的Bean增加一个条件判断。只有满足条件才会装在到IoC容器中。而这个条件可以由自己去完成的,可以通过重写Condition接口重写matches()方法去实现自定义的逻辑。所以说这个注解增加了对Bean装载的灵活性。…

基于FPGA视频接口之HDMI2.0编/解码

简介 为什么要特别说明HDMI的版本,是因为HDMI的版本众多,代表的HDMI速度同样不同,当前版本在HDMI2.1速度达到48Gbps,可以传输4K及以上图像,但我们当前还停留在1080P@60部分,且使用的芯片和硬件结构有很大差别,故将HDMI分为两个部分说明1080@60以下分辨率和4K以上分辨率(…

怎么写出更好的高质量内容输出

为了更好地输出高质量的内容,不仅仅需要了解写作的基本原则,还需要深入挖掘目标读者的需求、持续的自我提升以及对信息的严格筛选。以下是一些建议,帮助你更好地输出高质量的内容: 1.充分了解你的受众 调查和了解你的目标读者&am…

SpringBoot整合阿里云OSS,实现图片上传

在项目中&#xff0c;将图片等文件资源上传到阿里云的OSS&#xff0c;减少服务器压力。 项目中导入阿里云的SDK <dependency><groupId>com.aliyun.oss</groupId><artifactId>aliyun-sdk-oss</artifactId><version>3.10.2</version>…

1985-2021年30m全国逐年土地覆被数据(含分省数据)

1.研究背景 2022年8月,武汉大学杨杰和黄昕教授团队向公众发布了CLCD 2021年全国土地覆数据。 中国在过去几十年中经济和人口迅速发展,土地覆盖随之发生巨大变化,因此迫切需要对其进行连续和精细的监测。然而,由于缺乏足够的训练样本和计算能力,基于卫星遥感观测数据的中国…

问道管理股市资讯:影视股集体走高,暑期档票房持续破纪录

影视股24日盘中集体走高&#xff0c;截至发稿&#xff0c;幸福蓝海、金逸影视涨停&#xff0c;上海电影、横店影视涨约8%&#xff0c;百纳千成、光线传媒涨约5%&#xff0c;中国电影、唐德影视、华谊兄弟等涨超3%。 上海问道私募基金管理有限公司&#xff08;百度一下问道管理&…

完成出版工作

书籍完成出版&#xff0c;正式上线售卖。若有需要&#xff0c;可在淘宝&#xff0c;当当&#xff0c;京东这些平台上都可以搜索到&#xff0c;书名是《多智能体机器人系统控制及其应用》&#xff0c;提前感谢&#xff0c;封面如下。 至于本专栏&#xff0c;留作大家讨论和书籍…

当一个程序员决定穿上粉色裤子

作为一个大众眼中的“非典型程序员”&#xff0c;我喜欢拥抱时尚和潮流&#xff0c;比如我经常在演讲时穿粉色裤子&#xff0c;这甚至已经成为一个标志性打扮。某天又逢主题演讲日&#xff0c;我站在衣柜前挑选上衣的时候&#xff0c;忽然灵光乍现&#xff1a;有没有可能借助 M…

基于jenkins自动化部署PHP环境

实验环境 操作系统 IP地址 主机名 角色 CentOS7.5 192.168.147.141 git git服务器 CentOS7.5 192.168.147.142 Jenkins git客户端 jenkins服务器 CentOS7.5 192.168.147.143 web web服务器 具体环境配置见上一篇&#xff01; 准备git仓库 [rootgit ~]# su -…

如何写好公文材料

写好公文材料需要具备一定的写作技巧&#xff0c;同时也需要对公文的格式、语言和结构有深入的了解。以下是如何写好公文材料的建议和步骤&#xff1a; 1.确定公文的目的 在开始写作前&#xff0c;明确公文的目的。它是为了传达什么样的信息&#xff1f;是通知、申请、报告、建…

专题-【十字链表】

有向图的十字链表表示法&#xff1a;

U盘文件恢复,拯救文件,只需简单3招!

“u盘文件删掉了还能恢复吗&#xff1f;七夕和对象吵架了&#xff0c;一气之下把之前一起旅游的照片视频都删了&#xff0c;今天看到空空的u盘&#xff0c;心里真的很难受。有什么方法可以恢复u盘文件吗&#xff1f;” U盘在我们的日常生活中已经扮演了很重要的角色&#xff0c…

TC1016-同星4路CAN(FD),2路LIN转USB接口卡

TC1016是同星智能推出的一款多通道CAN&#xff08;FD&#xff09;和LIN总线接口设备&#xff0c;CANFD总线速率最高支持8M bps&#xff0c;LIN支持速率0~20K bps&#xff0c;产品采用高速USB2.0接口与PC连接&#xff0c;Windows系统免驱设计使得设备具备极佳的系统兼容性。 支…

【附安装】R语言4.3.0安装教程

软件下载 软件&#xff1a;R语言版本&#xff1a;4.3.0语言&#xff1a;简体中文大小&#xff1a;77.74M安装环境&#xff1a;Win7及以上版本&#xff0c;64位操作系统硬件要求&#xff1a;CPU2.0GHz 内存4G(或更高&#xff09;下载通道①百度网盘丨64位下载链接&#xff1a;h…

android Junit4编写自测用例

10多年的android开发经验&#xff0c;一直以来呢&#xff0c;也没有使用过android自带的测试代码编写。说来也惭愧。今天也花了点时间稍微研究了下。还挺简单。接下来就简单的说一下。 新建工程 直接默认新建一个工程&#xff0c;就会有两个目录androidTest和test(unitTest)两…

漏洞复现 || muhttpd 任意文件读取

漏洞描述 muhttpd&#xff08;mu-HTTP-deamon&#xff09;是一个简单但完整的web服务器&#xff0c;用可移植的ANSI C编写。它支持静态页面、CGI脚本、基于MIME类型的处理程序和HTTPS&#xff0c;muhttpd 1.1.7之前版本存在安全漏洞。攻击者利用该漏洞读取系统任意文件。 免责…

免费制作高质量的电子期刊网站

工具介绍&#xff1a;FLBOOK 打开FLBOOK首页就能看见有四五本高质量的电子书刊&#xff0c;并且每打开一本&#xff0c;书的最下方就有阅读次数的统计。 FLBOOK制作电子期刊的方法也非常简单&#xff0c;可以根据小编的步骤开始制作或是看FLBOOK的教程&#xff0c;亲自动手制作…

第一讲使用IDEA创建Java工程——HelloWorld

一、前言导读 为了能够让初学者更快上手Java,不会像其他书籍或者视频一样,介绍一大堆历史背景,默认大家已经知道Java这么编程语言了。本专栏只会讲解干货,直接从HelloWord入手,慢慢由浅入深,讲个各个知识点,这些知识点也是目前工作中项目使用的,而不是讲一些老的知识点…

Tuxera NTFS2023中文版Mac读写NTFS格式硬盘访问、编辑、存储和传输文件工具

因为Mac电脑不能写入NTFS格式磁盘&#xff0c;但是多数用户使用的是NTFS格式的移动硬盘、u盘&#xff0c;因此很多NTFS for Mac软件应运而生。但是市面上很多NTFS for Mac软件很多&#xff0c;例如&#xff1a;Tuxera NTFS for Mac、Paragon NTFS for Mac等。Tuxera NTFS for M…