Proxy tester

Simple perl threaded proxy tester.

stáhnout snippet
zobrazení: SyntaxHighlighter | GeSHi | Holý text
#!/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/',
						  'http://www.samair.ru/proxy/proxy-01.htm',
						  'http://www.samair.ru/proxy/proxy-02.htm',
						  'http://www.samair.ru/proxy/proxy-03.htm',
						  'http://www.samair.ru/proxy/proxy-04.htm',
						  'http://www.samair.ru/proxy/proxy-05.htm',
						  'http://www.samair.ru/proxy/proxy-06.htm',
						  'http://www.samair.ru/proxy/proxy-07.htm',
						  'http://www.samair.ru/proxy/proxy-08.htm',
						  'http://www.samair.ru/proxy/proxy-09.htm',
						  'http://www.samair.ru/proxy/proxy-10.htm',
						  'http://www.samair.ru/proxy/proxy-11.htm',
						  'http://www.samair.ru/proxy/proxy-12.htm',
						  'http://www.samair.ru/proxy/proxy-13.htm',
						  'http://www.samair.ru/proxy/proxy-14.htm',
						  'http://www.samair.ru/proxy/proxy-15.htm',
						  'http://www.samair.ru/proxy/proxy-16.htm',
						  'http://www.samair.ru/proxy/proxy-17.htm',
						  'http://www.samair.ru/proxy/proxy-18.htm',
						  'http://www.samair.ru/proxy/proxy-19.htm',
						  'http://www.samair.ru/proxy/proxy-20.htm',
						  'http://www.samair.ru/proxy/proxy-21.htm',
						  'http://www.samair.ru/proxy/proxy-22.htm',
						  'http://www.samair.ru/proxy/proxy-23.htm',
						  'http://www.samair.ru/proxy/proxy-24.htm',
						  'http://www.samair.ru/proxy/proxy-25.htm',
						  'http://www.samair.ru/proxy/proxy-26.htm',
						  'http://www.samair.ru/proxy/proxy-27.htm',
						  'http://www.samair.ru/proxy/proxy-28.htm',
						  'http://www.samair.ru/proxy/proxy-29.htm',
						  'http://www.samair.ru/proxy/proxy-30.htm',
						  'http://proxylist.sakura.ne.jp/index.htm?pages=0',
						  'http://proxylist.sakura.ne.jp/index.htm?pages=1',
						  'http://proxylist.sakura.ne.jp/index.htm?pages=2',
						  'http://proxylist.sakura.ne.jp/index.htm?pages=3',
						  'http://proxylist.sakura.ne.jp/index.htm?pages=4',
						  'http://proxylist.sakura.ne.jp/index.htm?pages=5',
						  'http://proxylist.sakura.ne.jp/index.htm?pages=6',
						  'http://www.freeproxy.ru/download/lists/goodproxy.txt',
						  'http://www.proxy-list.net/anonymous-proxy-lists.shtml');

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

# uniq
my @uniq = keys %{{ map { $_ => 1 } @proxies }};
@proxies = @uniq;

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


Tagy:
perl 113 řádků | 2009-01-01 12:44:25 | air.kadlec@seznam.cz