Показать сообщение отдельно

  #14692  
Старый 15.02.2010, 11:23
krypt3r
Познавший АНТИЧАТ
Регистрация: 27.04.2007
Сообщений: 1,044
С нами: 10021597

Репутация: 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);
?>
 
Ответить с цитированием