正如标题所示,我目前正尝试通过代理解析主机名。
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代理进行查找?
答案 0 :(得分:1)
通过Tor代理执行此操作非常困难,因为在不修改或实现自己的NetAddressNameService的情况下,无法通过Tor路由InetAddressNameservice。 正常nslookups通过端口53(UDP)完成,Tor目前只支持TCP。
因此,使用解决主机名的Tor方式,您需要实现自己的“Tor-client”,因为您需要发送RELAY_RESOLVE单元格(检查tor-spec.txt chapter 6.4)
一个简单的选择是使用SilverTunnel-NG。 该库还使用Tor网络进行ns查找。