2011-11-15 82 views
6

我需要的應用程序中的網絡配置信息多於java.net.NetworkInterfacejava.net.InetAddress提供的信息。我希望包含子網,網關和DNS服務器等信息,但代碼需要可移植到Windows和Linux平臺。在Windows和Linux平臺上使用Java獲取網絡信息

我已經通過爲Windows執行Runtime.getRuntime().exec("ipconfig")和針對Linux執行Runtime.getRuntime().exec("ifconfig")來分析結果。也許有更好的方法來做到這一點或我可以使用的開源項目。

預先感謝能引導我朝着正確的方向

+0

調用ifconfig和ipconfig中斷使用的可移植性。你可以發佈你現有的代碼嗎? – Woot4Moo

+0

我做了一個工廠方法來調用每個操作系統的獨立實現。對於Windows,我打電話'ipconfig/all'並解析結果。對於Linux,我打電話'ifconfig','route -n'和'cat /etc/resolv.conf'。 –

+1

此外,某些linux發行版的默認安裝不在路徑中包含/ sbin,因此調用可能會失敗,具體取決於用戶 –

回答

0

你可以在本機代碼執行,並使用JNI任何想法。 然後發佈.dll的windows,以及.so(或源代碼)的linux, ,雖然這可能不比'exec'解決方案好很多。

1

如果您正在考慮更好更強大的解決方案,您可以使用SNMP(簡單網絡管理協議)的思想。有幾種API可供使用,SNMP4J是最有名的開源軟件。由於SNMP支持跨多個操作系統,甚至交換機和路由器,使用它可能是您想要的深入網絡級別的統計信息。但如果您想要更簡單的解決方案,那麼可以使用Sigar API,它支持許多操作系統,包括Windows和linux.Sigar的一個問題是,它是根據GPL授權的,它禁止你在商業項目中部署它。

+0

只要軟件的用戶不需要安裝和配置SNMP,SNMP就是很好的選擇.SIGAR看起來不錯,與處理特定於操作系統的高級API相比,它更易於使用。例如。 Linux的netlink api可以提供大部分的信息,但是相當可怕。 – bew

+0

@Madhu Sudhan Sigar包裏面有Apache 2.0許可證。你確定GPL嗎? – tuxSlayer

+0

我不確定授權,但我認爲它不能部署在商業項目中。只要將一封郵件發送給sigar銷售團隊就授權。我相信他們可以在這種情況下幫助您更好。 – Madusudanan

相關問題