вопрос по SOCKS 5

Тема в разделе "WASM.NETWORKS", создана пользователем sacredphoenix, 8 авг 2007.

  1. sacredphoenix

    sacredphoenix New Member

    Публикаций:
    0
    Регистрация:
    14 апр 2007
    Сообщения:
    5
    по RFC на запрос CONNECT (cmd=1) прокси серверу следует отвечать так:

    Ver - 1 байт; REP - 1 байт; RSV -1; ATYP -1; BND.ADDR - ..; BND.PORT - 2

    после чего идет обмен данными между клиентом и внешним хостом.

    Но похоже, что некоторые SOCKS 5 клиенты(например firefox) игнорируют BND.ADDR и BND.PORT,
    принимая их за данные от внешнего хоста. Это так и должно быть или я где-то что-то не так понял?
    Сервер возвращает айпишник(ATYP=1)
     
  2. xh4ck

    xh4ck New Member

    Публикаций:
    0
    Регистрация:
    6 мар 2005
    Сообщения:
    60
    Адрес:
    Russia
    ну по сути они не нужны клиенту
     
  3. sacredphoenix

    sacredphoenix New Member

    Публикаций:
    0
    Регистрация:
    14 апр 2007
    Сообщения:
    5
    Да, но если эти поля не передавать, то некоторые клиенты(например putty) будут работать некорректно
     
  4. Hmm

    Hmm New Member

    Публикаций:
    0
    Регистрация:
    22 ноя 2006
    Сообщения:
    162
    Почему не нужны ? Из rfc :
    "В ответ на CONNECT, BND.PORT содержит номер порта, который сервер назначает для соединения с указанным хостом".
    Если клиент не читает № порта , откуда ему знать , куда послать данные ?

    Только что прочел rfc . Не вкурю формат запроса .
    Каждый октет , его что , побитово собирать надо , или как ?
    И почему в rfc все значения выглядят как X`05`. Что это за X такой ?
    Может кто покажет пример запроса на CONNECT ?
     
  5. TermoSINteZ

    TermoSINteZ Синоби даоса Команда форума

    Публикаций:
    2
    Регистрация:
    11 июн 2004
    Сообщения:
    3.568
    Адрес:
    Russia
    Hmm
    Если не ошибаюсь X`12 и тп это 12h (на наш великий асмовский :-P) То бишь heX
     
  6. xh4ck

    xh4ck New Member

    Публикаций:
    0
    Регистрация:
    6 мар 2005
    Сообщения:
    60
    Адрес:
    Russia
    Hmm

    как куда посылать данные? да клиент УЖЕ соединился с прокси, что ему еще думать куда их посылать, он используя это соединение и будет работать (если запрос не BIND, там чуток по другому, совсем чуть чуть =) )

    sacredphoenix

    посылай, лишними не будут, но это все лишь доп. информация
     
  7. Hmm

    Hmm New Member

    Публикаций:
    0
    Регистрация:
    22 ноя 2006
    Сообщения:
    162
    Спасибствую за толику ясности TermoSINteZ . Хотя , если это hex , то судя по этому абзацу rfc :

    " * X`03`

    поле адреса содержит имя домена. Первый октет адресного поля содержит число октетов в последующем за ним имени, завершающий NUL-октет в конце строки не применяется."
    Выходит , что максимальная поддерживаемая длина домена == F символов . Маловато что-то .

    2xh4ck: Возможно . Хотя по rfc это не так очевидно . А как он тогда должен его разрывать ?
     
  8. temp666

    temp666 New Member

    Публикаций:
    0
    Регистрация:
    13 июл 2007
    Сообщения:
    141
  9. xh4ck

    xh4ck New Member

    Публикаций:
    0
    Регистрация:
    6 мар 2005
    Сообщения:
    60
    Адрес:
    Russia
    2Hmm
    когда хочет тогда и разрывает =)
    ваще я когда то реализовывал сокс сервер, тестилось на многих клиентах, но все же я не могу сказать что код абсолютно верный
     
  10. Hmm

    Hmm New Member

    Публикаций:
    0
    Регистрация:
    22 ноя 2006
    Сообщения:
    162
    Ок .Спасибствую xhack, temp666 что разъяснили .
    Пойду помучаю какойнть socks через telnet.
     
  11. mathio

    mathio New Member

    Публикаций:
    0
    Регистрация:
    16 июн 2007
    Сообщения:
    110
    bind port и bind address нужны юзающей socks-сервер программе в случае если эти значения используются более "высокими" сетевыми протоколами. Например, они необходимы, когда ftp-клиент, используя socks-сервер, общается с ftp-сервером, находящемся в активном режиме(когда data-соединение идет с 20-го TCP порта сервера), т.е. ftp-серверу нужно знать с каким портом клиента устанавливать связь и клиент сообщает ему его посредством ftp-команды PORT.
     
  12. xh4ck

    xh4ck New Member

    Публикаций:
    0
    Регистрация:
    6 мар 2005
    Сообщения:
    60
    Адрес:
    Russia
    тогда если я прaвильно понимаю, клиент будет посылать уже BIND запрос, а речь шла о CONNECT
     
  13. mathio

    mathio New Member

    Публикаций:
    0
    Регистрация:
    16 июн 2007
    Сообщения:
    110
    Да, пример c активным ftp был для BIND. Для возвращаемых бинд-адреса и порта при CONNECT, на вскидку можно придумать, визуально-эстетическое применение, как в клиентах ICQ, где показываются "Внутренний" и "Внешний" IP адреса. Вот "Внешний" IP, при работе через socks, как раз и является тем самым возвращаемым значением(bnd.addr).
     
  14. GrDog

    GrDog New Member

    Публикаций:
    0
    Регистрация:
    28 июн 2007
    Сообщения:
    26
    Вообще из опыта тестирования различных SOCKS клиентов могу сказать, что в большенстве случаев это поле игнорирутеся, но есть исключения . ПРимер: Total Commander 7.0pb2 ( на других TC не тестил ) требует что бы в ответ на CONNECT приходили эти поля пустые (точнее зануленые ), а в ответ на BIND первый пустой(зануленый) а второй содержал адресс и порт соединения
     
  15. sacredphoenix

    sacredphoenix New Member

    Публикаций:
    0
    Регистрация:
    14 апр 2007
    Сообщения:
    5
    Я понял, почему возникала ошибка в работе с firefox. SOCKS 5 сервер, который я написал отвечал на команду CONNECT так: сначала(одним send) посылал сам ответ (5 0 0 1), после чего другим send посылался IP с которого прокси соединялся с внешним хостом и затем еще одним send посылался порт. В результате чего firefox принимал ответ на команду CONNECT а остальные 6 байт принимал уже за данные от внешнего хоста.

    Когда я переделал сервер так, чтобы ответ, IP и порт посылались одним send все заработало так как и надо. Из чего следует вывод, что в этом случае firefox неправильно работает с протоколом TCP. Он воспринимает данные, пришедшие к нему по-разному в зависимости от того, пришли они одним пакетом или несколькими. У меня версия 2.0.0.4