Socks 4 Bind Запрос Объяснение

Я читал эту тему http://ftp.icm.edu.pl/packages/socks/socks4/SOCKS4.protocol

и я пытаюсь сделать следующее: у меня есть клиент-серверное приложение, и я пытаюсь использовать socks-запрос BIND для привязки моего сервера к удаленному socks-серверу и подключения клиентов к этому socks-серверу и socks сервер заставит их подключиться к моему серверу (по крайней мере, так я понимаю запрос socks BIND)

но я не до конца понимаю (мой английский довольно плохой), что я спрашиваю, возможно ли это сделать, когда я не знаю ни одного из удаленных IP-адресов клиентов? поскольку пакет запроса BIND на сервере должен содержать адрес удаленного клиента, а я на самом деле его не имею, так как клиенты от неизвестных пользователей получают информацию о состоянии с моего сервера (или я могу использовать 0 для INANY_ADDR)?

2 ответа

Решение

То, что вы просите, невозможно с SOCKS, и при этом это не предназначено для этой цели. Прочитайте спецификацию еще раз более внимательно. Команда BIND предназначена для использования с протоколами множественных соединений (например, FTP), где основное соединение используется для связи между клиентом и сервером, а BIND облегчает ситуации, когда серверу необходимо подключить вторичное соединение к клиенту после Клиент сообщает серверу, где подключиться. В этой ситуации клиент будет выдавать команду BIND для SOCKS, сообщая ему IP/ порт сервера, чтобы он только принял это соединение, а затем отправляет полученный прослушивающий SOCKS IP/ порт на сервер для подключения.

То, о чем вы просите, лучше обслуживается используемым маршрутизатором с определенными правилами переадресации портов. Затем вы можете открыть прослушивающий порт на маршрутизаторе, который принимает любое входящее соединение и перенаправляет его на прослушивающий IP/ порт вашего приложения. Большинство современных маршрутизаторов поддерживают uPNP (универсальный Plug-N-Play), поэтому вы можете программировать правила переадресации программно, не требуя административного доступа к программному обеспечению конфигурации маршрутизатора.

Реми это хорошо объяснил.
Я хотел бы добавить, что если вы хотите достичь своей цели, вы также можете реализовать сервер SOCKS5, который немного нарушает протокол: прослушивать определенный порт для входящего соединения (от клиентов в вашем сценарии), принимать любые входящее соединение независимо от того, что такое DST.ADDR и DST.PORT, затем ретранслируйте его на свой сервер.
Однако будьте осторожны с риском безопасности!

Другие вопросы по тегам