我目前正在开发一个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代理吗?
非常感谢您的每一个回答!
我自己找到了一个简单的答案,就像阅读 API 一样简单InetSocketAddress
要阻止 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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)