轉載自 這理
前言 :
這裡將透過 JDK 提供的 API 取出某台 Machine 上所有網卡以及其具備的 IP Address 的網路遮罩與對應廣播的位址. 事實上你也可以透過OS 本身的命令完成同樣的功能. 共有兩種方法,後面會給出這兩種方法的簡單問題總結,以及對比.
取得子網掩碼,方法一 : (JavaAPI)
InterfaceAddress.getNetworkPrefixLength() ,這個方法會返回子網遮罩前面的位數. 為了直觀,下面的例子會將其轉換為String並顯示出來。
關於下面的例子,還有幾點要說明 :
底下是範例代碼 :
取得子網掩碼,方法二 : (解析系統命令)
windows的命令ipconfig,linux的ifconfig,都會返回網絡的配置信息. 我們可以利用System.exec(...)對其調用,並捕獲輸出進行分析,便可以得到ip地址與子網遮罩的配對關係.
兩種方法的總結與對比 :
- 對比
上述兩種方法對比起來,自然是API的方式更直接一些,平台也更通用一些
- 問題點
但是這兩種方法都存在著一個問題 :
那就是,當雙網卡中的某一塊網卡的網線被拔掉的時候,便無法解析出該取得該網卡對應的IP以及子網掩碼. 因為我們的系統的near me視圖,管理的是數據庫中的歷史數據,而無需去網上進行即時搜索. 那麼此時,上述的那個網線掉了的網卡,所對應的數據庫中的歷史數據,便無法在near me畫面中顯示出來
- .總結
網卡這塊是這樣的(這是我以前不知道的一個認識) :
一個OS可以有多塊網卡,每塊網卡可以有多個IP地址,每個IP地址可以有自己獨有的一個子網掩碼(彼此可以不同)
所以java api的方法也是 :
先取得網卡的迭代器,然後再取得這個網卡對應的IP地址的迭代器,然後去的該地址對應的名字,掩碼,廣播地址等...
起初查找java api的時候,我是從InetAddress,Inet4Address,Inet6Address開始, 現在看來這些類是為了整個網絡上的所有ip所設計的, 尋找本機ip的相關信息應該從NetworkInterface以及他對應的InterfaceAddress找起.
補充說明 :
* How to get subnet mask using java ?
前言 :
這裡將透過 JDK 提供的 API 取出某台 Machine 上所有網卡以及其具備的 IP Address 的網路遮罩與對應廣播的位址. 事實上你也可以透過OS 本身的命令完成同樣的功能. 共有兩種方法,後面會給出這兩種方法的簡單問題總結,以及對比.
取得子網掩碼,方法一 : (JavaAPI)
InterfaceAddress.getNetworkPrefixLength() ,這個方法會返回子網遮罩前面的位數. 為了直觀,下面的例子會將其轉換為String並顯示出來。
關於下面的例子,還有幾點要說明 :
底下是範例代碼 :
取得子網掩碼,方法二 : (解析系統命令)
windows的命令ipconfig,linux的ifconfig,都會返回網絡的配置信息. 我們可以利用System.exec(...)對其調用,並捕獲輸出進行分析,便可以得到ip地址與子網遮罩的配對關係.
兩種方法的總結與對比 :
- 對比
上述兩種方法對比起來,自然是API的方式更直接一些,平台也更通用一些
- 問題點
但是這兩種方法都存在著一個問題 :
那就是,當雙網卡中的某一塊網卡的網線被拔掉的時候,便無法解析出該取得該網卡對應的IP以及子網掩碼. 因為我們的系統的near me視圖,管理的是數據庫中的歷史數據,而無需去網上進行即時搜索. 那麼此時,上述的那個網線掉了的網卡,所對應的數據庫中的歷史數據,便無法在near me畫面中顯示出來
- .總結
網卡這塊是這樣的(這是我以前不知道的一個認識) :
一個OS可以有多塊網卡,每塊網卡可以有多個IP地址,每個IP地址可以有自己獨有的一個子網掩碼(彼此可以不同)
所以java api的方法也是 :
先取得網卡的迭代器,然後再取得這個網卡對應的IP地址的迭代器,然後去的該地址對應的名字,掩碼,廣播地址等...
起初查找java api的時候,我是從InetAddress,Inet4Address,Inet6Address開始, 現在看來這些類是為了整個網絡上的所有ip所設計的, 尋找本機ip的相關信息應該從NetworkInterface以及他對應的InterfaceAddress找起.
補充說明 :
* How to get subnet mask using java ?
This message was edited 4 times. Last update was at 13/04/2011 13:54:08
沒有留言:
張貼留言