hidden
08.05.2006, 23:37
Недавно мне понадобилось много проксей, я знал несколько сайтов, с бесплатными прохи, но они были на разных страницах, в разных таблицах и по несколько шт. И я написал скрипт для их выдерания и группировки который и выкладываю. В нём занесено только 3 сайта, но экспортирует он около 1100 (не повторяющихся) проксей из них примерно 35 "high anonymity", конечно можно добавить сайты, если мало. Он их просто достаёт из таблиц но не проверяет, это можно сделать другими прогами.
ProxyExporter.pl:
#!/usr/bin/perl
use IO::Socket;
use IO::Select;
$log="Info about pages\n";
@begins=('<tr bgcolor="#ffffff" class="text" height=10>','<tr bgcolor="white">','bgcolor="#e3e6ea"'); # Ночало каждой строки в таблице
@xlist1=(1,2,3,4,5,1,2,3,4,5,6,7,8,9,1,2,3,4,5); # Возможные номера страниц от номера запроса
@xlist2=(0,0,0,0,0,1,1,1,1,1,1,1,1,1,2,2,2,2,2); # Номер сайта от номера запроса из следущего масива
@xsites=('www.proxy4free.com','www.proxz.com','www .publicproxyservers.com'); # Сайты
@xpages=(('page','.html'),('proxz','.php'),('page' ,'.html')); # Пары(шаблоны) страниц
$sel=IO::Select->new;
for($n=0;$n<@xlist1;$n++){
$fh=&conect($n);
$sel->add($fh);
$sitetype{$fh}=$n;
print"New conect ($n)\n";
}
while(@ready=$sel->can_read){foreach$fh(@ready){
$ret=sysread$fh,$Request,256;
if(defined$cb{$fh}){
$cb{$fh}.=$Request;
}else{
$cb{$fh}=$Request;
}
if(!$ret){
print"$xsites[$xlist2[$sitetype{$fh}]]($xlist1[$sitetype{$fh}]):\n";
$begin=$begins[$xlist2[$sitetype{$fh}]];
$count=0;
while($cb{$fh}=~/$begin/ig){
($xip)=$'=~/>(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})</;
($xport)=$'=~/>(\d{2,4})</;($xflag)=$'=~/>([^<>]{4,})</;
$proxys{"$xip:$xport"}=$xflag;
print"$xip:$xport\n";
$count++;
}
$log.="$xsites[$xlist2[$sitetype{$fh}]]($xlist1[$sitetype{$fh}])=$count\n";
undef$cb{$fh};
$sel->remove($fh);
close$fh;
}
}}
print"End\n$log";
open(HOUT,">HighProxy.txt");open(EOUT,">ElseProxy.txt"); # HighProxy.txt, ElseProxy.txt - Результаты
while(($proxy,$flag)=each%proxys){
if($flag=~/high anonymity/i){print HOUT"$proxy\n";}else{print EOUT"$proxy\n";}
}
close(EOUT);close(HOUT);
sub conect{local($num)=@_;
$page=$xlist2[$num]*2;$page=$xpages[$page].$xlist1[$num].$xpages[$page+1];
$server=$xsites[$xlist2[$num]];
TRY:{
$s=IO::Socket::INET->new(PeerAddr=>$server,PeerPort=>80);
if($s){
print $s "GET \/$page HTTP/1.1\nHost: $server\nAccept: */*\nUser-Agent: Internet Explorer 6.0\nConnection: Keep-Alive\n\n";
return$s;
}
}
return 0;
}
ProxyExporter.pl:
#!/usr/bin/perl
use IO::Socket;
use IO::Select;
$log="Info about pages\n";
@begins=('<tr bgcolor="#ffffff" class="text" height=10>','<tr bgcolor="white">','bgcolor="#e3e6ea"'); # Ночало каждой строки в таблице
@xlist1=(1,2,3,4,5,1,2,3,4,5,6,7,8,9,1,2,3,4,5); # Возможные номера страниц от номера запроса
@xlist2=(0,0,0,0,0,1,1,1,1,1,1,1,1,1,2,2,2,2,2); # Номер сайта от номера запроса из следущего масива
@xsites=('www.proxy4free.com','www.proxz.com','www .publicproxyservers.com'); # Сайты
@xpages=(('page','.html'),('proxz','.php'),('page' ,'.html')); # Пары(шаблоны) страниц
$sel=IO::Select->new;
for($n=0;$n<@xlist1;$n++){
$fh=&conect($n);
$sel->add($fh);
$sitetype{$fh}=$n;
print"New conect ($n)\n";
}
while(@ready=$sel->can_read){foreach$fh(@ready){
$ret=sysread$fh,$Request,256;
if(defined$cb{$fh}){
$cb{$fh}.=$Request;
}else{
$cb{$fh}=$Request;
}
if(!$ret){
print"$xsites[$xlist2[$sitetype{$fh}]]($xlist1[$sitetype{$fh}]):\n";
$begin=$begins[$xlist2[$sitetype{$fh}]];
$count=0;
while($cb{$fh}=~/$begin/ig){
($xip)=$'=~/>(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})</;
($xport)=$'=~/>(\d{2,4})</;($xflag)=$'=~/>([^<>]{4,})</;
$proxys{"$xip:$xport"}=$xflag;
print"$xip:$xport\n";
$count++;
}
$log.="$xsites[$xlist2[$sitetype{$fh}]]($xlist1[$sitetype{$fh}])=$count\n";
undef$cb{$fh};
$sel->remove($fh);
close$fh;
}
}}
print"End\n$log";
open(HOUT,">HighProxy.txt");open(EOUT,">ElseProxy.txt"); # HighProxy.txt, ElseProxy.txt - Результаты
while(($proxy,$flag)=each%proxys){
if($flag=~/high anonymity/i){print HOUT"$proxy\n";}else{print EOUT"$proxy\n";}
}
close(EOUT);close(HOUT);
sub conect{local($num)=@_;
$page=$xlist2[$num]*2;$page=$xpages[$page].$xlist1[$num].$xpages[$page+1];
$server=$xsites[$xlist2[$num]];
TRY:{
$s=IO::Socket::INET->new(PeerAddr=>$server,PeerPort=>80);
if($s){
print $s "GET \/$page HTTP/1.1\nHost: $server\nAccept: */*\nUser-Agent: Internet Explorer 6.0\nConnection: Keep-Alive\n\n";
return$s;
}
}
return 0;
}