ANTICHAT.XYZ    VIDEO.ANTICHAT.XYZ    НОВЫЕ СООБЩЕНИЯ    ФОРУМ  
Баннер 1   Баннер 2
Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей. Здесь обсуждаются безопасность, программирование, технологии и многое другое. Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
Вернуться   Форум АНТИЧАТ > Программирование > PHP, PERL, MySQL, JavaScript
   
 
 
Опции темы Поиск в этой теме Опции просмотра

[PERL] SOCKS4/5 Sorter + checker
  #1  
Старый 14.02.2008, 14:36
Аватар для biophreak
biophreak
Постоянный
Регистрация: 03.08.2007
Сообщений: 367
Провел на форуме:
876216

Репутация: 209
По умолчанию [PERL] SOCKS4/5 Sorter + checker

Для упрощения себе жизни сделал сортировщик и чекер листов соксов:
1. Определяет тип прокси (SOCKS4/SOCKS5)
2. Пытается проломится на него в гугл, принтит, если прокси валидный( читайте публичный), при остальных "ошибках"(таких как запрос авторизации, идента, GSSAPI авторизация итд) не принтит прокси.
Юзать: ./socks.pl list.txt (можно еще некоторые параметры указать, для списка - просто запустите скрипт без параметров), где list.txt - файл с соксами в формате ип:порт.

UPDATE: Таки выдалось немного времени - прикрутил треды и еще немножко удобностей
Знаю что немного пизд*цкое распределение проксей между потоками, но что сделаешь - мозгов пока что хватило только на это
Сделал нормальные таймауты...

Скрипт не требует никаких дополнительных модулей )
ЗЫЖ Адекватные отзывы и предложения приветствуются
PHP код:
#!perl -s
# SOCKS4/4a/5 Checker v1.1
# (C) by biophreak
# Thnx: KSURi, nekd0 for help.
# Yeah, i know about ugly proxy distribution between threads :)
use warnings 'all'
use 
strict;
use 
diagnostics;
use 
Socket;
use 
Fcntl;
use 
Errno;
use 
threads;
$| = 
1;

my %SOCKS4_CONNECT_RESPONSES = (
    
90 => "request granted",
    
91 => "request rejected or failed",
    
92 => "request rejected, ident required",
    
93 => "request rejected, ident mismatch"
);
my %SOCKS5_METHODS = (
    
=> "no authentication required",
    
=> "GSSAPI",
    
=> "username/password",
    
255 => "no acceptable methods"
);
my %SOCKS5_CONNECT_RESPONSES = (
    
=> "succeeded",
    
=> "general SOCKS server failure",
    
=> "connection not allowed by ruleset",
    
=> "Network unreachable",
    
=> "Host unreachable",
    
=> "Connection refused",
    
=> "TTL expired",
    
=> "Command not supported",
    
=> "Address type not supported",
    
90 => "Protocol mismatch",
    
112 => "Protocol mismatch"
);
my $sockslist shift || exit print "[ERROR] Specify sockslist!\n$0 <socks list> [threads num](default: 50) [connection timeout](default: 10) [socks4 sorted list](default: socks4.txt) [socks5 sorted list](default: socks5.txt)\n";
my $threads shift || 50;
my $timeout shift || 10;
my $s4l shift || 'socks4.txt';
my $s5l shift || 'socks5.txt';
open my $S'<'$sockslist or die "Cannot open file $sockslist ($!)\n";
my @socks = <$S> and close $S;
open my $S4,'>>'$s4l or die "Cant open/create SOCKS4 file ($!)\n";
open my $S5,'>>'$s5l or die "Cant open/create SOCKS4 file ($!)\n";
my($answer,@thr,%spl_socks);
my $proxyperthr = (scalar(@socks) / $threads);

(print 
"Threads are more then proxys =)\nSetting threads to ".scalar@socks."\n" and $threads scalar@socks) if($threads scalar@socks);

for(
my $i 1;$i <= $threads;$i++) 
{
    
last if scalar @socks <= 0;
    
push(@{$spl_socks{"sock".$i}},shift @socks) for(1..$proxyperthr);
    
push(@{$spl_socks{"sock".$i}},shift @socks) if(scalar @socks and scalar @socks 2*$proxyperthr);
    
push(@{$spl_socks{"sock".$i}}, @socks) if($i == $threads and scalar @socks 0);
}
foreach 
my $sck(%spl_socks)
{
    
threads->create(\&ch,@{$spl_socks{$sck}}) if exists $spl_socks{$sck};
}
$_->join foreach(threads->list);
close $S5;
close $S4;
undef %spl_socks;

sub ch
{
    
my @soc = @_;
    
CHECK:
    for(
0..$#soc) 
    

        if(
$soc[$_])
        {
            
my ($server$port) = split ':'shift @soc
            
$server =~ s/\r+|\n+|\s+//go;
                
$port =~ s/\r+|\n+|\s+//go;
                
checkSocks($server,$port);
          }
    }
}

sub checkSocks
{
    
my($server,$port) = @_;
    
socket(SOCKAF_INETSOCK_STREAM6) or ret("[ERROR] Cannot open socket ($!)\n"); 
    
fcntl(SOCKF_SETFLO_NONBLOCK) or ret("[ERROR]:[FCNTL] ($!)\n");
    
unless (connect(SOCKsockaddr_in($portinet_aton($server)))) 
    {
        
Errno::EINPROGRESS == $! or Errno::EWOULDBLOCK or ret("[ERROR] Cannot connect to $server:$port ($!)\n");
        
vec(my $win ''fileno(SOCK), 1) = 1;
        
ret("[ERROR] $server:$port : timed out\n"unless (select(undef$winundef$timeout));
        if (
defined (my $ret getsockopt(SOCKSOL_SOCKETSO_ERROR))) 
        {
            
ret("[ERROR] Connection to $server:$port failed ($!)\n") if $! = unpack('i'$ret);
        } 
elsif (!getpeername(SOCK)) 
        {
            (goto 
CHECK and close SOCK);
        
ret("[ERROR] Connection to $server:$port failed ($!)\n");
        }
     }
    
fcntl(SOCKF_SETFL0);
    
select((select(SOCK), local $| = 1)[0]);
    print 
SOCK pack("CCC",5,1,0); 
    
sysread(SOCK,$answer,32) or (ret("[ERROR] Cannot read from socket ($server:$port) ($!)\n")); 
    
close SOCK;
    if(
unpack('C',$answereq 5 or $answer eq pack('C',5) or $answer eq pack('C',05)) { checkSocks5($server,$port) }
    
elsif(unpack('C'$answereq 0 or $answer eq pack('C',0) or $answer eq pack('C',00)) { checkSocks4($server,$port) }
    else {
ret("[WARN] $server:$port is not a SOCKS4/SOCKS4a/SOCKS5\n") }
}

sub checkSocks5

    
my($server,$port) = @_;
    
my($mssg$repcode);
    
socket(SOCKAF_INETSOCK_STREAM6) or ret("[ERROR] Cannot open socket ($!)\n");
    
connect(SOCKsockaddr_in($portinet_aton($server))) or ret("[ERROR] Cannot connect to $server:$port ($!)\n");
    
select((select(SOCK), local $| = 1)[0]);
    print 
SOCK pack("CCC"510) or ret("[ERROR] Cannot send to socket ($server:$port) ($!)\n");
    
sysread(SOCK,$mssg,32) or ret("[ERROR] Cannot read from socket ($server:$port) ($!)\n");
    
$repcode = (unpack("C*"$mssg))[1]; 
    
ret("[WARN] $server:$port is SOCKS5 proxy,but is not usable ($repcode - $SOCKS5_METHODS{$repcode})\n"unless($repcode == 0); 
    print 
SOCK pack("CCCCa4n"5101inet_aton('64.233.167.99'), 80) or ret("[ERROR] Cannot send to socket ($server:$port) ($!)\n");
    
sysread(SOCK,$mssg,32) or ret("[ERROR] Cannot read from socket ($server:$port) ($!)\n");
    
$repcode = (unpack("C*"$mssg))[1];
    
ret("[WARN] $server:$port is SOCKS5 proxy,but is not usable ($repcode - $SOCKS5_CONNECT_RESPONSES{$repcode})\n"unless($repcode == 0); 
    print 
"[+] $server:$port is good SOCKS5 proxy\n";
    print 
$S5 $server.':'.$port."\n";
    
close SOCK


sub checkSocks4 

    
my($server,$port) = @_;
    
my($mssg$repcode);
    
socket(SOCKAF_INETSOCK_STREAM6) or ret("[ERROR] Cannot open socket ($!)\n");
    
connect(SOCKsockaddr_in($portinet_aton($server))) or ret("[ERROR] Cannot connect to $server:$port ($!)\n");
    
select((select(SOCK), local $| = 1)[0]);
    print 
SOCK pack("CCnA4x"4180inet_aton('64.233.167.99')); 
    
sysread(SOCK,$mssg,32) or ret("[ERROR] Cannot send to socket ($server:$port) ($!)\n");
    
$repcode = (unpack("C*"$mssg))[1]; 
    
ret("[WARN] $server:$port is SOCKS4/4a proxy,but is not usable ($repcode - $SOCKS4_CONNECT_RESPONSES{$repcode})\n"unless ($repcode == 90); 
    print 
"[+] $server:$port is good SOCKS4/SOCKS4a proxy\n";
    print 
$S4 $server.':'.$port."\n";
    
close SOCK
}

sub ret
{
    print @
_;
    
close SOCK;
    goto 
CHECK;

Скачать

Последний раз редактировалось biophreak; 21.07.2008 в 14:14..
 
Ответить с цитированием
 



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Antichat FTP Checker razzzar Soft - Windows 26 12.08.2008 10:32
Ходим в php через socks4/5 h0d PHP, PERL, MySQL, JavaScript 0 31.12.2007 21:09
Rambler Checker Xszz PHP, PERL, MySQL, JavaScript 5 21.12.2007 17:09
PayPal Mail Checker 549iK Разное - Покупка, продажа, обмен 4 25.09.2005 11:15



Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT.XYZ