HTTP прокси метод connect

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by _nic, 28 Oct 2009.

  1. _nic

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

    Joined:
    5 May 2006
    Messages:
    651
    Likes Received:
    54
    Reputations:
    3
    Ни у кого нет примеров(С\С++) как это работает?
     
  2. slesh

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

    Joined:
    5 Mar 2007
    Messages:
    2,704
    Likes Received:
    1,224
    Reputations:
    455
    А что тут сложного? это еще проще чем обычный. Действия такие:
    1) тупо считываешь целеком HTTP запрос
    2) Ищи первый пробел. после него начинается домен.
    3) ставиш указатель на начало домента и запоминаеш его.
    4) далее ищи опять пробел начиная с имени домена
    5) как нашел пробел так замени его на 0x00
    6) начиная от имени домена ищи символ :
    7) если его нет, то дефолтовый порт = 80
    8) если есть : то заменяй его на 0x00 а то, что после него прогоняй через atoi и получай номер порта.
    9) коннектся на нужный домен и порт
    10) если всё норм то посылаеш
    "HTTP/1.1 200 OK\r\n\r\n"
    и затем делай обычный портмаппинг
    11) если не смог подрубиться то посылай
    "HTTP/1.0 502 Bad Gateway\r\nContent-Length: 15\r\n\r\n502 Bad Gateway"
    и закрывай соединение
    12) если при парсинге заголовка возникла ошибка (чтото не нашел) то посылай
    "HTTP/1.0 400 Bad Request\r\nContent-Length: 15\r\n\r\n400 Bad Request"
    и закрывай соединение
     
  3. _nic

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

    Joined:
    5 May 2006
    Messages:
    651
    Likes Received:
    54
    Reputations:
    3
    Я не про сервер.А как со стороны клиента.
    ЗЫ:но в принципе теперь уже понятно :D
     
  4. slesh

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

    Joined:
    5 Mar 2007
    Messages:
    2,704
    Likes Received:
    1,224
    Reputations:
    455
    клиент шле т примерно такие данные:
    CONNECT www.site.com:port HTTP/1.1
    CONNECT www.site.com HTTP/1.1
    и если получил 200 OK то уже может посылать какие угодно данные.
     
    1 person likes this.
Loading...