gpt4 book ai didi

java - 如何在通过代理 ( Tor ) 浏览时阻止 Java 预先解析我的主机?

转载 作者:行者123 更新时间:2023-12-04 04:59:53 29 4
gpt4 key购买 nike

我目前正在开发一个 Java 应用程序,该应用程序使用在本地主机上运行的 Tor 代理来获取显示请求者 IP 的脚本。

我希望这项工作主要由 Tor 代理完成,以便它以最“自然”的状态工作。我当前的代码看起来类似于:

SocketAddress TorProxyAddress = new InetSocketAddress("127.0.0.1", 9050);
Proxy TorProxy = new Proxy(Proxy.Type.SOCKS, TorProxyAddress);
URL url = new URL("https://myhost.com/ip2.php");
URLConnection conn = url.openConnection(TorProxy);
// ... reading the input stream etc

我现在遇到的问题是来自 Tor 代理控制台的以下警告消息:
[warn] Your application (using socks5 to port 443) is giving Tor only an IP address. Applications that do DNS resolves themselves may leak information. Consider using Socks4A (e.g. via privoxy or socat) instead. For more information, please see https://wiki.torproject.org/TheOnionRouter/TorFAQ#SOCKSAndDNS.'

对我来说,看起来 Java 正在解析 myhost.com 的 IP 地址,而我不希望它这样做。如前所述,我需要在可能完美的环境中运行 Tor 代理。

有什么办法可以防止java预先解析主机并将整个URL传递给tor代理?

非常感谢您的每一个回答!

最佳答案

我自己找到了一个简单的答案,就像阅读 InetSocketAddress 的 API 一样简单。

要阻止 Java 预先解析主机,只需使用:

InetSocketAddress unresolvedAdr = InetSocketAddress.createUnresolved(host, port);

如果您有兴趣,这是我的完整解决方案(在我使用 ssl-stuff 的特殊情况下):
TorProxyAddress = new InetSocketAddress("127.0.0.1", 9050);
Proxy TorProxy = new Proxy(Proxy.Type.SOCKS, TorProxyAddress);
Socket underlying = new Socket(TorProxy);

InetSocketAddress unresolvedAdr = InetSocketAddress.createUnresolved(host, port);
underlying.connect(unresolvedAdr);

SSLSocket socket = (SSLSocket) SockFactory.createSocket(underlying, "127.0.0.1", 9050, true);
// ... Read from / write to Socket

关于java - 如何在通过代理 ( Tor ) 浏览时阻止 Java 预先解析我的主机?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16268878/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com