当前位置: 首页 > 面试题库 >

如何为SOCKS代理设置nonProxyHosts

毛声
2023-03-14
问题内容

我想nonProxyHosts为SOCKS5代理设置列表,即应使用直接连接的主机名列表。

正如oracle docs所描述的,有一些名为的选项http.nonProxyHostsftp.nonProxyHosts可以为HTTP和FTP设置代理排除,但没有针对SOCKS代理的特定设置。

我试过了http.nonProxyHosts,但这不会影响SOCKS连接。

SOCKS代理是通过以下方式设置的:

System.setProperty("socksProxyHost", "192.168.10.10");
System.setProperty("socksProxyPort", "3128");

但这导致即使数据库连接也localhost正在使用SOCKS代理,这是不可接受的。

应该如何使用?如何从代理连接中排除某些主机?


问题答案:

使用socksNonProxyHosts系统属性;它没有记录,但存在于Oracle JDK 8至11中,也可能存在于其他版本中。

java -DsocksProxyHost=mySocksServer -DsocksProxyPort=8888 -DsocksNonProxyHosts=127.0.0.1 [...]

TL; DR

该属性socksNonProxyHosts在sun.net.spi.DefaultProxySelector的源代码中找到(感谢@rince)

但是,有关Java网络属性的文档暗示此功能不存在,因此其使用可能不稳定:

以这种方式指定SOCKS代理后,将尝试通过代理尝试 所有 TCP连接。

(添加了强调)

您也许可以使用Proxyand和/或ProxySelectorclass,但是:

  • ProxySelector仅在您的应用程序用于URLConnection建立连接时适用。

  • Proxy适用于任意套接字……但前提是您可以将Proxy对象作为参数提供给相关的Socket构造函数调用。(并且您将需要逻辑来提供不同的Proxy对象,具体取决于您的代码尝试连接的对象。)

此RFE存在一个错误。该票证提出了另一种解决方法。显然,如果该java.net.useSystemProxies属性为true,则(在某些平台上)默认代理选择器将考虑在适当的系统代理设置中指定的排除主机。



 类似资料:
  • 问题内容: 我需要针对SOCKS代理设置代理身份验证。我发现这篇文章提供了适用于常见HTTP代理的说明。 该功能也可以与 SOCKS 代理一起使用吗?还是我必须做一些不同的事情? 问题答案: Apache HTTPClient 的功能页面显示: 使用本机Java套接字支持通过SOCKS代理(版本4和5)进行透明连接。 对于“透明”,我想他们的意思是它可以工作而无需做任何特殊的事情。您在某处有SOC

  • 我想为SOCKS5代理设置列表,即应使用直接连接的主机名列表。 正如oracle文档所描述的,有名为<code>http的选项。非代理主机和用于为HTTP和FTP设置代理排除,但没有针对SOCKS代理的特定设置。 我尝试了,但这不影响SOCKS连接。 SOCKS代理通过以下方式设置: 但这会导致连到的DB连接都使用SOCKS代理,这是不可接受的 这应该如何使用?如何从代理连接中排除某些主机?

  • 问题内容: 我可以如下设置Firefox的代理设置。 但是我也需要设置Chrome。.有人可以帮助我怎么做吗? 谢谢拉吉 问题答案: 您可以尝试使用该类,如下所示:

  • proxy.conf.js在开发模式下按预期工作。 我在package.json文件中有这些文件用于启动和构建。 在我运行“NPM run Build”并使用结果文件在IIS8上托管网站后,需要使用代理设置的页面就不工作了。 例如,我的请求https://localhost/web/api/webclients/authentication应该转到https://10.109.102.109/we

  • 我编写了一个SOCKS代理,如果关闭链接,它可以同时处理HTTP和HTTPS流量。 如果链接已打开并且转发主机和端口属于过滤HTTP代理,则只有HTTP流量可以流动。HTTPS流量不流动并报告SSL错误。 请注意,当请求直接来自浏览器而不是SOCKS服务器时,HTTP代理会处理HTTPS流量。 例如,如果我向https://www.google.com出现以下情况: 1)客户端发送SOCKS 5问

  • When running an Express app behind a proxy, set (by using app.set()) the application variable trust proxy to one of the values listed in the following table. Although the app will not fail to run if t