Это не проблема, поэтому я реализовал UDP через TCP без использования SOCKS.
S5 протокол, описанныйRFC1928 обеспечивает поддержку UDP.Подводя итог, клиент, желающий передавать пакеты UDP через сервер SOCKS5, должен, по крайней мере:
открыть TCP-соединение с сервером SOCKS5;
Отправить запрос (срUDP ASSOCIATE
раздел 4);получить от сервера адрес и порт, по которому он должен отправлять UDP-пакеты для ретрансляции;отправлять дейтаграммы (UDP) по этому адресу, инкапсулированные с некоторыми заголовками (см.раздел 7).Вот некоторые соответствующие цитаты изВ ответе на запрос UDP ASSOCIATE поля BND.PORT и BND.ADDR указывают номер порта / адрес, на который клиент ДОЛЖЕН отправлять сообщения запроса UDP для ретрансляции.
а также
Почему так много сложности?
Почему бы просто не отправлять UDP-пакеты в уже существующем TCP-соединении?РЕДАКТИРОВАТЬ:
куточнитьЯ ожидаю, что прокси-сервер SOCKS будет принимать пакеты UDP по потоку TCP, а затем передавать их цели, используя фактический UDP. А затем получите пакеты UDP от цели и отправьте их обратно в поток TCP.Вот некоторый контекст.
Моя цель - реализовать обратную привязку, чтобы устройство Android могло использовать подключение к Интернету компьютера, к которому оно подключено, без необходимости
корень доступ как на устройстве, так и на компьютере (SimpleRT работает но требуеткорень доступ на компьютер).Моей первой идеей было запустить простой сервер SOCKS5 с
на компьютере, так что мне нужно было только реализовать клиента. Пакеты будут передаваться с устройства на компьютер черезssh -D
, благодаряadb
переадресация удаленных портов предоставленоК несчастью,adb reverse
…
OpenSSH SOCKS серверне поддерживает UDP, Но это было лишь ограничением от реализации, я мог бы вместо этого использовать другой сервер SOCKS.Тем не мение,
также не поддерживает пересылку UDP.adb reverse
Отсюда мой вопрос о протоколе SOCKS5.
В настоящее время я пишу PoC, реализующий свой собственный (простой) протокол через TCP, который способен ретранслировать пакеты UDP, но я разочарован тем, что не могу использовать стандартный протокол (и получаю выгоду от существующих реализаций).
Вы не можете отправлять дейтаграммы по TCP-соединению. TCP является протоколом потока байтов. Вопрос хочу иметь смысл.