La teva petició HTTP de Java funciona a través de SOCKS, però una funció UDP encara envia trànsit directament o falla. Configurar les propietats SOCKS de la JVM no dona a DatagramSocket una implementació SOCKS5 UDP.

L'API DatagramSocket envia i rep datagrames adreçats a punts finals de xarxa. El seu mètode connect() tria un parell per a aquest sòcol. No fa cap negociació SOCKS amb el parell.

Una ruta UDP per SOCKS5 requereix feina addicional

SOCKS5 defineix una associació UDP establerta sobre una connexió de control TCP. Després el client intercanvia datagrames encapsulats amb l'adreça de relé que proporciona el servidor intermediari. Cada missatge encapsulat identifica la seva destinació. Una implementació de client ha de gestionar aquest emmarcat i la vida de la connexió de control.

Apuntar un sòcol UDP ordinari al port d'escolta TCP del servidor intermediari omet aquests passos. Enviar els datagrames en brut de la teva aplicació a aquesta adreça no substitueix l'associació.

Tria una biblioteca o una funció de l'aplicació que admeti explícitament el relé UDP per SOCKS5, i confirma que el servidor també l'admet. Una biblioteca que anuncia suport SOCKS potser només implementa TCP CONNECT. L'especificació del protocol distingeix les ordres.

El relé UDP també necessita un camí utilitzable

Una connexió TCP correcta al servidor intermediari només estableix el camí de control. Els tallafocs o el comportament del NAT encara poden interferir amb els datagrames enviats al relé. Recull el punt final de relé retornat i qualsevol error de relé abans de concloure que la destinació de l'aplicació està fora de línia.

Finalment, el suport de transport SOCKS no afegeix garanties de lliurament a UDP. Els temps d'espera, la gestió de pèrdues i les limitacions de mida dels missatges de la teva aplicació segueixen aplicant-se després que canviï la ruta.

Articles relacionats