在Linux上,Java在打开套接字时发出反向DNS查找。为什么,我怎么能阻止它?

时间:2012-12-30 01:54:32

标签: java linux dns

我们在Linux w.r.t上遇到了一个非常奇怪的行为。 Java DNS查找(更新:在Mac OS X-I上也发生了错误)。

我们将Google公共DNS服务器8.8.8.8设置为JVM DNS服务器。但是,系统(/etc/resolv.conf)服务器仍然是标准服务器ghost.di.unimi.it。

当使用InetAddress.getAllByName()或DNSJava的Addess.getAllByName()查找地址时,一切都按预期工作(特别是,这是DNSJava):

01:39:11.832438 IP nexus.law.di.unimi.it.33195 > google-public-dns-a.google.com.domain: 46509+ A? www.uffa.com. (30)
01:39:11.832820 IP nexus.law.di.unimi.it.52782 > ghost.di.unimi.it.domain: 42740+ PTR? 8.8.8.8.in-addr.arpa. (38)
01:39:11.833510 IP ghost.di.unimi.it.domain > nexus.law.di.unimi.it.52782: 42740 1/2/0 PTR google-public-dns-a.google.com. (128)
01:39:11.865165 IP google-public-dns-a.google.com.domain > nexus.law.di.unimi.it.33195: 46509 1/0/0 A 208.87.35.103 (46)

如您所见,我们解析www.uffa.com,然后在8.8.8.8中进行反向查找(在第一次查找时只发生一次)以进行身份​​验证。此时,www.uffa.com的IP地址被缓存,如果我们在TTL内再次进行调用,则不会进行查找。

尽管如此,当我们尝试使用Apache HTTP Component的DefaultHttpClient在www.uffa.com上打开套接字时,我们会看到:

01:40:06.892383 IP nexus.law.di.unimi.it.53977 > ghost.di.unimi.it.domain: 22255+ PTR? 103.35.87.208.in-addr.arpa. (44)
01:40:07.204359 IP ghost.di.unimi.it.domain > nexus.law.di.unimi.it.53977: 22255 1/2/2 PTR 208-87-35-103.securehost.com. (154)

也就是说,Java(或机器上的其他东西)正在执行www.uffa.com的地址到我们的系统服务器的反向查找,而不是谷歌的服务器。使用URL.openConnection()。getContent()。

也会发生同样的情况

我们使用BTrace来检测InetAddress /地址代码,并且不会执行任何可能意味着反向DNS查找的调用。

坦率地说,我们甚至不知道该寻找什么。

我们的一个大问题是我们正在编写一个高性能的爬虫,虽然我们试图仔细调查DNS查找,但我们无法采取任何措施来调整这种反向查找,因为它们是在套接字打开时执行的,在抓取数量为千的线程中发生。

另外一个信息,wget也执行反向DNS查找,但是端口80上的nc(当然没有提供任何内容)不会。

像往常一样,任何帮助都表示赞赏。

2 个答案:

答案 0 :(得分:0)

反向DNS查找由SecurityManager完成,您无法禁用它们。

答案 1 :(得分:0)

最后,唯一真正的问题是我没有给tcpdump -n选项。我观察的反向查找只是tcpdump的。