¿Por qué SOCKS5 requiere retransmitir UDP sobre UDP?

losCALCETINES5 protocolo, descrito porRFC1928 Proporciona soporte para UDP.

Para resumir, un cliente que desee retransmitir paquetes UDP a través de un servidor SOCKS5 debe, al menos:

abrir una conexión TCP al servidor SOCKS5;enviar unaUDP ASSOCIATE solicitud (cfSección 4);recibir del servidor la dirección y el puerto donde debe enviar los paquetes UDP para su retransmisión;enviar datagramas (UDP) a esa dirección, encapsulados con algunos encabezados (cfsección 7)

Aquí hay algunas citas relevantes, desección 6:

Una asociación UDP finaliza cuando finaliza la conexión TCP a la que llegó la solicitud UDP ASSOCIATE.

En la respuesta a una solicitud de ASOCIADO UDP, los campos BND.PORT y BND.ADDR indican el número de puerto / dirección donde el cliente DEBE enviar mensajes de solicitud UDP para su retransmisión.

ysección 7:

Un cliente basado en UDP DEBE enviar sus datagramas al servidor de retransmisión UDP en el puerto UDP indicado por BND.PORT en la respuesta a la solicitud UDP ASSOCIATE.

¿Por qué tanta complejidad?¿Por qué no solo enviar paquetes UDP en la conexión TCP preexistente?

EDITAR: Aaclarar, Espero que el proxy SOCKS reciba paquetes UDP a través de un flujo TCP y luego los transmita al destino utilizando UDP real. Y luego reciba paquetes UDP desde el destino y envíelos de regreso a través de la secuencia TCP.

Aquí hay un poco de contexto.

Mi objetivo es implementar el anclaje inverso, para que un dispositivo Android pueda usar la conexión a Internet de la computadora en la que está conectado, sin necesidad deraíz acceder tanto en el dispositivo como en la computadora (SimpleRT funciona pero requiereraíz acceso en la computadora).

Mi primera idea fue iniciar un servidor SOCKS5 simple conssh -D en la computadora, por lo que solo necesitaba implementar el cliente. Los paquetes serían transmitidos desde el dispositivo a la computadora a través deadb, gracias areenvío de puerto remoto proporcionado poradb reverse

Desafortunadamente,OpenSSH Servidor SOCKSno es compatible con UDP. Pero fue solo una limitación de la implementación, podría haber usado otro servidor SOCKS en su lugar.

Sin embargo,adb reverse tampoco es compatible con el reenvío UDP.

De ahí mi pregunta sobre el protocolo SOCKS5.

Actualmente estoy escribiendo un PoC que implementa mi propio protocolo (simple) sobre TCP, que puede retransmitir paquetes UDP, pero estoy decepcionado de no poder usar un protocolo estándar (y beneficiarme de las implementaciones existentes).