Une connexion SOCKS peut échouer localement avant que le proxy ait la possibilité de résoudre la destination. Vérifiez si votre code a résolu la cible lors de la construction de l'adresse du socket.

Pour un socket Java SOCKS, conservez le nom d'hôte cible avec une adresse de destination non résolue :

Proxy proxy = new Proxy(Proxy.Type.SOCKS,
    new InetSocketAddress("203.0.113.10", 1080));
Socket socket = new Socket(proxy);
socket.connect(InetSocketAddress.createUnresolved(
    "destination.example", 443), 5000);

Le point de terminaison et le nom d'hôte sont des espaces réservés ; utilisez votre service SOCKS5 ou un candidat de la liste de proxies SOCKS5 pour des tests autorisés vers des destinations publiques. La distinction importante est entre résoudre le proxy pour pouvoir l'atteindre et conserver le nom de destination pour l'échange SOCKS.

Une fois connecté, un client HTTPS a toujours besoin d'une session TLS pour le nom d'hôte de destination. Une enveloppe TLS ne doit pas utiliser le nom d'hôte du proxy comme identité du pair.

Vérifiez aussi le code de niveau supérieur : une bibliothèque peut effectuer sa propre résolution avant d'appeler votre connecteur. Conserver un nom d'hôte dans cette adresse de socket ne peut pas annuler une résolution effectuée ailleurs dans l'application.

Articles similaires