@tester_toster

RFC 1928, как реализовать socks chain?

Соединение с socks:
socket_create(AF_INET, SOCK_STREAM, SOL_TCP );
socket_connect($socket, $address, $port);


Потом отправляю запрос на аутентификацию:
0x05
0x01
0x00

Все отлично, в ответ приходит:
0x05
0x00

После этого для соединения с сайтом отправляю запрос:
0x05
0x01
0x00
(4 октета ип адреса сайта)
0x00
(2 октета порта)

Все отлично, приходит ответ:
0x05
0x00
0x01
(4 октета ип адреса сайта)
(2 октета порта)

Все отлично - можно пользоваться
Отправлять запросы вида: "GET / HTTP..." и получать ответы.

Хотел вставить еще одно socks звено, после соединения отправлять CONNECT не на ip сайта, а на ip 2 socks:
0x05
0x01
0x00
(4 октета ип адреса socks)
0x00
(2 октета порта)

Но в ответ приходит:
0x05
0x01 (Ошибка socks)
0x01
(4 октета ип адреса сайта)
(2 октета порта)

Пробовал вместо CONNECT отправлять udp:
0x05
0x03
0x00
(4 октета ип адреса socks)
0x00

В ответ приходит:
0x05
0x00
0x01
(4 октета ип адреса сайта)
(2 октета порта)

Ответ отличный, но отправив после этого запрос к сайту:
0x05
0x00
0x01
(4 октета ип адреса сайта)
0x00
(2 октета порта)
Ничего не происходит.

Читал русскую rfc - не понятно, именно само взаимодействие цепочки, находил еще материалы, где для создания цепочки после авторизации у первого SOCKS последовательно отправлять CONNECT и UDP ASSOCIATE ко второму, но у меня уже на первом шаге возникает ошибка. По отдельности socks работают, пробовал разные.
Буду благодарен за любые полезные материалы, примеры на rus/eng/code языках.
Так же есть вопрос, при соединении:
0x05
0x00
0x01
(4 октета ип адреса сайта)
0x00
(2 октета порта)
Между ip и port указывается нулевой откет, в переводе rfc об этом ничего не указано - это ошибка перевода?
  • Вопрос задан
  • 589 просмотров
Решения вопроса 1
Нет ничего специального во взаимодействиях цепочки, вы просто подключаетесь к сокс-серверу вместо сервера назначения. Подключаетесь к первому сокс, авторизуетесь, даете команду на подключение ко второму сокс, авторизуетесь, даете команду на подключение к третьему сокс, авторизуетесь, даете команду на подключение к серверу.
Если не проходит соединение на адрес второго сокс - либо вы что-то неправильно указываете, например номер порта или адрес не достижим через первый сокс, либо на первом сокс есть ограничения, например по портам назначения.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы