gpt4 book ai didi

java - 如何使用 Java 通过 Tor 代理进行 DNS 查找?

转载 作者:太空宇宙 更新时间:2023-11-04 07:29:41 27 4
gpt4 key购买 nike

正如标题所说,我目前尝试通过 Tor 代理解析主机名。

Tor 正在专用服务器 (192.168.1.15) 上运行。获取网站没有问题,但如果我尝试获取主机的 IP,Java 仍然会直接查找并忽略代理。

我已经尝试过这种方法:

//Trying lib from: www.xbill.org/dnsjava
import org.xbill.DNS.*;
[...]
public void lookup(){
//Lookup without proxy
try {
InetAddress addr = Address.getByName("stackoverflow.com");
System.out.println(addr);
} catch (UnknownHostException e) {
e.printStackTrace();
}

//set socks v5 proxy
//http://docs.oracle.com/javase/7/docs/api/java/net/doc-files/net-properties.html#Proxies
System.setProperty("socksProxyHost", "192.168.1.15");
System.setProperty("socksProxyPort", "9050");

//trying to resolve with dnsjava
try {
Record [] records = new Lookup("stackoverflow.com", Type.A).run();
for (Record record : records) {
System.out.println(record);
}
} catch (TextParseException e) {
e.printStackTrace();
}

//trying to resolve without lib
try {
System.out.println(InetAddress.getByName("stackoverflow.com"));
} catch (UnknownHostException e) {
e.printStackTrace();
}
}

public void request(){
InetSocketAddress torProxyAddress = new InetSocketAddress("192.168.1.15", 9050);
Proxy torProxy = new Proxy(Proxy.Type.SOCKS, torProxyAddress);
Socket underlying = new Socket(torProxy);

InetSocketAddress unresolvedAdr = InetSocketAddress.createUnresolved("stackoverflow.com", 80);

try {
underlying.connect(unresolvedAdr);

BufferedWriter out = new BufferedWriter( new OutputStreamWriter(underlying.getOutputStream()));
BufferedReader in = new BufferedReader( new InputStreamReader(underlying.getInputStream()));

out.write("GET / HTTP/1.1\nHost: stackoverflow.com\n\n");
out.flush();
String line;
while((line = in.readLine()) != null){
System.out.println(line);
}
} catch (IOException e) {

} finally {
try {
underlying.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}

如何强制 Java 通过 Tor 代理进行查找?

最佳答案

通过 Tor 代理执行此操作很困难,因为如果不修改或实现自己的 NetAddressNameService,则无法通过 Tor 路由 InetAddressNameservice。正常的 nslookups 通过端口 53 (UDP) 完成,Tor 目前仅支持 TCP。

因此,使用 Tor 方式解析主机名,您需要实现自己的“Tor 客户端”,因为您需要发送 RELAY_RESOLVE 单元(检查 tor-spec.txt chapter 6.4 )

一个简单的选择是使用 SilverTunnel-NG 。该库还使用 Tor 网络进行 ns 查找。

关于java - 如何使用 Java 通过 Tor 代理进行 DNS 查找?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17918865/

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