Понимание протокола Socks5

Я новичок новичков с socks5, но я пытаюсь учиться, создавая сервер socks5.

Я получил большую информацию о SocksV5 от чтения RFC 1928.

Он объясняет пакеты, которые должны быть отправлены клиенту и серверу, чтобы установить соединение с сервером, запросить удаленные подключения и привязку. Он также объясняет, как использовать UDP, который является большим.

Я не понимаю, что происходит после установления соединения.

Например,

Client: <sends method identifiers>
Server: <responds with the method identifier to use>
...authentication is complete....
Client: Sends a connection request to 192.168.1.1:2321
Server: Acknowledges Packet
Server: Acknowledges successful connection to 192.168.1.1:2321
Client: ????

Каков формат пакета, который отправляется от клиента на сервер для фактической пересылки данных в пункт назначения?

Предположим, клиент просит прокси-сервер установить 3 подключения. Когда клиент хочет переслать данные в соединение 1, для этого должен быть протокол. В противном случае, как сервер узнает, к какому соединению его отправить? Я не могу найти какую-либо информацию в документах RFC.

Я думаю, что другой вопрос: возможно ли это? Может ли клиент запрашивать несколько подключений или он должен выполнять их по одному или устанавливать отдельное подключение сокета к серверу для каждого соединения, которое он хочет переслать?

Спасибо за помощь!

Ответ 1

Снова прочитайте RFC, он расскажет вам, о чем вы просите.

Клиент должен установить отдельное TCP-соединение с прокси-сервером SOCKS для каждого сервера, с которым он хочет обмениваться данными, независимо от того, являются ли эти данные TCP или UDP.

Если клиент обменивается данными TCP, он просто считывает/отправляет данные по тому же соединению, которое он устанавливает с прокси, после того, как прокси отправляет ответ об успешном завершении.

Если клиент обменивается данными UDP, TCP-соединение используется для создания связанного с ним UDP-ретранслятора, который прокси использует для пересылки данных вперед и назад. Клиент сообщает прокси-серверу, куда отправлять входящие UDP-пакеты, а ответ успешности прокси сообщает клиенту, куда отправлять исходящие пакеты UDP. Повтор UDP активен, пока активен TCP-соединение между клиентом и прокси.

В любом случае прокси обрабатывает всю пересылку между клиентом и сервером прозрачно, как только будут установлены необходимые параметры.