> Может если кто скачал выложет на HTTP или на мыло скинет > это байду посмотреть?
смотри здесь :)
--------- readme.txt ---------
Параметры:
./htport.pl [-h (help)] [-p (локальный порт)] [-f (файл с прокси|proxy.txt)]
Файл proxy.txt задается в формате:
proxy_ip0:proxy_port0
proxy_ip1:proxy_port1
.....
proxy_ip[n]:proxy_port[n]
В следудующей версии, для повышения уровня анонимности будет сделана мутация списка прокси,
начиная с первого:).
Ошибки:).
Исправлена ошибка возникающая если в списке только 1 прокси:).
---
--------- end of readme.txt ---------
--------- htport-1.0.pl ---------
#!/usr/bin/perl
use strict;
use IO::Socket;
use IO::Select;
use vars qw/$opt_f $opt_h $opt_p/;
use Getopt::Std;
getopts('hf:p:');
if (defined ($opt_h)) {
print "./htport.pl [-f proxy_list_file] [-p local_port] [-h (help)]\n\n";
exit (0)
}
my $proxy_file = $opt_f ? $opt_f : 'proxy.txt';
my $local_port = $opt_p ? $opt_p : 8080;
my $local_ip = '127.0.0.1';
my $non_block = 1;
my $r_read;
my $s_read;
my $sock;
my $sock2;
my $sck;
my $buffer = '';
my @aproxy = ();
my @pproxy = ();
my $proxy_ip;
my $proxy_port;
my $max_buffer = 20000;
my $i;
my $local_socket = new IO::Socket::INET (LocalHost => $local_ip, LocalPort => $local_port,
Proto => 'tcp', Listen => 10, Reuse => 1) or die $!;
$SIG{'PIPE'} = 'IGNORE';
$SIG{'CHLD'} = sub {
wait ();
};
open FR, $proxy_file|die "Not open $proxy_file!\n";
while ($buffer = <FR>) {
chomp $buffer;
if (length ($buffer) > 1) {
($proxy_ip, $proxy_port) = split (':', $buffer);
push @aproxy, $proxy_ip;
push @pproxy, $proxy_port;
}
}
close FR;
my $proxy_ip = $aproxy [0];
my $proxy_port = $pproxy [0];
while (1) {
$sock = $local_socket->accept ();
if (fork () > 0) {
close ($sock);
} else {
$sock2 = new IO::Socket::INET (PeerHost => $proxy_ip, PeerPort => $proxy_port,
Proto => 'tcp') or die $!;
if ($#aproxy >= 1) {
for ($i = 1;$i <= $#aproxy;$i++ ) {
$sock2->send ("CONNECT $aproxy[$i]:$pproxy[$i] HTTP/1.0\n\n");
$sock2->recv ($buffer, $max_buffer);
# print "Hop$i:proxy:$aproxy[$i]:port:$pproxy[$i]:", $buffer;
}
}
$s_read = new IO::Select;
$s_read->add ($sock2);
$s_read->add ($sock);
while (1) {
($r_read, undef) = IO::Select->select ($s_read, undef, undef);
foreach $sck (@$r_read) {
if ($sck == $sock) {
$sock->recv ($buffer, $max_buffer);
if (length($buffer) < 1) {
close ($sock);
close ($sock2);
exit (0);
}
$sock2->send ($buffer);
} elsif ($sck == $sock2) {
$sock2->recv ($buffer, $max_buffer);
if (length($buffer) < 1) {
close ($sock);
close ($sock2);
exit (0);
}
$sock->send ($buffer);
}
}
}
exit 0;
}
}
Нашли ссылку:
ftp://ftp.dsu.dp.ua/pub/misc/htport-1.0.tar.gz :)
Работает через цепочку прокси без проблем, написан на перле, по идее должен
работать под всеми платформами. Проверили под линуксом - работает:)
Скрипт длиной 95 строк:)
> Может если кто скачал выложет на HTTP или на мыло скинет > это байду посмотреть?
смотри здесь :)
--------- readme.txt ---------
Параметры:
./htport.pl [-h (help)] [-p (локальный порт)] [-f (файл с прокси|proxy.txt)]
Файл proxy.txt задается в формате:
proxy_ip0:proxy_port0
proxy_ip1:proxy_port1
.....
proxy_ip[n]:proxy_port[n]
В следудующей версии, для повышения уровня анонимности будет сделана мутация списка прокси,
начиная с первого:).
Ошибки:).
Исправлена ошибка возникающая если в списке только 1 прокси:).
---
--------- end of readme.txt ---------
--------- htport-1.0.pl ---------
#!/usr/bin/perl
use strict;
use IO::Socket;
use IO::Select;
use vars qw/$opt_f $opt_h $opt_p/;
use Getopt::Std;
getopts('hf:p:');
if (defined ($opt_h)) {
print "./htport.pl [-f proxy_list_file] [-p local_port] [-h (help)]\n\n";
exit (0)
}
my $proxy_file = $opt_f ? $opt_f : 'proxy.txt';
my $local_port = $opt_p ? $opt_p : 8080;
my $local_ip = '127.0.0.1';
my $non_block = 1;
my $r_read;
my $s_read;
my $sock;
my $sock2;
my $sck;
my $buffer = '';
my @aproxy = ();
my @pproxy = ();
my $proxy_ip;
my $proxy_port;
my $max_buffer = 20000;
my $i;
my $local_socket = new IO::Socket::INET (LocalHost => $local_ip, LocalPort => $local_port,
Proto => 'tcp', Listen => 10, Reuse => 1) or die $!;
$SIG{'PIPE'} = 'IGNORE';
$SIG{'CHLD'} = sub {
wait ();
};
open FR, $proxy_file|die "Not open $proxy_file!\n";
while ($buffer = <FR>) {
chomp $buffer;
if (length ($buffer) > 1) {
($proxy_ip, $proxy_port) = split (':', $buffer);
push @aproxy, $proxy_ip;
push @pproxy, $proxy_port;
}
}
close FR;
my $proxy_ip = $aproxy [0];
my $proxy_port = $pproxy [0];
while (1) {
$sock = $local_socket->accept ();
if (fork () > 0) {
close ($sock);
} else {
$sock2 = new IO::Socket::INET (PeerHost => $proxy_ip, PeerPort => $proxy_port,
Proto => 'tcp') or die $!;
if ($#aproxy >= 1) {
for ($i = 1;$i <= $#aproxy;$i++ ) {
$sock2->send ("CONNECT $aproxy[$i]:$pproxy[$i] HTTP/1.0\n\n");
$sock2->recv ($buffer, $max_buffer);
# print "Hop$i:proxy:$aproxy[$i]:port:$pproxy[$i]:", $buffer;
}
}
$s_read = new IO::Select;
$s_read->add ($sock2);
$s_read->add ($sock);
while (1) {
($r_read, undef) = IO::Select->select ($s_read, undef, undef);
foreach $sck (@$r_read) {
if ($sck == $sock) {
$sock->recv ($buffer, $max_buffer);
if (length($buffer) < 1) {
close ($sock);
close ($sock2);
exit (0);
}
$sock2->send ($buffer);
} elsif ($sck == $sock2) {
$sock2->recv ($buffer, $max_buffer);
if (length($buffer) < 1) {
close ($sock);
close ($sock2);
exit (0);
}
$sock->send ($buffer);
}
}
}
exit 0;
}
}