perl 切换 dnspod 域名记录
提供域名,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 域名记录的更多相关文章
- DNS域名记录
DNS域名记录 DNS数据库 在DNS的解析过程中用到域名的解析资源的记录,这个解析记录在DNS当中称为DNS数据库. 这个数据库又分为正解和反解,正解就是从主机名到ip的过程,反解就是从ip反响解析 ...
- 域名注册域名解析域名绑定 dns服务器解析 域名记录的添加 记录类型含义@ www 访问域名请求过程
创建一个web应用,简言之就是访问一个域名,可以到达一个地方,这个地方就是你存放供别人查看的文件的地方 就像一条绳,从这头拉一下,可以拉出来另一头的东西 主要有两个部分: 域名 虚拟主机(空间) 1. ...
- 常用域名记录解释:A记录、MX记录、CNAME记录、TXT记录、AAAA记录、NS记录
A记录 A记录是用来创建到IP地址的记录. A记录设置技巧 1.如果想创建不带www的记录,即ezloo.com,在主机记录中填写@或者留空,不同的注册商可能不一样. 2.创建多个域名到同一个IP,比 ...
- ProxySQL+MGR实现读写分离和主节点故障无感知切换 - 完整操作记录
前面的文章介绍了ProxySQL用法,这里说下ProxySQL中间件针对Mysql组复制模式实现读写分离以及主节点故障时能够自动切换到新的主节点,而应用对此过程无感知的功能.Mysql组复制(MGR) ...
- Windows环境下JDK的配置及多版本JDK切换的方法记录
(这里记录了笔者了解的关于JDK环境配置的信息,以及针对系统上存在不同版本JDK时所尝试的解决方案.具体来说,是已安装 JDK 8 后,又安装了 JDK 9 时所遇到的问题和尝试的解决方法.这次记录以 ...
- 淘宝 NPM 镜像站切换新域名啦
镜像下载.域名解析.时间同步请点击 阿里云开源镜像站 源起 淘宝 NPM 镜像站(npm.taobao.org)自 2014 年 正式对外服务,一开始只是想简单地做 NPM 的中国镜像站点,回馈国内前 ...
- 关于mha手动切换的一些记录(mha方案来自网络)
mha方案出自:http://www.cnblogs.com/xuanzhi201111/p/4231412.html 当主服务器故障时,人工手动调用MHA来进行故障切换操作,具体命令如下: 先停MH ...
- Perl 正则匹配经验记录
0.正则匹配字典:http://www.cnblogs.com/itech/archive/2010/03/19/1689793.html 1.$/=">";重新定义字符串分 ...
- 验证mongodb副本集并实现自动切换primary~记录过程
接 验证mongodb主从复制过程 1.创建数据目录 同 验证mongodb主从复制过程 的实验一样,本次实验也是采用直接指定启动参数来启动mongodb数据库,本次实验我们需要启动三个数据库,为了与 ...
随机推荐
- vue2.0环境搭建
1.安装node.js(官网) 2.安装淘宝镜像 npm install -g cnpm --registry=https://registry.npm.taobao.org 3.安装webpack ...
- C# 小知识
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.C ...
- 【Java EE 学习 78 下】【数据采集系统第十天】【数据采集系统完成】
一.项目源代码地址 二.项目演示
- 【DWR系列06】- DWR日志及js压缩
img { border: solid 1px } 一.日志 DWR依赖 Apache Commons Logging,可以使用log4j实现日志记录功能. 1.1 日志简介 和其他日志框架一样,当设 ...
- Cocos2d-x 版本小游戏 《是男人就下100层》 项目开源
这个是很久就开始动手写的一个小游戏了,直到最近才把它收尾了,拖拖拉拉的毛病总是很难改啊. 项目是基于 cocos2d-x v2.2 版本 ,目前只编译到了 Win8 平台上,并且已经上传到了商店,支持 ...
- 开发常用技巧之css字体编码
简介: 当我们写css时,通常需要设置字体名称,我们可以直接写中文,这样没错,但是文件编码为GB2312.UTF-8等不匹配将会出现乱码.因此将中文字体名称转为unicode编码来避免出现这些错误. ...
- 函数式编程之柯里化(curry)
函数式编程curry的概念: 只传递给函数一部分参数来调用函数,然后返回一个函数去处理剩下的参数. var add = function(x) { return function(y) { retur ...
- 安卓手持智能POS端上能扫描开单的软件-店面销售开单系统
安卓移动POS终端上能扫描开单的软件: 一.登录验证,以业务员.密码登录: 二.订单列表,显示相关信息,包括日期.单据号.客户名.金额.单据状态.有新增订单及按特定条件查询订单的功能(日期.客户等). ...
- DotnetCore Docker
FROM microsoft/dotnet:1.0.0-preview2-sdk RUN mkdir /app WORKDIR /app COPY project.json /app RUN [&qu ...
- c#接口与抽象类的区别
abstract 修饰符用于表示所修饰的类是不完整的,并且它只能用作基类.抽象类与非抽象类在以下方面是不同的: 抽象类不能直接实例化,并且对抽象类使用 new 运算符是编译时错误.虽然一些变量和值在编 ...