提供域名,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
$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
$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
$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" ; } } |
这个脚本 配合宕机检测机制 触发执行 可以在无人值守的情况下 短时间内 切换故障机器 把所有域名 切换到 指定备份机器
原文:http://www.cnblogs.com/hydezhao/p/3513302.html