Модераторы: Aliance, skyboy, MoLeX, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> proxy скрипт, помогите довести до ума 
:(
    Опции темы
anonymouse
Дата 24.1.2011, 18:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 197
Регистрация: 18.8.2004

Репутация: нет
Всего: 1



помогите написать скрипт для тунеля (или proxy). Чтобы все запросы клиента полностью ("1 в 1") передавались на другой сервер, и возвращались клиенту, так чтобы он не видел что соединение происходит на серверной частм.
Желательно чтобы все работало на всех версиях php начиная с 5.0
Вот что я попробовал сделать сам, но это почемуто не работает на 5.2.x
Код

<?php
      $TO_HOST="google.com";
      $TO_PORT=80; 
       
if (!function_exists('getallheaders'))
{
    function getallheaders()
    {
       foreach ($_SERVER as $name => $value)
       {
           if (substr($name, 0, 5) == 'HTTP_')
           {
               $headers[str_replace(' ', '-', ucwords(strtolower(str_replace('_', ' ', substr($name, 5)))))] = $value;
           }
       }
       return $headers;
    }
}


      function myraw($host) {
           $method=$_SERVER['HTTP_METHOD'];
            
           if (!isset($method))  {
               $method=$_SERVER['REQUEST_METHOD'];
           }
           $protocol=$_SERVER['SERVER_PROTOCOL'];
           if (!isset($protocol))  {
              $protocol="HTTP/1.1";
           }
           $raw=$method." ".$_SERVER['REQUEST_URI']." ".$protocol."\r\n";
           foreach(getallheaders() as $key=>$value)  {
             if ($key == 'Host') {
               $raw .="Host: ".$host."\r\n";
             } else {                                      
               $raw .=$key.': '.$value."\r\n";
             }
           } 
           $body=@file_get_contents('php://input');
           $raw .="\r\n".$body; 
           $log .="raw: ".$raw."\n";
           return $raw; 
      } 
       
      $req=myraw($TO_HOST);
      
      $fp = fsockopen($TO_HOST, $TO_PORT, $errno, $errstr, 30);
      if (!$fp) {
          echo "$errstr ($errno)<br/>\n";
      } else {
          fwrite($fp, $req);
          $quit=false;
          $len=-1;
          $state=0;
          $chunk=-1;
          while (!$quit) {
            if ($state==0) {
              $readed=fgets($fp,128);

              header($readed);  
              if (strlen(trim($readed))==0) {
                $state=1;
                if ($chunk==0) {   
                   $nc=fgets($fp, 1024);
                   $chunk=hexdec($nc);
                }
                $quit = $len==0;
              } else if (strpos($readed,"HTTP")===0) {
                 $codeline=split(" ",$readed);
              } else if (strpos($readed,"Content-Length: ")===0)  {
                  $len=(int)substr($readed, 16);
              } else if (strpos($readed,"Transfer-Encoding: chunked")===0) {
                  $chunk=0;
                  header_remove("Transfer-Encoding");
              } 
              
            } else if ($state==1) {
              if ($chunk>=0) {
                if ($chunk==0) {
                   $quit = true;
                } else {
                   $readed=fread($fp,$chunk);
                   echo $readed; 
                   $chunk -= strlen($readed);              
                   if ($chunk==0) {
                    if (fgets($fp, 1024) != "\r\n") {
                      die('error in chunk-decoding');
                    }
                    $nc=fgets($fp, 1024);
                    $chunk=hexdec($nc); 
                   }
                }
              } else {
                if ($len<0) {
                  $readed=fread($fp, 1024);
                } else {
                  $readed=fread($fp,$len);
                  $len-=strlen($readed); 
                  $quit = $len<=0;
                }
                echo $readed; 
              }
            }         
            $quit|=feof($fp);
          }
          fclose($fp);
       }

?>


--------------------
Много чего интересного...
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Сеть | Следующая тема »


 




[ Время генерации скрипта: 0.1158 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.