Proxy.pl
1. January 2009
I přestože v dnešní době frčí spíš Tor, cgi proxyny nebo pro gurmány přímo placené SOCKy tak veřejné http proxyny mají imho stále své místo. Doba sice pokročila a najít opravdu anonymní proxynu (bez HTTP_X_FORWARDED_FOR a dalších kokotin) je jako hledat jehlu v kupce sena, nicméně na (legální) oblbnutí kdejakých ip limitů poslouží dobře i ty neanonymní.
Druhá věc je, že z toho co se povaluje na netu je funkční jedna proxyna ze sta. Stahovat na ověření polofunkční klikací tools by byla docela kravina tak jsem se jal uplatnit svoje 1337 perl skillz a ukuchtil si skriptík, který si seznamy nasosá sám a nadpřirozenou rychlostí (jako vette mezi Plzní a Prahou) je všechny prozkouší. Kdyby se někomu udělalo z mých brilantních konstrukcí nedejbože zle, může mi novoročně našálovat do komentářů, jak na nový rok tak…
#!/usr/bin/perl -w
use strict;
use warnings;
use threads;
use threads::shared;
use LWP::UserAgent;
# seznam stranek odkud stahnout proxyny, vytahne z nich vsechny, ktere jsou ve tvaru ip.ip.ip.ip:port
use constant SOURCES => (
'http://www.samair.ru/proxy/',
# '...',
);
use constant INFO => 'http://php5.banan.cz/'; # nejaky phpinfo() skript
use constant HOST => qr/13\.37\.13\.37/; # vase ipna
use constant POSITIVE => qr/phpinfo\(\)/; # co by se melo pri spravny odpovedi najit
use constant THREADS => 99; # u me sezere 0.5G pameti
use constant TIMEOUT => 10; # 10s timeout
our @proxies :shared;
# ------------------------------------------------------------
foreach my $proxylist (SOURCES) {
print "[+] Getting proxies ($proxylist) ... ";
my $content = LWP::UserAgent->new->get($proxylist)->content;
print "OK\n";
push(@proxies, $1) while ($content =~ /(\d+\.\d+\.\d+\.\d+:\d+)/mg);
}
print "[+] You have bees flying around your rectum\n";
threads->create(\&check) for(1..THREADS);
$_->join foreach threads->list();
print "[+] Done!\n";
# ------------------------------------------------------------
sub check {
my $proxy = pop(@proxies);
return if !$proxy;
my $id = '['.threads->tid()."]";
my $ua = LWP::UserAgent->new;
$ua->agent('Mozilla/5.0');
$ua->proxy('http', "http://$proxy/");
$ua->timeout(TIMEOUT);
my $response = $ua->get(INFO);
if (!$response->is_success) {
print "$id $proxy \t\t".$response->status_line."\n";
} else {
if($response->content =~ HOST && $response->content =~ POSITIVE) {
print "$id nonanonymous proxy found: $proxy\n";
system("echo $proxy >> proxies-ip");
} elsif($response->content =~ POSITIVE) {
print "$id elite proxy found: $proxy\n";
system("echo $proxy >> proxies-elite");
} else {
print "$id $proxy \t\tbad response\n";
}
}
check() if(@proxies);
}
Snad je to dostatečně intuitivní k pochopení. Trošku kompletnější verze se válí tady.

2 January, 2009 [2:31 pm]
aTo dekujeme! Uz mam par let rozepsanou tuhle blbinku v pythonu, ale nikdy jse se nedokopal k tomu to udelat funkcnejsi / pouzitelnejsi. Velke diky a GMO rajce do tve lednice.