perl 切换 dnspod 域名记录

时间:2022-09-12 22:52:50

提供域名,dnspod 账户密码(毕竟dns密码比较重要 不能谁 cat一下都可以看到 需要base64加密),原IP,切换目标IP,

#!/bin/perl
use warnings;
use MIME::Base64;
use LWP;
use Encode;
use JSON;
use Data::Dumper;
my $ChangeDomain='linuxjs.com';
my $BeforeIP='XXX.XXX.XXX.XXX';
my $ChangeIP='XXX.XXX.XXX.XXX';
my $user= decode_base64("加密后的用户名字符串");
my $passwd= decode_base64("加密后的密码字符串");
chomp($user,$passwd);
sub GetDomainID{
my $url='https://dnsapi.cn/Domain.Info';
my $browser = LWP::UserAgent->new(agent => 'checkdns.pl/1.0.0(hydezhao@gmail.com)');
$response = $browser->post( $url,
[
login_email => $user,
login_password => $passwd,
format => 'json',
domain => $_[0]
]
);
if ($response->is_success != 1)
{
print "链接失败!\n";
exit;
}
else
{
my $rs=$response->content;
my $json_text = JSON->new->utf8->decode($rs);
if ($json_text->{'status'}->{'code'} != 1 )
{
print $json_text->{'status'}->{'message'}."\n";
exit;
}
else
{
return $json_text->{'domain'}->{'id'};
}
}
}
sub GetRecordId{
my $url='https://dnsapi.cn/Record.List';
my $browser = LWP::UserAgent->new(agent => 'checkdns.pl/1.0.0(hydezhao@gmail.com)');
$response = $browser->post( $url,
[
login_email => $user,
login_password => $passwd,
format => 'json',
domain_id => $_[0]
]
);
if ($response->is_success != 1)
{
print "链接失败!\n";
exit;
}
else
{
my $rs=$response->content;
my $json_text = JSON->new->utf8->decode($rs);
if ($json_text->{'status'}->{'code'} != 1 )
{
print $json_text->{'status'}->{'message'}."\n";
exit;
}
else
{
for my $record(@{$json_text->{'records'}})
{
$id_name{$record->{'id'}} = $record->{'name'}."||".$record->{'value'};
}
return %id_name;
}
}
}
sub UpdateRecord{
my $url='https://dnsapi.cn/Record.Modify';
my $browser = LWP::UserAgent->new(agent => 'checkdns.pl/1.0.0(hydezhao@gmail.com)');
$response = $browser->post( $url,
[
login_email => $user,
login_password => $passwd,
format => 'json',
domain_id => $_[0],
record_id => $_[1],
sub_domain => $_[2],
value => $ChangeIP,
record_type => $_[3],
record_line => '默认',
ttl => '600'
]
);
if ($response->is_success != 1)
{
print "链接失败!\n";
exit;
}
else
{
my $rs=$response->content;
my $json_text = JSON->new->utf8->decode($rs);
if ($json_text->{'status'}->{'code'} != 1)
{
print "code:".$json_text->{'status'}->{'code'}." error:".$json_text->{'status'}->{'message'}."\n";
exit;
}
else
{
my $message=$json_text->{'record'}->{'name'}."--->".$json_text->{'record'}->{'value'};
return $message;
}
}
}
my $id=GetDomainID($ChangeDomain);
chomp $id;
#print "$id \n";
my %records= GetRecordId($id);
while (my ($k,$v)= each %records )
{
my ($name,$ip)= split(/\|\|/,$v);
if ($ip eq $BeforeIP)
{
chomp($name,$ip);
print "$name--->$ip\n";
print "changing.....\n";
print UpdateRecord($id,$k,$name,'A')."\n";
}
}

这个脚本 配合宕机检测机制 触发执行 可以在无人值守的情况下 短时间内 切换故障机器 把所有域名 切换到 指定备份机器

perl 切换 dnspod 域名记录的更多相关文章

  1. DNS域名记录

    DNS域名记录 DNS数据库 在DNS的解析过程中用到域名的解析资源的记录,这个解析记录在DNS当中称为DNS数据库. 这个数据库又分为正解和反解,正解就是从主机名到ip的过程,反解就是从ip反响解析 ...

  2. 域名注册域名解析域名绑定 dns服务器解析 域名记录的添加 记录类型含义@ www 访问域名请求过程

    创建一个web应用,简言之就是访问一个域名,可以到达一个地方,这个地方就是你存放供别人查看的文件的地方 就像一条绳,从这头拉一下,可以拉出来另一头的东西 主要有两个部分: 域名 虚拟主机(空间) 1. ...

  3. 常用域名记录解释:A记录、MX记录、CNAME记录、TXT记录、AAAA记录、NS记录

    A记录 A记录是用来创建到IP地址的记录. A记录设置技巧 1.如果想创建不带www的记录,即ezloo.com,在主机记录中填写@或者留空,不同的注册商可能不一样. 2.创建多个域名到同一个IP,比 ...

  4. ProxySQL+MGR实现读写分离和主节点故障无感知切换 - 完整操作记录

    前面的文章介绍了ProxySQL用法,这里说下ProxySQL中间件针对Mysql组复制模式实现读写分离以及主节点故障时能够自动切换到新的主节点,而应用对此过程无感知的功能.Mysql组复制(MGR) ...

  5. Windows环境下JDK的配置及多版本JDK切换的方法记录

    (这里记录了笔者了解的关于JDK环境配置的信息,以及针对系统上存在不同版本JDK时所尝试的解决方案.具体来说,是已安装 JDK 8 后,又安装了 JDK 9 时所遇到的问题和尝试的解决方法.这次记录以 ...

  6. 关于mha手动切换的一些记录(mha方案来自网络)

    mha方案出自:http://www.cnblogs.com/xuanzhi201111/p/4231412.html 当主服务器故障时,人工手动调用MHA来进行故障切换操作,具体命令如下: 先停MH ...

  7. Perl 正则匹配经验记录

    0.正则匹配字典:http://www.cnblogs.com/itech/archive/2010/03/19/1689793.html 1.$/=">";重新定义字符串分 ...

  8. 验证mongodb副本集并实现自动切换primary~记录过程

    接 验证mongodb主从复制过程 1.创建数据目录 同 验证mongodb主从复制过程 的实验一样,本次实验也是采用直接指定启动参数来启动mongodb数据库,本次实验我们需要启动三个数据库,为了与 ...

  9. 获取dnspod指定域名的记录

    #!/usr/bin/python #-*- coding: utf-8 -*- import os,requests,json import re,time,xlsxwriter #时间 date= ...

随机推荐

  1. 。net新人报道

    入行一年多  关注博客园也有半年的时间了 今天开始写第一篇东西  以后有什么笔记也会慢慢写上来的

  2. 【BZOJ】【1449】【JSOI2009】球队收益

    网络流/费用流/二分图最小权匹配 题解:http://blog.csdn.net/huzecong/article/details/9119741 太神了!由于一赢一输不好建图,就先假设全部都输,再将 ...

  3. EXCEL排序

    题目描述:     Excel可以对一组纪录按任意指定列排序.现请你编写程序实现类似功能.     对每个测试用例,首先输出1行“Case i:”,其中 i 是测试用例的编号(从1开始).随后在 N ...

  4. Qt源码分析之信号和槽机制

    Qt的信号和槽机制是Qt的一大特点,实际上这是和MFC中的消息映射机制相似的东西,要完成的事情也差不多,就是发送一个消息然后让其它窗口响应,当然,这里的消息是广义的说法,简单点说就是如何在一个类的一个 ...

  5. X windows的底层实现机制

    Qt在Linux上运行崩溃了,很可能的原因是对于X11机制的不了解.很可能是UI代码里面对窗口的操作不规范而导致Qt内部的BUG暴露出来.具体UI实现代码我也没有看.是别人维护的.打算今天去看下代码, ...

  6. Spring 整合 Redis出现的一个Timeout方法找不到的问题

    直接说问题吧. 依赖包:jedis 2.9.0. spring-data-reids 1.4.1 提示:redis.clients.jedis.JedisShardInfo.setTimeout(I) ...

  7. ToB蓝海的台阶-PaaS,SaaS技术详解

    前言 随着大量SaaS公司进入市场,我们看到颠覆性的软件服务以各种方式进入企业流程-从营销工具到支付系统.随着SaaS帮助优化业务流程,实现更流畅和自动化的运营,风险投资公司首先潜入池中寻找最优秀和最 ...

  8. linq中last或者lastordefault不存在的问题

    在使用linq访问数据库的时候发现first以及firstordefault都存在,但是last以及lastordefault不存在.上网找寻一番发现是last只在linq to object中实现了 ...

  9. windows编程经典书籍

    本人是刚刚开始学习windows编程的,感觉看雪学院的大牛很NB.想找一些书籍来看学习学习,可是不知道看哪些书好.驱动,对菜鸟们来说真是一个很深奥的话题,所以 ,我找来了这篇文章供大家分享,以后大家发 ...

  10. 【LeetCode题解】160_相交链表

    目录 160_相交链表 描述 解法一:哈希表 思路 Java 实现 Python 实现 解法二:双指针(推荐) 思路 Java 实现 Python 实现 160_相交链表 描述 编写一个程序,找到两个 ...