socks5 - помогите разобраться с реализацией
От: ivlad Россия  
Дата: 17.05.07 01:57
Оценка:
Пожалуйста, растолкуйте, что должно произойти, когда сервер получил команду CONNECT от клиента и создал соединение с указанным хостом по указанному порту.

Правильно ли я понимаю, что после этого:

1. Сервер создаёт слушающий сокет
2. Адрес именно этого сокета отсылает клиенту в ответе
3. Ждёт, когда произойдёт подключение на этот сокет и accept'ит его
4. Всё, что прислано через это подключение отсылает удалённому хосту и наоборот

Похоже, что я чего-то не понимаю. Написал socks5-сервер, работающий по описанному алгоритму... Ни одна программа через него работать не может. Вот например лог сессии с miranda-icq (справа от символов > и < hex dump данных, полученных от клиента и отосланных ему, соотвественно):
# new client connected: 127.0.0.1:2751
[127.0.0.1:2751] > 05 01 00 
[127.0.0.1:2751] < 05 00 
[127.0.0.1:2751] > 05 01 00 01 40 0c a1 99 14 46 
[127.0.0.1:2751] # new pipe to 64.12.161.153:5190 created (listen on 89.110.10.178:32768)
[127.0.0.1:2751] # command CONNECT 64.12.161.153:5190 (success)
[127.0.0.1:2751] < 05 00 00 01 59 6e 0a b2 80 00
То есть сервер ждёт подключение на 89.110.10.178:32768, но его не происходит. Мне непонятно почему

Я написал также тестового клиента, который получив в ответе на комманду CONNECT ip и порт сразу открывает соединение по этому адресу (после чего закрывает его и отключается от сервера). Тогда всё ок, вот лог:
# new client connected: 127.0.0.1:2762
[127.0.0.1:2762] > 05 01 00 
[127.0.0.1:2762] < 05 00 
[127.0.0.1:2762] > 05 01 00 01 d5 b4 cc 08 00 50 
[127.0.0.1:2762] # new pipe to 213.180.204.8:80 created (listen on 89.110.10.178:32768)
[127.0.0.1:2762] # command CONNECT 213.180.204.8:80 (success)
[127.0.0.1:2762] < 05 00 00 01 59 6e 0a b2 80 00 
[127.0.0.1:2762] # pipe to 213.180.204.8:80 activated
[127.0.0.1:2762] # pipe to 213.180.204.8:80 destroyed (client disconnecting)
# client disconnected: 127.0.0.1:2762
При этом мой тестовый клиент не работает с другими socks5-proxy серверами (с которыми работают остальные клиенты, в частности, miranda-icq).

Пожалуйста, помогите решить проблему. А то я уже пару суток мучаюсь, не зная что делать
Re: socks5 - помогите разобраться с реализацией
От: Stuw  
Дата: 17.05.07 11:56
Оценка:
Здравствуйте, ivlad, Вы писали:

I>Пожалуйста, растолкуйте, что должно произойти, когда сервер получил команду CONNECT от клиента и создал соединение с указанным хостом по указанному порту.


I>Правильно ли я понимаю, что после этого:


I>1. Сервер создаёт слушающий сокет

I>2. Адрес именно этого сокета отсылает клиенту в ответе
I>3. Ждёт, когда произойдёт подключение на этот сокет и accept'ит его
I>4. Всё, что прислано через это подключение отсылает удалённому хосту и наоборот

I>Похоже, что я чего-то не понимаю. Написал socks5-сервер, работающий по описанному алгоритму... Ни одна программа через него работать не может. Вот например лог сессии с miranda-icq (справа от символов > и < hex dump данных, полученных от клиента и отосланных ему, соотвественно):

I>
# new client connected: 127.0.0.1:2751
I>[127.0.0.1:2751] > 05 01 00 
I>[127.0.0.1:2751] < 05 00 
I>[127.0.0.1:2751] > 05 01 00 01 40 0c a1 99 14 46 
I>[127.0.0.1:2751] # new pipe to 64.12.161.153:5190 created (listen on 89.110.10.178:32768)
I>[127.0.0.1:2751] # command CONNECT 64.12.161.153:5190 (success)
I>[127.0.0.1:2751] < 05 00 00 01 59 6e 0a b2 80 00
То есть сервер ждёт подключение на 89.110.10.178:32768, но его не происходит. Мне непонятно почему


I>Я написал также тестового клиента, который получив в ответе на комманду CONNECT ip и порт сразу открывает соединение по этому адресу (после чего закрывает его и отключается от сервера). Тогда всё ок, вот лог:

I>
# new client connected: 127.0.0.1:2762
I>[127.0.0.1:2762] > 05 01 00 
I>[127.0.0.1:2762] < 05 00 
I>[127.0.0.1:2762] > 05 01 00 01 d5 b4 cc 08 00 50 
I>[127.0.0.1:2762] # new pipe to 213.180.204.8:80 created (listen on 89.110.10.178:32768)
I>[127.0.0.1:2762] # command CONNECT 213.180.204.8:80 (success)
I>[127.0.0.1:2762] < 05 00 00 01 59 6e 0a b2 80 00 
I>[127.0.0.1:2762] # pipe to 213.180.204.8:80 activated
I>[127.0.0.1:2762] # pipe to 213.180.204.8:80 destroyed (client disconnecting)
I># client disconnected: 127.0.0.1:2762
При этом мой тестовый клиент не работает с другими socks5-proxy серверами (с которыми работают остальные клиенты, в частности, miranda-icq).


I>Пожалуйста, помогите решить проблему. А то я уже пару суток мучаюсь, не зная что делать


Я пока не заметил расхождений вашей реализации с RFC (может тоже чего-то не заметил).
Можете написать лог того, как отрабатывает ваш тестовый клиент при работе с другими SOCKS5 серверами?
Re[2]: socks5 - помогите разобраться с реализацией
От: Stuw  
Дата: 17.05.07 11:58
Оценка:
Мне тут еще мысль пришла: Вы ожидаете другие команды (типа BIND) параллельно с ожиданием коннекта?
Re[2]: socks5 - помогите разобраться с реализацией
От: ivlad Россия  
Дата: 17.05.07 21:42
Оценка:
Здравствуйте, Stuw, Вы писали:

S>Я пока не заметил расхождений вашей реализации с RFC (может тоже чего-то не заметил).


И зря не заметили. Я разобрался. На самом деле по спецификации обмен данными между клиентом и удалённым хостом должен осуществляться _в том же_ соединении сразу после успешного CONNECT.

Переписал код, сейчас всё работает Сижу в icq через собственноручно напрограммированный php socks5 proxy
Re[3]: socks5 - помогите разобраться с реализацией
От: Ruweb  
Дата: 19.05.07 22:27
Оценка:
Здравствуйте, ivlad, Вы писали:

I>Здравствуйте, Stuw, Вы писали:


S>>Я пока не заметил расхождений вашей реализации с RFC (может тоже чего-то не заметил).


I>И зря не заметили. Я разобрался. На самом деле по спецификации обмен данными между клиентом и удалённым хостом должен осуществляться _в том же_ соединении сразу после успешного CONNECT.


I>Переписал код, сейчас всё работает Сижу в icq через собственноручно напрограммированный php socks5 proxy

+1
4й так же работает, но тогда зачем сокс шлёт ip и порт?
Re[4]: socks5 - помогите разобраться с реализацией
От: Stuw  
Дата: 21.05.07 07:50
Оценка:
Здравствуйте, Ruweb, Вы писали:

R>Здравствуйте, ivlad, Вы писали:


I>>Здравствуйте, Stuw, Вы писали:


S>>>Я пока не заметил расхождений вашей реализации с RFC (может тоже чего-то не заметил).


I>>И зря не заметили. Я разобрался. На самом деле по спецификации обмен данными между клиентом и удалённым хостом должен осуществляться _в том же_ соединении сразу после успешного CONNECT.


I>>Переписал код, сейчас всё работает Сижу в icq через собственноручно напрограммированный php socks5 proxy

R>+1
R>4й так же работает, но тогда зачем сокс шлёт ip и порт?

В пятом йи и порт юзаются для UDP
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.