Протокол Socks5 и https

Discussion in 'PHP' started by imreadyourmind, 13 Dec 2012.

  1. imreadyourmind

    imreadyourmind New Member

    Joined:
    23 Feb 2010
    Messages:
    39
    Likes Received:
    4
    Reputations:
    5
    Пишу не большую проксю на perl, использую сокеты. Пытался найти примеры или любую удобоваримую для меня инфу в гугле, вышло плоховато( теперь пробую искать помощи у вас.

    С http после удовлетворения всех инструкций протокола socks5 идет хэдер, который отправил программа-клиент, а дальше все, как по маслу.

    С https после инструкций идут крокозяброчки)
    [​IMG]
    и что с ними делать не понятно) Я конечно ожидал увидеть что-то типа обычного хэдера только на порт 443 , но как я понял, программа-клиент сразу шифрует данные и передает их.

    Что с этими крокозяброчками делать? отсылать их в сокет на проксю (ответ приходит пустым к сожалению)? или мб там какие-то дополнительные инструкции?
     
    #1 imreadyourmind, 13 Dec 2012
    Last edited: 13 Dec 2012
  2. mironich

    mironich Elder - Старейшина

    Joined:
    27 Feb 2011
    Messages:
    733
    Likes Received:
    73
    Reputations:
    19
    Разве прокси который по socks5 работает не пох*й что чяерез него идет(по какому протоколу траф)..
     
  3. imreadyourmind

    imreadyourmind New Member

    Joined:
    23 Feb 2010
    Messages:
    39
    Likes Received:
    4
    Reputations:
    5
    странно, что http работает отменно, а вот с https беда, в ответ на крокозяброчки отдает пустоту.
     
  4. imreadyourmind

    imreadyourmind New Member

    Joined:
    23 Feb 2010
    Messages:
    39
    Likes Received:
    4
    Reputations:
    5
    PHP:
    <?php 


    if(isset($_POST['query']) && isset($_POST['host'])) 
    {  
        
    header('Content-type: application/octet-stream'); 
        @
    set_time_limit(0); 
        
    $query base64_decode(str_replace(' ''+'$_POST['query'])); 
        @list(
    $host$port) = @explode(':'base64_decode($_POST['host'])); 
        if(!
    $port) {if (eregi("ssl:"$host) && !$port) {$port 443;} else {$port 80;}} 
        if (!
    eregi("ssl"$host)){
            
    $ip gethostbyname($host);
        } else {
            
    $host=str_replace('@'':'$host);
            
    $ip=$host;
            
    $port 443;
        }

        if(
    $fp = @fsockopen($ip$port$errno$errstr20)) 
        { 
            
    fwrite($fp$query);         
            while(!
    feof($fp)) 
            { 
                
    $answer fread($fp1024); 
                echo 
    $answer
            } 
            
    fclose($fp); 
            
        } else {
            echo 
    'not connect';
        }
        exit; 

    ?>
    $host передается в виде ssl@//ip , потом @ заменяется на : и в таком виде fsock делает к нему коннект. в переменной $query содержаться крокозябры, они приходят в base64
    Код куда передаются крокозябры.
     
  5. Chrome~

    Chrome~ Elder - Старейшина

    Joined:
    13 Dec 2008
    Messages:
    937
    Likes Received:
    162
    Reputations:
    27
    Какой ужас. А если сервер не захочет отправлять данные сразу после получения данных от клиента? Или если клиент еще захочет что то отправить по одному и тому же соединению? Он не сможет этого сделать, такой код совершенно не годиться для Socks сервера. Да и PHP не совсем удачный выбор для этой цели.
     
  6. imreadyourmind

    imreadyourmind New Member

    Joined:
    23 Feb 2010
    Messages:
    39
    Likes Received:
    4
    Reputations:
    5
    видел несколько подобных схем, они более менее функционируют, вот я и не пойму, почему у меня практически та же самая схема не работает.

    в перле потоки ветвятся форком. я его сделал соксом, но протоколы будут использоваться только хттп и хттпс.
     
  7. Chrome~

    Chrome~ Elder - Старейшина

    Joined:
    13 Dec 2008
    Messages:
    937
    Likes Received:
    162
    Reputations:
    27
    Нет, твой способ нормально подходит для протоколов, которые работают по принципу запрос -> ответ -> закрытие соединения. То есть для http, в котором передается заголовок Connection: close все будет работать, а для https, наверное, нет.
     
  8. imreadyourmind

    imreadyourmind New Member

    Joined:
    23 Feb 2010
    Messages:
    39
    Likes Received:
    4
    Reputations:
    5
    как ни странно, https в такой схеме работает, хотя бы у HTTPTunnel_v1.2.1 и IndiaWebProxy , но мне они не подходят, вот и пишу свой.

    Connection: close тут не передается, в скрипт идет сразу то, что передает программа-клиент, т.е. крокозяброчки) и к гейту он тоже не передается)
     
    #8 imreadyourmind, 13 Dec 2012
    Last edited: 13 Dec 2012
  9. Chrome~

    Chrome~ Elder - Старейшина

    Joined:
    13 Dec 2008
    Messages:
    937
    Likes Received:
    162
    Reputations:
    27
    Если Connection: close не передается, то скрипт повиснет где то на 30 сек. в лучшем случае тогда, когда клиент передает Connection: keep-alive и сервер оствляет соединение открытым.
     
  10. Gifts

    Gifts Green member

    Joined:
    25 Apr 2008
    Messages:
    2,494
    Likes Received:
    807
    Reputations:
    614
    Можно я вклинюсь в вашу увлекательную дискуссию?

    1) А где здесь хоть что-то связанное с Socks прокси?
    2) ТС, прочитайте, пожалуйста, что такое SSL соединения вообще и HTTPS в частности. Ключевые слова - шифрование, сертификаты, man-in-the-middle
     
    _________________________
  11. imreadyourmind

    imreadyourmind New Member

    Joined:
    23 Feb 2010
    Messages:
    39
    Likes Received:
    4
    Reputations:
    5
    Чуть-чуть продвинулся в изысканиях) нашел ошибку, теперь в ответ мне всегда приходит 400 бед риквест) Причем без хэдера, только тело ответа) вот страннота) может это фишка хттпс?
     
  12. CTO

    CTO Member

    Joined:
    9 Sep 2011
    Messages:
    75
    Likes Received:
    6
    Reputations:
    0
    Подозреваю дело в теории - 7-ми уровневая модель оси TCP-IP. Можно послушать аудиозапись Гаспар Чилингаров, этого возможно будет достаточно. Разобраться с заворачиванием сокетов на локальную машину 127.0.0.1:1081 предположим.
     
  13. imreadyourmind

    imreadyourmind New Member

    Joined:
    23 Feb 2010
    Messages:
    39
    Likes Received:
    4
    Reputations:
    5
    По изучал теорию, гуглил всю ночь. в 7и уровневой модели ssl соит между http и tcp, т.е. просто шифруется http. По сути там сначала должен идти обмен ключами. А у меня кажется сразу в зашифрованном виде трафик идет, мне бы найти инструкцию по https, понятную как тут http://ru.wikipedia.org/wiki/SOCKS по соксам.
     
  14. mironich

    mironich Elder - Старейшина

    Joined:
    27 Feb 2011
    Messages:
    733
    Likes Received:
    73
    Reputations:
    19
    На Руском яз. в свое время нех* нормального не нашел.... 2 дня гуглил.
     
  15. imreadyourmind

    imreadyourmind New Member

    Joined:
    23 Feb 2010
    Messages:
    39
    Likes Received:
    4
    Reputations:
    5
    А на англ, есть что-нибудь доступное?))