use warnings;
use IO::Socket;
use threads;
use threads::shared;
use Fcntl ':flock';
my $dig : shared = shift || 9999999 ; #ID начала парсинга (парсинг по убыванию)
$threads = shift || 10 ; #Кол-во потоков
$fname = 'accs1.txt' ; #Куда сохранять
$time = time;
printf "Started at ".localtime()."\n";
for(0..$threads) {$trl[$_] = threads->create(\&Brut, $_);}
for(@trl) { $_->join; }
sub Brut
{
while($dig)
{
my $re ='';
{lock($dig);
$re = "GET http://www.garena.com/forum/viewpro.php?uid= ".$dig." HTTP/1.1\nHost: www.garena.com\n\n"; $dig--;}
my $sock = sock();
print $sock $re;
read($sock,my $answ,10000);
if($answ =~ /<div class="header" style="text-align:left">(.*?)\'s/) {
print $dig."::".$1."\n";
open(FILE, ">>$fname") || die("Could not open $fname\n");
flock(FILE, LOCK_EX);
print FILE "$1\n";
flock(FILE, LOCK_UN);
close(FILE);
}
close($sock);
}
}
sub sock {
my $sock;
do {
$sock = new IO::Socket::INET
(
PeerAddr => 'garena.com',
PeerPort => 80,
PeerProto => 'tcp',
TimeOut => 10
) or print "Can't connect\n";
} while (!$sock);
return $sock;
}
$time = time-$time;
printf "Finished at ".localtime()."\n";
printf "Time elapsed: $time sec\n";
#©Kaimi