|
Познавший АНТИЧАТ
Регистрация: 27.04.2007
Сообщений: 1,044
Провел на форуме: 3660186
Репутация:
905
|
|
ntldr, если еще актуально, то вот
PHP код:
<?php
$check_url = 'http://whatismyipaddress.com/';
$check_port = 80;
$check_host = str_replace (array ('http://', '/'), '', $check_url);
$check_hostent = inet_pton (gethostbyname ($check_host));
function send_query ($sock, $url) {
global $check_host;
global $check_url;
$query = "GET $url HTTP/1.1\r\n"
. "Host: $check_host\r\n"
. "Referer: $check_url\r\n"
. "Accept: *//**\r\n"
. "User-Agent: Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.1.1) Gecko/20090716 Ubuntu/9.04 (jaunty) Shiretoko/3.5.1\r\n"
. "Connection: close\r\n\r\n";
$sended = fwrite ($sock, $query);
$resp = '';
while ($buf = fread ($sock, 1024))
$resp .= $buf;
return $resp;
}
function socks4 ($proxy_host, $proxy_port, $timeout) {
global $check_port;
global $check_hostent;
$sock = fsockopen ($proxy_host, $proxy_port, $errno, $errstr, $timeout);
if (!$sock)
return array ('code' => -1, 'message' => "Connection error: [$errno] $errstr\n");
$sk4_conn = "\x04" // Socks version
. "\x01" // Connect
. pack ('n', $check_port) // Port
. $check_hostent // Remote address
. "\x00";
fwrite ($sock, $sk4_conn);
$resp = unpack ('C*', fread ($sock, 8));
if (!isset ($resp))
return array ('code' => -3, 'message' => 'Empty response');
if (count ($resp) < 8)
return array ('code' => -3, 'message' => 'Too short response from proxy');
if ($resp[1] != 0 && $resp[1] != 4)
return array ('code' => -2, 'message' => 'Not Socks4 proxy');
if ($resp[2] != 0x5a)
return array ('code' => -3, 'message' => 'Request rejected');
unset ($resp);
$resp = send_query ($sock, '/');
if (!isset ($resp))
return array ('code' => -6, 'message' => 'No response for query');
//my $ret = parse_content ($resp);
fclose ($sock);
return array ('code' => 0, 'message' => $resp);
}
function socks5 ($proxy_host, $proxy_port, $timeout) {
global $check_port;
global $check_hostent;
$sock = fsockopen ($proxy_host, $proxy_port, $errno, $errstr, $timeout);
if (!$sock)
return array ('code' => -1, 'message' => "Connection error: [$errno] $errstr\n");
$sk5_conn0 = "\x05" // Socks version
. "\x02" // Count of client authentication methods
. "\x00" // Method[0] = 0 No authentication
. "\x02"; // Method[1] = 2 Username/password
/*$sk5_conn0 = "\x05" // Socks version
. "\x01" // Count of client authentication methods
. "\x00"; // Method[0] = 0 No authentication*/
$sk5_conn1 = "\x05" // Socks version
. "\x01" // Connect
. "\x00" // Reserved, should = 0x00
. "\x01" // Address type, 1 - IPv4
. $check_hostent // Remote address
. pack ('n', $check_port); // Port
fwrite ($sock, $sk5_conn0);
$resp = unpack ('C*', fread ($sock, 2));
if (!isset ($resp))
return array ('code' => '-2', 'message' => 'Empty response');
if (count ($resp) < 2)
return array ('code' => -4, 'message' => 'Too short first response from server');
if ($resp[1] != 5)
return array ('code' => -2, 'message' => 'Not Socks5 proxy');
fwrite ($sock, $sk5_conn1);
$resp = unpack ('C*', fread ($sock, 10));
if (!isset ($resp) or count ($resp) == 0)
return array ('code' => -4, 'message' => 'Empty response');
if (count ($resp) < 10)
return array ('code' => -6, 'message' => 'Too short second response from proxy');
if ($resp[2] != 0)
return array ('code' => -5, 'message' => 'Connection rejected');
if ($resp[5] == 0 && $resp[6] == 0 && $resp[7] == 0 && $resp[8])
return array ('code' => -6, 'message' => 'SOCKS5 error');
unset ($resp);
$resp = send_query ($sock, '/');
if (!isset ($resp))
return array ('code' => -8, 'message' => 'No response for query');
//$ret = parse_content ($resp);
fclose ($sock);
return array ('code' => 0, 'message' => $resp);
}
//$proxy = '96.237.228.5:50549'; // socks4
$proxy = '202.102.72.38:1080';
list ($host, $port) = explode (':', $proxy);
echo $proxy, "\n";
$res = socks5 ($host, $port, 30);
echo "Result\n";
print_r ($res);
?>
|