Опубликовано

Возникла необходимость перейти с одного IP адреса на другой. Сейчас у нас сайтов примерно 2500 и менять их вручную было бы самоубийством. Поэтому пришла мысль написать просто скрипт, который бы через API IspManager поменял бы мне IP на заданный.
Ниже приведен скрипт, который быстро и безболезненно поменяет IP адрес:

#!/usr/bin/perl -w
use CGI;
BEGIN { push @INC, '/usr/local/ispmgr/lib/perl' }
use Mgr;

use CGI::Carp qw(fatalsToBrowser);
print "Content-type: text/html\n\n";

use LWP::UserAgent;
use XML::LibXML;

my $result;

# Create a pseudo-browser that will run as MSIE and send the request
$ua = LWP::UserAgent->new;
$ua->agent("Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)");
my $req = HTTP::Request->new(POST => 'https://IP_ISPManager/manager/ispmgr');

$req->content("authinfo=login_password&out=xml&func=wwwdomain");

my $res = $ua->request($req);

# Check the result
if ($res->is_success) {
$result = $res->content;
} else {
die $res->status_line."\n";
}

# The $result variable contains either an XML document with the list of WWW domains,
# or an error message

my $parser = XML::LibXML->new();
my $doc = $parser->parse_string( $result );
my $root = $doc->documentElement();
my $xmldoc;
my $xmlroot;

#
sub change_it ($elid)
{
($xmldoc, $xmlroot) = Mgr::query ('wwwdomain.edit', [ ['authinfo', 'login:password'],['elid','$elid'] ]);
my $ip = $xmlroot->getElementsByTagName("ip");
my $admin= $xmlroot->getElementsByTagName("admin");
my $index=$xmlroot->getElementsByTagName("index");
my $domain=$xmlroot->getElementsByTagName("domain");
my $alias=$xmlroot->getElementsByTagName("alias");
my $docroot=$xmlroot->getElementsByTagName("docroot");
my $owner=$xmlroot->getElementsByTagName("owner");
my $version=$xmlroot->getElementsByTagName("version");
my $charset=$xmlroot->getElementsByTagName("charset");
my $autosubdomain=$xmlroot->getElementsByTagName("autosubdomain");
my $php=$xmlroot->getElementsByTagName("php");
my $cgi=$xmlroot->getElementsByTagName("cgi");
my $wsgi=$xmlroot->getElementsByTagName("wsgi");
my $ssi=$xmlroot->getElementsByTagName("ssi");
my $ssiext=$xmlroot->getElementsByTagName("ssiext");
my $ror=$xmlroot->getElementsByTagName("ror");
my $logrequests=$xmlroot->getElementsByTagName("logrequests");
my $new_ip="xxx.xx.xx.xx";

$req->content("authinfo=login:password&func=wwwdomain.edit&elid=$elid&ip=$new_ip&admin=$admin&index=$index&domain=$domain&alis=$alias&docroot=$docroot&owner=$owner&version=$version&charset=$charset&autosubdomain=$autosubdomain&php=$php&cgi=$cgi&wsgi=$wsgi&ssi=$ssi&ssiext=$ssiext&ror=$ror&logrequests=$logrequests&sok=yes");
$res = $ua->request($req);

if ($res->is_success) {#
$result = $res->content;
} else {
die $res->status_line."\n";
}

}

#my $docroot
#exit;
#

# Get the list of WWW domains
#my @sites = ();
#for( $root->findnodes( "elem/name" ) ){
# push @sites, $_->textContent;
#}

# Display the result
for( sort @sites ){
change_it(chomp($_));
}

Сам проверял только на тестовом аккаунте, но скоро нужно будет делать уже со всеми

Share and Enjoy:
  • Мой Мир
  • Facebook
  • Twitter

Добавить комментарий