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

  #101  
Старый 01.04.2009, 20:19
Аватар для HIVER
HIVER
Познающий
Регистрация: 28.10.2008
Сообщений: 43
Провел на форуме:
117557

Репутация: 125
По умолчанию

Чего-то в нем нехватало, на мой взгляд, добавил нормальные цепочки и ротатор с файла

Серверная часть.
Код:
<?php

//$secret = 'secret';

if (isset($_POST["transfer"]) && $_POST["transfer"] != "")
	{
	if(isset($secret) && ($_POST['secret'] != $secret))exit;
	$transfer_hosts = explode("::", base64_decode($_POST["transfer"]));
	$next_host = array_shift($transfer_hosts);
	$postfields = array(
						"query" => $_POST['query'],
						"host" => $_POST['host'],
						"secret" => $_POST['secret']
						);
	if ($transfer_hosts[0] != "") $postfields["transfer"] = base64_encode(implode("::", $transfer_hosts));
	$ch = curl_init($next_host);
	curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
	curl_setopt($ch, CURLOPT_POST, 1);
	curl_setopt($ch, CURLOPT_POSTFIELDS, $postfields);
	curl_setopt($ch, CURLOPT_HEADER, 0);
	$result = curl_exec($ch);
	curl_close($ch);
	echo $result;
	} else {
	if(isset($_POST['query']) && isset($_POST['host']))
		{
		if(isset($secret) && ($_POST['secret'] != $secret))exit;
		header('Content-type: application/octet-stream');
		@set_time_limit(0);
		$query = base64_decode(str_replace(" ", "+", $_POST['query']));
		list($host, $port) = explode(':', base64_decode(str_replace(" ", "+", $_POST['host'])));
		if(!$port)$port = 80;
		$ip = gethostbyname($host);
		if($fp = @fsockopen($ip, $port, $errno, $errstr, 20))
			{
			fwrite($fp, $query);        
			while(!feof($fp))
				{
				$answer = fread($fp, 1024);
				echo $answer;
				}
			fclose($fp);
			}
		exit;
		}
	}
?>

Локальная часть с генерацией рандомно распределенной цепочки:
Код:
use HTTP::Daemon;
use MIME::Base64 ();
use Getopt::Long;
use POSIX ":sys_wait_h";
use strict;

my $user_agent = 'Mozilla/5.0 (X11; U; Linux i686; ru; rv:1.9.0.4) Gecko/2008102920 Firefox/3.0.4';

my $errheader = "HTTP/1.1 200 OK\x0D\x0AContent-Type: text/plain\x0D\x0A\x0D\x0A";
my $errmsg1 = $errheader . 'Could not connect to server';
my $errmsg2 = $errheader . 'Could not connect to pproxy';

my ($pproxyhost, $pproxyport, $pproxyurl);
my ($tunnelhost, $tunnelport);
my ($pproxy, $pproxyfile, @pproxylist, $bindport, $tunnel, $secret);
my ($destaddr, $destport, $desturl);

#Вывод справки
Usage() if @ARGV==0;

#Задание опций
GetOptions(
         "px=s"		=> \$pproxy,
         "bp=s" 	=> \$bindport,
         "tpx=s"	=> \$tunnel,
         "pwd=s"	=> \$secret,
		 "pf=s"		=> \$pproxyfile
     );
die "need pproxy.php url or pproxy.php url filelist" unless $pproxy || $pproxyfile;


#Получение параметров
$pproxyfile =~ /(.+)/;

if ($pproxyfile) 
	{
	open(file, "proxies.txt");
	@pproxylist = <file>;
	} else {
	$pproxy =~ /http:\/\/([\w\.\-]+)(:\d*)?\/(.+)/;
	$pproxyhost = $1; $pproxyport = substr($2, 1); $pproxyurl = '/' . $3;
	}

defined($pproxyport) || ($pproxyport = 80);
defined($bindport) || ($bindport = 8008);

if(defined($tunnel))
{
	$tunnel =~ /http:\/\/([\w\.\-]+):(\d*)?/;
	$tunnelhost = $1; $tunnelport = $2;

	$destaddr = $tunnelhost;
	$destport = $tunnelport;
	$desturl = $pproxy;

	print "# tunnelhost = $tunnelhost\n";
	print "# tunnelport = $tunnelport\n";
}else{
	if (!$pproxyfile)
		{
		$destaddr = $pproxyhost;
		$desturl = $pproxyurl;
		}
		$destport = $pproxyport;
}

if (!$pproxyfile)
	{
	print "# pproxyhost = $pproxyhost\n";
	print "# pproxyport = $pproxyport\n";
	print "# pproxyurl = $pproxyurl\n";
	} else {
	print "# pproxyfile = $pproxyfile\n";
	}
	
print "# bindport = $bindport\n\n";

$|=1;
my %children;
my $slave;

#Прием подключений
my $master = HTTP::Daemon->new(	LocalPort => $bindport,
				LocalAddr => 'localhost', 
				Reuse=>1)
|| die "Can't start server ($@)";
&MainProc($slave) while $slave = $master->accept;

sub MainProc
{
		my $conn = shift;

		#Прием HTTP-запроса
		my $request = $conn->get_request();
		
		#Ответвление процесса(потока)
		my $pid = fork();
		unless(defined($pid))
		{
			print "# Erorr couldn't fork\n";
			close $conn;
			return;
		}

		if($pid)
		{
			close $conn;
			$children{$pid}++;
			foreach(keys %children )
			{
				my $kid = waitpid($_, &WNOHANG);
				delete $children{$_} if($kid == -1 || $kid == $_);
			}
			return;
		}

		#Преобразование HTTP заголовка
		$request -> remove_header('Proxy-Connection');
		$request -> remove_header('Keep-Alive');
		$request -> header(Connection=>'close');
		my $host = $request -> header('Host');
		my $http = $request -> as_string();
		my $head_end = index ($http, "\x0A\x0A") + 2;
		my $head = substr ($http, 0, $head_end);
		my $post = substr ($http, $head_end);
		$head =~ s/\x0A/\x0D\x0A/g;
		$http = $head . $post;
		$http =~ s/http:\/\/$host//;
		my $time_start = time;
		
		#Отправка запроса прокси и прием результата
		my $lastaddr = SendToPProxy(	MIME::Base64::encode($host),
				MIME::Base64::encode($http),
				$conn
					);

		my $time_end = time;
		
		#Лог
		print &TranslateTimeHour($time_end), "   ", $host, " <- ", $lastaddr,
			" (", &TranslateTime($time_end - $time_start),
			")\n";

		close $conn;
		exit;
}

sub SendToPProxy
{
	my $dest_host = shift;
	my $query_content = shift;
	my $clientsock = shift;
	my (@destaddr, $desturl, $proxytransfer, $desthost);
	
	if ($pproxyfile)
		{
		
		my @pproxylist_shuffled = @pproxylist;
		shuffle(\@pproxylist_shuffled);
		chomp(@pproxylist_shuffled);
		my $desthost = shift(@pproxylist_shuffled);
		my @destaddr = split("//", $desthost);
		my @destaddrhost = (@destaddr[0] != "http:") ? split("/", @destaddr[0]) : split("/", @destaddr[1]);
		$destaddr = shift(@destaddrhost);
		$proxytransfer = MIME::Base64::encode(join("::", @pproxylist_shuffled));
		$desturl = $desthost;
		}
		
	my $proxysock = IO::Socket::INET->new(Proto=>'tcp',PeerAddr=>$destaddr,PeerPort=>$destport);

	unless($proxysock)
		{
		syswrite($clientsock, $errmsg2, length($errmsg2));
		return; 
		}
	
	my $post_query;
	#print "[!] <= $destaddr\n";
	$post_query = 'secret=' . $secret . '&' if defined($secret);
	$post_query .= 'transfer=' . $proxytransfer . '&' if defined($pproxyfile);
	$post_query .= 'host=' . $dest_host . '&query=' . $query_content;
	
	my $postlen = length($post_query);

	my $request = "POST $desturl HTTP/1.0\x0D\x0A".
			"Host: $pproxyhost:$pproxyport\x0D\x0A".
			"Accept: */*\x0D\x0A".
			"Content-Type: application/x-www-form-urlencoded\x0D\x0A".
			"Content-Length: $postlen\x0D\x0A".
			"User-Agent: $user_agent\x0D\x0A".
			"Connection: close\x0D\x0A\x0D\x0A" . $post_query;
	
	syswrite($proxysock, $request, length($request));
	my ($result, $buffer, $response);
	my $contentstart = -1;
	my $count = 0;
	while(1)
	{
		$result = sysread($proxysock, $buffer, 1024);
		last if !defined($result) || !$result;

		if($contentstart == -1)
		{
			$response .= $buffer;
			last if length($response)>65535;
			$contentstart = index($response,"\x0D\x0A\x0D\x0A");
			next if $contentstart == -1;
			$buffer = substr($response, $contentstart+4);
		}
		$count += length($buffer);
		syswrite($clientsock, $buffer, length($buffer));
	}
	syswrite($clientsock, $errmsg1, length($errmsg1)) if $count == 0;
	close $proxysock;
	return $destaddr;
}

sub TranslateTime
{
	my ($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst) = localtime(shift);
	return sprintf "%02u:%02u", $min, $sec;
}

sub TranslateTimeHour
{
	my ($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst) = localtime(shift);
	return sprintf "%02u:%02u:%02u", $hour, $min, $sec;
}

sub shuffle
	{
    my $deck = shift;    # $deck — ссылка на массив
    my $i = @$deck;
    while (--$i) {
        my $j = int rand ($i+1);
        @$deck[$i,$j] = @$deck[$j,$i];
        }
	}

sub Usage
{
	print "Usage: $0 -px proxy_url [-bp bindport] [-tpx tunnel_proxy] [-pwd secret] [-pf proxy filelist]\n";
	print "Example: $0 -px http://site.com/proxy/proxy.php -bp 8080\n";
	print "         $0 -px http://site.com/proxy/proxy.php -pwd pproxypass\n";
	print "         $0 -px http://site.com/proxy/proxy.php -tpx http://localhost:8118\n";
	print "         $0 -pf proxies.txt -bp 8080 -pwd pproxypass\n";
	print "\nDefault bind port - 8008\n";
	exit;
}
Либо с рандомной ротацией:
Код:
use HTTP::Daemon;
use MIME::Base64 ();
use Getopt::Long;
use POSIX ":sys_wait_h";
use strict;

my $user_agent = 'Mozilla/5.0 (X11; U; Linux i686; ru; rv:1.9.0.4) Gecko/2008102920 Firefox/3.0.4';

my $errheader = "HTTP/1.1 200 OK\x0D\x0AContent-Type: text/plain\x0D\x0A\x0D\x0A";
my $errmsg1 = $errheader . 'Could not connect to server';
my $errmsg2 = $errheader . 'Could not connect to pproxy';

my ($pproxyhost, $pproxyport, $pproxyurl);
my ($tunnelhost, $tunnelport);
my ($pproxy, $pproxyfile, @pproxylist, $bindport, $tunnel, $secret);
my ($destaddr, $destport, $desturl);

#Вывод справки
Usage() if @ARGV==0;

#Задание опций
GetOptions(
         "px=s"		=> \$pproxy,
         "bp=s" 	=> \$bindport,
         "tpx=s"	=> \$tunnel,
         "pwd=s"	=> \$secret,
		 "pf=s"		=> \$pproxyfile
     );
die "need pproxy.php url or pproxy.php url filelist" unless $pproxy || $pproxyfile;


#Получение параметров
$pproxyfile =~ /(.+)/;

if ($pproxyfile) 
	{
	open(file, "proxies.txt");
	@pproxylist = <file>;
	} else {
	$pproxy =~ /http:\/\/([\w\.\-]+)(:\d*)?\/(.+)/;
	$pproxyhost = $1; $pproxyport = substr($2, 1); $pproxyurl = '/' . $3;
	}

defined($pproxyport) || ($pproxyport = 80);
defined($bindport) || ($bindport = 8008);

if(defined($tunnel))
{
	$tunnel =~ /http:\/\/([\w\.\-]+):(\d*)?/;
	$tunnelhost = $1; $tunnelport = $2;

	$destaddr = $tunnelhost;
	$destport = $tunnelport;
	$desturl = $pproxy;

	print "# tunnelhost = $tunnelhost\n";
	print "# tunnelport = $tunnelport\n";
}else{
	if (!$pproxyfile)
		{
		$destaddr = $pproxyhost;
		$desturl = $pproxyurl;
		}
		$destport = $pproxyport;
}

if (!$pproxyfile)
	{
	print "# pproxyhost = $pproxyhost\n";
	print "# pproxyport = $pproxyport\n";
	print "# pproxyurl = $pproxyurl\n";
	} else {
	print "# pproxyfile = $pproxyfile\n";
	}
	
print "# bindport = $bindport\n\n";

$|=1;
my %children;
my $slave;

#Прием подключений
my $master = HTTP::Daemon->new(	LocalPort => $bindport,
				LocalAddr => 'localhost', 
				Reuse=>1)
|| die "Can't start server ($@)";
&MainProc($slave) while $slave = $master->accept;

sub MainProc
{
		my $conn = shift;

		#Прием HTTP-запроса
		my $request = $conn->get_request();
		
		#Ответвление процесса(потока)
		my $pid = fork();
		unless(defined($pid))
		{
			print "# Erorr couldn't fork\n";
			close $conn;
			return;
		}

		if($pid)
		{
			close $conn;
			$children{$pid}++;
			foreach(keys %children )
			{
				my $kid = waitpid($_, &WNOHANG);
				delete $children{$_} if($kid == -1 || $kid == $_);
			}
			return;
		}

		#Преобразование HTTP заголовка
		$request -> remove_header('Proxy-Connection');
		$request -> remove_header('Keep-Alive');
		$request -> header(Connection=>'close');
		my $host = $request -> header('Host');
		my $http = $request -> as_string();
		my $head_end = index ($http, "\x0A\x0A") + 2;
		my $head = substr ($http, 0, $head_end);
		my $post = substr ($http, $head_end);
		$head =~ s/\x0A/\x0D\x0A/g;
		$http = $head . $post;
		$http =~ s/http:\/\/$host//;
		my $time_start = time;
		
		#Отправка запроса прокси и прием результата
		my $lastaddr = SendToPProxy(	MIME::Base64::encode($host),
				MIME::Base64::encode($http),
				$conn
					);

		my $time_end = time;
		
		#Лог
		print &TranslateTimeHour($time_end), "   ", $host, " <- ", $lastaddr,
			" (", &TranslateTime($time_end - $time_start),
			")\n";

		close $conn;
		exit;
}

sub SendToPProxy
{
	my $dest_host = shift;
	my $query_content = shift;
	my $clientsock = shift;
	my (@destaddr, $desturl, $proxytransfer, $desthost);
	
	if ($pproxyfile)
		{
		
		my @pproxylist_shuffled = @pproxylist;
		shuffle(\@pproxylist_shuffled);
		chomp(@pproxylist_shuffled);
		my $desthost = shift(@pproxylist_shuffled);
		my @destaddr = split("//", $desthost);
		my @destaddrhost = (@destaddr[0] != "http:") ? split("/", @destaddr[0]) : split("/", @destaddr[1]);
		$destaddr = shift(@destaddrhost);
		$proxytransfer = MIME::Base64::encode(join("::", @pproxylist_shuffled));
		$desturl = $desthost;
		}
		
	my $proxysock = IO::Socket::INET->new(Proto=>'tcp',PeerAddr=>$destaddr,PeerPort=>$destport);

	unless($proxysock)
		{
		syswrite($clientsock, $errmsg2, length($errmsg2));
		return; 
		}
	
	my $post_query;
	#print "[!] <= $destaddr\n";
	$post_query = 'secret=' . $secret . '&' if defined($secret);
	#$post_query .= 'transfer=' . $proxytransfer . '&' if defined($pproxyfile);
	$post_query .= 'host=' . $dest_host . '&query=' . $query_content;
	
	my $postlen = length($post_query);

	my $request = "POST $desturl HTTP/1.0\x0D\x0A".
			"Host: $pproxyhost:$pproxyport\x0D\x0A".
			"Accept: */*\x0D\x0A".
			"Content-Type: application/x-www-form-urlencoded\x0D\x0A".
			"Content-Length: $postlen\x0D\x0A".
			"User-Agent: $user_agent\x0D\x0A".
			"Connection: close\x0D\x0A\x0D\x0A" . $post_query;
	
	syswrite($proxysock, $request, length($request));
	my ($result, $buffer, $response);
	my $contentstart = -1;
	my $count = 0;
	while(1)
	{
		$result = sysread($proxysock, $buffer, 1024);
		last if !defined($result) || !$result;

		if($contentstart == -1)
		{
			$response .= $buffer;
			last if length($response)>65535;
			$contentstart = index($response,"\x0D\x0A\x0D\x0A");
			next if $contentstart == -1;
			$buffer = substr($response, $contentstart+4);
		}
		$count += length($buffer);
		syswrite($clientsock, $buffer, length($buffer));
	}
	syswrite($clientsock, $errmsg1, length($errmsg1)) if $count == 0;
	close $proxysock;
	return $destaddr;
}

sub TranslateTime
{
	my ($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst) = localtime(shift);
	return sprintf "%02u:%02u", $min, $sec;
}

sub TranslateTimeHour
{
	my ($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst) = localtime(shift);
	return sprintf "%02u:%02u:%02u", $hour, $min, $sec;
}

sub shuffle
	{
    my $deck = shift;    # $deck — ссылка на массив
    my $i = @$deck;
    while (--$i) {
        my $j = int rand ($i+1);
        @$deck[$i,$j] = @$deck[$j,$i];
        }
	}

sub Usage
{
	print "Usage: $0 -px proxy_url [-bp bindport] [-tpx tunnel_proxy] [-pwd secret] [-pf proxy filelist]\n";
	print "Example: $0 -px http://site.com/proxy/proxy.php -bp 8080\n";
	print "         $0 -px http://site.com/proxy/proxy.php -pwd pproxypass\n";
	print "         $0 -px http://site.com/proxy/proxy.php -tpx http://localhost:8118\n";
	print "         $0 -pf proxies.txt -bp 8080 -pwd pproxypass\n";
	print "\nDefault bind port - 8008\n";
	exit;
}
 
Ответить с цитированием

  #102  
Старый 02.04.2009, 13:15
Аватар для Phoenixy
Phoenixy
Участник форума
Регистрация: 28.03.2009
Сообщений: 163
Провел на форуме:
948709

Репутация: 43
Отправить сообщение для Phoenixy с помощью ICQ
По умолчанию

а вот например когда я пользуюсь wi-fi и ммне нужно другой ип поставить как сделать
 
Ответить с цитированием

  #103  
Старый 05.04.2009, 13:51
Аватар для djekxa
djekxa
Участник форума
Регистрация: 20.11.2008
Сообщений: 120
Провел на форуме:
1254550

Репутация: 87
Отправить сообщение для djekxa с помощью ICQ
По умолчанию

юзать виртуалку либо дед
 
Ответить с цитированием

  #104  
Старый 08.04.2009, 21:51
Аватар для bons
bons
Участник форума
Регистрация: 20.12.2007
Сообщений: 295
Провел на форуме:
1777055

Репутация: 347
По умолчанию

по поводу сокс-версии, думаю без помощи я не справлюсь. Недоработанная версия здесь: http://forum.antichat.ru/showthread.php?p=1214063
Большая просьба всем кто имеет знания в этой области посмотреть и исправить ошибки
 
Ответить с цитированием

  #105  
Старый 26.05.2009, 16:45
Аватар для InFlame
InFlame
Участник форума
Регистрация: 27.10.2008
Сообщений: 215
Провел на форуме:
810079

Репутация: 90
По умолчанию

C Socks-версией всё понятно, а поддержка HTTPS когда-нибудь будет?
 
Ответить с цитированием

  #106  
Старый 01.06.2009, 16:48
Аватар для Ty3uK
Ty3uK
Banned
Регистрация: 01.02.2009
Сообщений: 48
Провел на форуме:
554628

Репутация: 76
По умолчанию

Написал пару строчек кода к клиенту... Теперь работает строка для юзверь агента...

plocal.pl
Код:
use HTTP::Daemon;
use MIME::Base64 ();
use Getopt::Long;
use POSIX ":sys_wait_h";
use strict;

my $user_agent = 'Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.1b4) Gecko/20090423 Firefox/3.5b4';

my $errheader = "HTTP/1.1 200 OK\x0D\x0AContent-Type: text/plain\x0D\x0A\x0D\x0A";
my $errmsg1 = $errheader . 'Could not connect to server';
my $errmsg2 = $errheader . 'Could not connect to pproxy';

my ($pproxyhost, $pproxyport, $pproxyurl);
my ($tunnelhost, $tunnelport);
my ($pproxy, $bindport, $tunnel, $secret);
my ($destaddr, $destport, $desturl);

#Вывод справки
Usage() if @ARGV==0;

#Задание опций
GetOptions(
         "px=s"		=> \$pproxy,
         "bp=s" 	=> \$bindport,
         "tpx=s"	=> \$tunnel,
         "pwd=s"	=> \$secret
     );
die "need pproxy.php url" unless $pproxy;


#Получение параметров
$pproxy =~ /http:\/\/([\w\.\-]+)(:\d*)?\/(.+)/;
$pproxyhost = $1; $pproxyport = substr($2, 1); $pproxyurl = '/' . $3;

defined($pproxyport) || ($pproxyport = 80);
defined($bindport) || ($bindport = 8008);

if(defined($tunnel))
{
	$tunnel =~ /http:\/\/([\w\.\-]+):(\d*)?/;
	$tunnelhost = $1; $tunnelport = $2;

	$destaddr = $tunnelhost;
	$destport = $tunnelport;
	$desturl = $pproxy;

	print "# tunnelhost = $tunnelhost\n";
	print "# tunnelport = $tunnelport\n";
}else{
	$destaddr = $pproxyhost;
	$destport = $pproxyport;
	$desturl = $pproxyurl;
}

print "# pproxyhost = $pproxyhost\n";
print "# pproxyport = $pproxyport\n";
print "# pproxyurl = $pproxyurl\n";
print "# bindport = $bindport\n\n";

$|=1;
my %children;
my $slave;

#Прием подключений
my $master = HTTP::Daemon->new(	LocalPort => $bindport,
				LocalAddr => 'localhost', 
				Reuse=>1)
|| die "Can't start server ($@)";
&MainProc($slave) while $slave = $master->accept;

sub MainProc
{
		my $conn = shift;

		#Прием HTTP-запроса
		my $request = $conn->get_request();
		
		#Ответвление процесса(потока)
		my $pid = fork();
		unless(defined($pid))
		{
			print "# Erorr couldn't fork\n";
			close $conn;
			return;
		}

		if($pid)
		{
			close $conn;
			$children{$pid}++;
			foreach(keys %children )
			{
				my $kid = waitpid($_, &WNOHANG);
				delete $children{$_} if($kid == -1 || $kid == $_);
			}
			return;
		}

		#Преобразование HTTP заголовка
		$request -> remove_header('Proxy-Connection');
		$request -> remove_header('Keep-Alive');
		$request -> header(Connection=>'close');
		$request -> remove_header('User-Agent');
		$request -> header('User-Agent'=>$user_agent);
		my $host = $request -> header('Host');
		my $http = $request -> as_string();
		my $head_end = index ($http, "\x0A\x0A") + 2;
		my $head = substr ($http, 0, $head_end);
		my $post = substr ($http, $head_end);
		$head =~ s/\x0A/\x0D\x0A/g;
		$http = $head . $post;
		$http =~ s/http:\/\/$host//;
		my $time_start = time;
		
		#Отправка запроса прокси и прием результата
		SendToPProxy(	MIME::Base64::encode($host),
				MIME::Base64::encode($http),
				$conn
					);

		my $time_end = time;
		
		#Лог
		print &TranslateTimeHour($time_end), "   ", $host,
			" (", &TranslateTime($time_end - $time_start),
			")\n";

		close $conn;
		exit;
}

sub SendToPProxy
{
	my $dest_host = shift;
	my $query_content = shift;
	my $clientsock = shift;
	
	my $proxysock = IO::Socket::INET->new(Proto=>'tcp',PeerAddr=>$destaddr,PeerPort=>$destport);
	unless($proxysock)
	{
		syswrite($clientsock, $errmsg2, length($errmsg2));
		return; 
	}
	
	my $post_query;
	$post_query = 'secret=' . $secret . '&' if defined($secret);
	$post_query .= 'host=' . $dest_host . '&query=' . $query_content;
	my $postlen = length($post_query);

	my $request = "POST $desturl HTTP/1.1\x0D\x0A".
			"Host: $pproxyhost:$pproxyport\x0D\x0A".
			"Accept: */*\x0D\x0A".
			"Content-Type: application/x-www-form-urlencoded\x0D\x0A".
			"Content-Length: $postlen\x0D\x0A".
			"User-Agent: $user_agent\x0D\x0A".
			"Connection: close\x0D\x0A\x0D\x0A" . $post_query;

	syswrite($proxysock, $request, length($request));
	my ($result, $buffer, $response);
	my $contentstart = -1;
	my $count = 0;
	while(1)
	{
		$result = sysread($proxysock, $buffer, 1024);
		last if !defined($result) || !$result;

		if($contentstart == -1)
		{
			$response .= $buffer;
			last if length($response)>65535;
			$contentstart = index($response,"\x0D\x0A\x0D\x0A");
			next if $contentstart == -1;
			$buffer = substr($response, $contentstart+4);
		}
		$count += length($buffer);
		syswrite($clientsock, $buffer, length($buffer));
	}
	syswrite($clientsock, $errmsg1, length($errmsg1)) if $count == 0;
	close $proxysock;
}

sub TranslateTime
{
	my ($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst) = localtime(shift);
	return sprintf "%02u:%02u", $min, $sec;
}

sub TranslateTimeHour
{
	my ($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst) = localtime(shift);
	return sprintf "%02u:%02u:%02u", $hour, $min, $sec;
}

sub Usage
{
	print "Usage: $0 -px proxy_url [-bp bindport] [-tpx tunnel_proxy] [-pwd secret]\n";
	print "Example: $0 -px http://site.com/proxy/proxy.php -bp 8080\n";
	print "         $0 -px http://site.com/proxy/proxy.php -pwd pproxypass\n";
	print "         $0 -px http://site.com/proxy/proxy.php -tpx http://localhost:8118\n";
	print "\nDefault bind port - 8008\n";
	exit;
}
Серверная часть не изменялась...

Последний раз редактировалось Ty3uK; 01.06.2009 в 16:50..
 
Ответить с цитированием

  #107  
Старый 02.06.2009, 12:41
Аватар для Woolf89
Woolf89
Познающий
Регистрация: 05.06.2008
Сообщений: 73
Провел на форуме:
217880

Репутация: 21
По умолчанию

Спасибо, то что нужно, как раз возникла необходимость.
 
Ответить с цитированием

  #108  
Старый 04.06.2009, 23:54
Аватар для Ty3uK
Ty3uK
Banned
Регистрация: 01.02.2009
Сообщений: 48
Провел на форуме:
554628

Репутация: 76
По умолчанию

Нету за что! Надеюсь что ТС не обидится если я немного попробую переписать клиента под свои нужды))
 
Ответить с цитированием

  #109  
Старый 13.06.2009, 22:14
Аватар для HIVER
HIVER
Познающий
Регистрация: 28.10.2008
Сообщений: 43
Провел на форуме:
117557

Репутация: 125
По умолчанию

Цитата:
Сообщение от InFlame  
C Socks-версией всё понятно, а поддержка HTTPS когда-нибудь будет?
Код:
<?php

$secret = 'pwd';

if (isset($_POST["transfer"]) && $_POST["transfer"] != "")
	{
	if(isset($secret) && ($_POST['secret'] != $secret))exit;
	$transfer_hosts = explode("::", base64_decode($_POST["transfer"]));
	$next_host = array_shift($transfer_hosts);
	$postfields = array(
						"query" => $_POST['query'],
						"host" => $_POST['host'],
						"secret" => $_POST['secret']
						);
	if ($transfer_hosts[0] != "") $postfields["transfer"] = base64_encode(implode("::", $transfer_hosts));
	$ch = curl_init($next_host);
	curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
	curl_setopt($ch, CURLOPT_POST, 1);
	curl_setopt($ch, CURLOPT_POSTFIELDS, $postfields);
	curl_setopt($ch, CURLOPT_HEADER, 1);
	$result = curl_exec($ch);
	curl_close($ch);
	echo $result;
	} else {
	if(isset($_POST['query']) && isset($_POST['host']))
		{
		if(isset($secret) && ($_POST['secret'] != $secret))exit;
		header('Content-type: application/octet-stream');
		@set_time_limit(0);
		$query = base64_decode(str_replace(" ", "+", $_POST['query']));
		list($host, $port) = explode(':', base64_decode(str_replace(" ", "+", $_POST['host'])));
		if(!$port) {if (eregi("https:", $host) && !$port) {$port = 443;} else {$port = 80;}}
		$ip = gethostbyname($host);
		if($fp = @fsockopen($ip, $port, $errno, $errstr, 20))
			{
			fwrite($fp, $query);        
			while(!feof($fp))
				{
				$answer = fread($fp, 1024);
				echo $answer;
				}
			fclose($fp);
			}
		exit;
		}
	}
?>
Изменения в строке
Код:
if (!$port) $port=80;
на
Код:
if(!$port) {if (eregi("https:", $host) && !$port) {$port = 443;} else {$port = 80;}}
и вуаля, https есть

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

  #110  
Старый 14.06.2009, 08:09
Аватар для HIVER
HIVER
Познающий
Регистрация: 28.10.2008
Сообщений: 43
Провел на форуме:
117557

Репутация: 125
По умолчанию

з.ы. пардон, в большом блоке очепятка с брекетами была, исправлено.

Последний раз редактировалось HIVER; 14.06.2009 в 08:13..
 
Ответить с цитированием
Ответ



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Books PHP FRAGNATIC PHP, PERL, MySQL, JavaScript 186 21.02.2010 02:41
Proxy FAQ foreva Чужие Статьи 12 04.01.2008 12:15
Что такое Php? PAPA212 Болталка 13 28.12.2007 20:44
Безопасность в Php, Часть Iii k00p3r Чужие Статьи 0 11.07.2005 19:02
Защищаем Php. Шаг за шагом. k00p3r Чужие Статьи 0 13.06.2005 11:31



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


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




ANTICHAT.XYZ