#!/usr/bin/perl
use strict;
use LWP::UserAgent;
use HTTP::Request::Common;
use Parallel::ForkManager;
my $self = {};
bless $self;
my %config;
%config = (
use_proxy => 1,
proxy_list => "proxies.txt",
ping_servers => "pinglist.txt",
blog_list => "urls.txt",
max_threads=>5,
);
my $pm = new Parallel::ForkManager();
$pm = new Parallel::ForkManager($config{max_threads});
my ($ping_list,$ping_source,$ip_list) = @ARGV;
my (@ping_urls) = load_file($config{ping_servers});
my (@ping_blogs) = load_file($config{blog_list});
if ($config{use_proxy}) { my (@proxies) = load_file($config{proxy_list}); }
foreach my $blogs_to_ping (@ping_blogs) {
my $pid = $pm->start and next;
foreach my $ping_servers (@ping_urls) {
my $localip = $local_ips[int(rand($#local_ips))];
my $ur) = $blogs_to_ping;
my $ping_resp = weblogUpdatesPing($ping_servers,"http://$url",$localip);
sleep(5);
if ($ping_resp=~/error/) {
print "posting error: $ping_serversn";
open(OUT,">>bad_ping_servers.txt");
print OUT "$ping_serversn";
close(OUT);
}
if ($ping_resp=~/good/) {
print "good ping: $ping_serversn";
}
}
$pm->finish;
}
$pm->wait_all_children;
sub load_file {
my ($fname) = @_;
my (@fhin);
open(FH,"$fname") || die "can't open $fname: $0";
while (<FH>) {
s/n//g;
push(@fhin,$_);
}
close(FH);
return(@fhin);
}
sub weblogUpdatesPing
{
my ($ping_url,$blog,$localaddr) = @_;
my $errorcode;
my $userAgent = LWP::UserAgent->new(agent=>'WordPress/2.0.2', timeout=>'20');
if ($config{use_proxy}) {
$userAgent->proxy('http',int(rand($#proxies));
}
my $rand_alpha = generate_random_string(30);
my $pingStr =
"<?xml version="1.0"?>" .
"<methodCall>" .
" <methodName>weblogUpdates.ping</methodName>" .
" <params>" .
" <param><value>$rand_alpha</value></param>" .
" <param><value>$blog</value></param>" .
" </params>" .
"</methodCall>";
my $response = $userAgent->request(POST $ping_url, Content_Type => 'text/xml', Content => $pingStr);
if ($response->is_success) {
$errorcode="good";
return($errorcode);
}
else {
$errorcode = "error";
print $response->error_as_HTML;
return($errorcode);
}
}
sub generate_random_string
{
my $length_of_randomstring=shift;
my @chars=('a'..'z','A'..'Z','0'..'9','_');
my $random_string;
foreach (1..$length_of_randomstring)
{
$random_string.=$chars[rand @chars];
}
return $random_string;
}