设为首页 收藏本站
查看: 800|回复: 0

[经验分享] perl 切换 dnspod 域名记录

[复制链接]

尚未签到

发表于 2015-12-27 12:34:54 | 显示全部楼层 |阅读模式
  提供域名,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";
}
}

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

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-156939-1-1.html 上篇帖子: FW: Die-ing on the Web ( for perl CGI debug) 下篇帖子: Perl函数参数中传递数组和引用的使用
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表