2012-12-30 16 views
3

我們在Linux w.r.t上遇到了一個相當奇怪的行爲。 Java DNS查找(更新:也發生在Mac OS X上 - 我錯了)。在Linux上,Java在打開套接字時發出反向DNS查找。爲什麼,我該如何阻止它?

我們將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組件的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 /地址碼,並且沒有可能暗示反向DNS查找的呼叫被執行。

坦率地說,我們甚至不知道要尋找什麼。

我們最大的問題是我們正在編寫一個高性能的抓取程序,雖然我們試圖仔細地調整DNS查找速度,但是我們無法對這種反向查找進行調整,因爲它們是在打開套接字時執行的,這發生在爬行線程的數量是成千上萬。

另一個信息,wget也執行反向DNS查詢,但端口80上的nc(當然不提供任何內容)不會。

像往常一樣,任何幫助表示讚賞。

+0

閱讀Apache庫的來源,甚至是文檔。這可能是這裏的演員。 – bmargulies

+0

正如我在下面回答的,它也使用URL.openConnection()。getContent(),所以它不能成爲Apache的問題。 – seba

回答

0

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

+0

這也是我的猜想,但是您是否有任何權威性參考文獻陳述這一點? – seba

0

最後,唯一真正的問題是我沒有給tcpdump -n選項。我觀察到的反向查找只是tcpdump的。

相關問題