A túa petición HTTP de Java funciona a través de SOCKS, pero unha función UDP segue enviando tráfico directamente ou falla. Configurar as propiedades SOCKS da JVM non lle dá a DatagramSocket unha implementación SOCKS5 UDP.

A API DatagramSocket envía e recibe datagramas dirixidos a puntos finais de rede. O seu método connect() escolle un par para ese socket. Non realiza unha negociación SOCKS co par.

Unha ruta UDP por SOCKS5 require traballo adicional

SOCKS5 define unha asociación UDP establecida sobre unha conexión de control TCP. Despois o cliente intercambia datagramas encapsulados co enderezo de retransmisión que proporciona o proxy. Cada mensaxe encapsulada identifica o seu destino. Unha implementación de cliente debe xestionar ese encapsulado e a vida da conexión de control.

Apuntar un socket UDP normal ao porto de escoita TCP do proxy omite eses pasos. Enviar os datagramas crueis da túa aplicación a ese enderezo non substitúe a asociación.

Escolle unha biblioteca ou unha función da aplicación que admita explicitamente a retransmisión UDP por SOCKS5, e confirma que o servidor tamén a admite. Unha biblioteca que anuncia compatibilidade con SOCKS podería implementar só TCP CONNECT. A especificación do protocolo distingue os comandos.

A retransmisión UDP tamén necesita unha ruta utilizábel

Unha conexión TCP correcta ao proxy só establece a ruta de control. Os devasas ou o comportamento de NAT aínda poden interferir cos datagramas enviados á retransmisión. Recolle o punto final de retransmisión devolto e calquera erro de retransmisión antes de concluír que o destino da aplicación está fóra de liña.

Por último, a compatibilidade de transporte SOCKS non engade garantías de entrega a UDP. Os tempos de espera propios da túa aplicación, o tratamento de perdas e os límites de tamaño de mensaxe seguen aplicándose despois de que cambie a ruta.

Artigos relacionados