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

标签 java linux dns

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

我们将 Google 公共(public) 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 组件的 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 的地址执行反向查找到我们的系统服务器,而不是 Google 的服务器。使用 URL.openConnection().getContent() 也会发生同样的情况。

我们使用 BTrace 检测 InetAddress/Address 代码,没有执行任何可能暗示反向 DNS 查找的调用。

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

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

还有一个附加信息,wget 也执行反向 DNS 查找,但端口 80 上的 nc(当然什么也不提供)不会。

像往常一样,我们将不胜感激。

最佳答案

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

关于java - 在 Linux 上,Java 在打开套接字时发出反向 DNS 查找。为什么,我怎样才能阻止它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14087634/

相关文章:

java - 如何反转包含 Set<Integer> 的 map ?

linux - d2 : not getting any backtrace info

dns - 为什么域名是倒退的?

javascript - 在 Javascript 中读取请求 header

php - Linux 的 cron 是异步的还是同步的?

azure - Azure 的通配符子域重定向

java - 复合模式和 instanceof

java - 暂停并执行JSP文件

java - 观看大量目录的最佳方式?

linux - 通过 netcat/socat 连续发送文件