Olej писал(а): ↑29.01.2016 12:51
- нужно, в частности, реализовать обмен через Socks 5
Логика там, как оказывается, до чрезвычайности простая ... "как умывальник"

:
- клиент, который хочет использовать SOCKS, конектится вместо требуемого TCP сервера IP:port к прокси-серверу SOCKS5 IP:port
- клиент с прокси-серверу SOCKS5 обмениваются 2-мя сообщениями запрос-ответ
- во 2-м сообщении клиент передаёт требуемого TCP сервера IP:port
- если всё нормально, прокси-сервер SOCKS5 устанавливает соединение с запрошенным сервером TCP
- клиент гонит (и читает) данные в открытый сокет к прокси-серверу SOCKS5...
- а тот ретранслирует весь TCP поток между клиентом и TCP сервером.
Это если не затрагивать аутентификацию и только для TCP протокола.
Но аутентификация делаетя совсем другими прооколами, и к SOCKS5 (обменам) не имеет никакого касательства.
Рассказывать долго ... но если кого заинересуют сетевые приложения - вот есть проект с кодом ... свеже выпеченный ;-)
Там есть 4 приложения (иначе без этого не отладиться):
- tcpserv - TCP эхо-сервер
- tcpcli - для него отладочный клиент (сделан так ещё потому, что меня просили его воспроизвести для Windows)
- sockcli - клиент, который обращается через SOCKS-прокси к tcpserv
- proxyserv - сам SOCKS прокси-сервер.
Работаю по протоколу SOCKS5 без авторизации (так как SOCKS4).
Вот здесь - все 3 красавца

:
Код: Выделить всё
olej@nvidia ~/2016_WORK/in.WORK/bcbs/socks5 $ ./tcpserv -vvv
listening on the TCP port 60000
127.0.0.1:46199 <= 127.0.0.1:60000
123
34567
olej@nvidia ~/2016_WORK/in.WORK/bcbs/socks5 $ ./sockcli -vv
through SOCKS 5 127.0.0.1:40000 connect to TCP host 127.0.0.1:60000
-> <5|1|0>
<- <5|0>
-> <5|1|0|1| 127 0 0 1 |234.96>
<- <5|0|0|1| 127 0 0 1 |234.96>
ready for enter:
123
123
34567
34567
^C
olej@nvidia ~/2016_WORK/in.WORK/bcbs/socks5 $ ./proxyserv -vv
SOCKS5 proxy is ready on port 40000
ID=1 <------
<- <5|1|0>
-> <5|0>
<- <5|1|0|1| 127 0 0 1 |234.96>
request for host 127.0.0.1 TCP port 60000
Connection refused
-> <5|5|0|1| 127 0 0 1 |234.96>
ID=1 ------>
ID=2 <------
<- <5|1|0>
-> <5|0>
<- <5|1|0|1| 127 0 0 1 |234.96>
request for host 127.0.0.1 TCP port 60000
-> <5|0|0|1| 127 0 0 1 |234.96>
host 127.0.0.1 порт 60000
123
123
34567
34567
connection closed by client
ID=2 ------>
^C
Опции -vv повышают уровень отладочного вывода (как это принято в POSIX/UNIX/Linux) ... без них мусора будет выводится гораздо меньше.
У вас нет необходимых прав для просмотра вложений в этом сообщении.