2012-08-14 29 views
3

在使用Java的InetAddress.getByName()來解析主機到IP我想使用谷歌的DNS而不是本地系統的默認。基於其他計算器問題,以及在http://docs.oracle.com/javase/6/docs/technotes/guides/net/properties.html提供的信息,我使用下面的設置適當的屬性:設置DNS屬性沒有任何作用

System.setProperty("sun.net.spi.nameservice.nameservers", "8.8.8.8"); 
System.setProperty("sun.net.spi.nameservice.provider.1", "dns,sun"); 

調用System.getProperty("sun.net.spi.nameservice.nameservers")稍後在程序中確認屬性設置爲8.8.8.8 - 然而,網絡流量清楚地顯示所有的DNS請求都被髮送到系統的默認值,而不是谷歌的DNS。讓Java使用所請求的DNS服務器還應該做些什麼?

+1

嘗試\的Windows \ System32 \ drivers下 – 2012-08-14 17:12:17

+0

這是在Linux機器(Ubuntu的),不運行下設置在主機文件sun.net.spi.nameservice.nameservers 8.8.8.8的Windows – Exupery 2012-08-14 17:31:50

回答

1

更一般地說,這是你可能必須設置在Java之外。對於JVM而言,將自己的網絡堆棧與OS提供的網絡堆棧並行是沒有意義的,因此DNS解析可能需要在操作系統級別進行配置。

如果DNS解析是您的應用程序的核心要求,它可能更有意義讓您自己執行解決方案,而不是通過正常的網絡庫(DNS解析作爲正常網絡操作的副作用)。我不懷疑你可以找到一個庫來幫助你創建查找請求。

0

嘗試在\ Windows \ System32 \ drivers下的主機文件中設置sun.net.spi.nameservice.nameservers 8.8.8.8。看起來像已經在您的主機文件sun.net.spi.nameservice.nameservers指向一些條目。所以嘗試設置嘗試設置sun.net.spi.nameservice.nameservers 8.8.8.8在最後的主機文件becoz主機文件獲取是主機名稱條目解決的第一個地方

+0

這是上運行一個Linux的盒子(Ubuntu),而不是Windows – Exupery 2012-08-14 17:32:50

1

我正面臨類似的問題。 clean-dns-server-in-jvm

我認爲你的問題並不是因爲設置DNS屬性不起作用,而是因爲你在代碼的後期設置了這些參數,或者可能是在第一次網絡連接之後。

嘗試把

System.setProperty("sun.net.spi.nameservice.nameservers", "8.8.8.8"); 
System.setProperty("sun.net.spi.nameservice.provider.1", "dns,sun"); 

你的主要的第一行,並告訴我。 好運

+0

它的錯誤,我有一個私人的DNS與一個特定的記錄:test.mytest.fr(一個Ubuntu上安裝的BIND9),這是沒有配置在我的操作系統。如果我ping一個cmd test.mytest.fr:沒有答案。如果我在我的java代碼中設置屬性sun.net.spi.nameservice.nameservers與我的Ubuntu的IP,並嘗試解決我的Java代碼中的test.mytest.fr,它成功了,如果我在Windows cmd重試,仍然沒有成功。你怎麼能解釋:) – zeraDev 2013-07-02 16:21:50

+0

這是在文檔(http://docs.oracle.com/javase/7/docs/technotes/guides/net/properties.html)解釋,當默認的DNS查找失敗它使用您設置的任何其他提供商(我已將相關摘錄添加爲您的問題的答案)。 – Exupery 2013-07-02 16:56:57

相關問題