Comment définir nonProxyHosts pour un proxy SOCKS
Je veux définir la liste nonProxyHosts
pour un proxy SOCKS5, c'est-à-dire la liste des noms d'hôtes auxquels une connexion directe doit être utilisée.
Comme le décrivent les oracle docs, il existe des options nommées http.nonProxyHosts
et ftp.nonProxyHosts
pour définir des exclusions de proxy pour HTTP et FTP, mais il n'y a pas de paramètre spécifique pour les proxys SOCKS.
J'ai essayé http.nonProxyHosts
, mais cela n'affecte pas les connexions SOCKS.
Le proxy SOCKS est configuré via:
System.setProperty("socksProxyHost", "192.168.10.10");
System.setProperty("socksProxyPort", "3128");
Mais cela provoque que même les connexions DB à localhost
sont utiliser le proxy SOCKS, ce qui est inacceptable.
Comment est-ce censé être utilisé? Comment puis-je exclure certains hôtes des connexions proxifiées?
1 answers
La documentation pour les propriétés de réseau Java dit ceci:
Une fois qu'un proxy SOCKS est spécifié de cette manière, toutes les connexions TCP seront tentées via le proxy.
(soulignement ajouté)
Il n'y a aucune disposition pour définir des hôtes non-proxy via les propriétés socks.
Vous pouvez peut-être utiliser les classes Proxy
et/ou ProxySelector
, mais:
ProxySelector
est applicable uniquement si votre l'application utiliseURLConnection
pour établir des connexions.Proxy
est applicable pour arbitraire sockets ... mais seulement si vous pouvez fournir l'objetProxy
en tant que paramètre aux appels de constructeurSocket
pertinents. (Et vous auriez besoin de logique pour fournir différents objetsProxy
en fonction de ce à quoi votre code essaie de se connecter.)
Il y a un RFE exceptionnel pour cela: http://bugs.java.com/bugdatabase/view_bug.do?bug_id=5001942
Le billet suggère une autre solution. Apparemment, si la propriété java.net.useSystemProxies
est true
, alors (sur certaines plates-formes) le sélecteur de proxy par défaut respectera les hôtes exclude spécifiés dans les paramètres de proxy système appropriés.