socks соединение

Статус
В этой теме нельзя размещать новые ответы.

Redwind

Новичок
socks соединение

У меня появилась задача, подключится к socks5 и через него скачать страничку.

Я нашел здесь(на форуме) скрипт:

PHP:
<?php
       $server = "218.152.112.34";
       $port = 1080;
              $fs = fsockopen($server, $port, $errno, $errstr, 20);
       if (!$fs) {
       echo "$errstr ($errno)<br>\n";
       } else {
       fputs ($fs, "\x05\x01\x00\x05");
           $buf = "";
       while (!feof($fs)) {
       echo    $buf.= fgets ($fs,128);
       }
       fclose ($fs);
          
   }
   ?>
Но он отображает пустое окно.
Может кто-то знает как это исправить?

Потом я нашел готовые библиотеки для подключения к socks5:
PHP:
-----socks5.lib.php--------    
<?
      class socks5 {
          var $socket;
          var $connected;
          var $debug;
                function socks5($ip, $port) {
              if ($this->socket = pfsockopen($ip, (int)$port, $errno, $errstr)) {
                  $buf["send"] = pack("C3", 0x05, 0x01, 0x00);
                  fwrite($this->socket, $buf["send"]);
                  $buf["recv"] = "";
                  while ($buffer = fread($this->socket, 1024)) {
                      $buf["recv"] .= $buffer;
                  }
                  $responce = unpack("Cversion/Cmethod", $buf["recv"]);
                  if ($responce["version"] == 0x05 and responce["method"] == 0x00) {
                      return true;
                  } 
                 fclose($this->socket); 
             }
              return false;
          } 
                   function connect($host, $port) {
              if ($this->socket) {
                  if (ip2long($host) == -1) {
                      $buf["send"] = pack("C5", 0x05, 0x01, 0x00, 0x03, strlen($host)).$host.pack("n", $port);
                  }
 else
 {   
                   $buf["send"] = pack("C4Nn", 0x05, 0x01, 0x00, 0x01, ip2long(gethostbyname($host)), $port);
                  } 
                 fwrite($this->socket, $buf["send"]);
                  $buf["recv"] = "";
                  while ($buffer = fread($this->socket, 1024)) {
                      $buf["recv"] .= $buffer;
                  }
                  $responce = unpack("Cversion/Cresult/Creg/Ctype/Lip/Sport", $buf["recv"]);
                  if ($responce["version"] == 0x05 and $responce["result"] == 0x00) {
                      $this->connected = true;
                      return true;
                  }
              }
              $this->connected = false;
              return false;
          }
                    function send($buffer, $length = 0) {
              if ($length = 0) {
                  $length = strlen($buffer);
              }
              if ($this->socket and $this->connected) {
                  fwrite($this->socket, $buffer, $length);
                  while ($recieved = fread($this->socket, 1024)) {
                      $output .= $recieved;
                  }
                  return $output;
              }
              return false;
          }
      }
  ?>
и тестер к ней:
PHP:
<?
      include("socks5.lib.php");
            $server_name = "www.site.com";
      $server_port = 80;
      $socks = new socks5("85.31.187.84", 9050);
        if ($socks->connect($server_name, $server_port)) {
          $headers[] = "GET / HTTP/1.1";
          $headers[] = "Host: $server_name:$server_port";
          $packet = join("\r\n", $headers)."\r\n\r\n";
          $responce = $socks->send($packet);
          echo $responce;
      }
        exit;
  ?>
Запускаю я этот тондем, а результат таков:
Fatal error: Maximum execution time of 30 seconds exceeded in z:\home\localhost\www\socks5.lib.php on line 21

Пробовал переписывать библиотеку, менял десятки прокси, устанавливал set_time_limit(0), но скрипт работать так и не стал(или просто перестал выводить ошибку выводил пустую страницу). Может кто-нибудь знает как его довести до рабочего состояния или привести аналог подключения через socks.
 
Статус
В этой теме нельзя размещать новые ответы.
Сверху