標籤:java ip地址 子網路遮罩
不多說,直接上代碼。
package com.ckw.test;import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader;import java.util.*;import java.util.Map.Entry;public class TestOfSubNetMask { Map<String, String> map = new HashMap<String, String>(); String ipAddress; String subNetMask; boolean flag = false; //用來標記一對IP地址跟子網路遮罩 (位置相鄰的即為一對) //擷取相對應IP地址的子網路遮罩 public void getIPAddressAndMask() { String os = System.getProperty("os.name"); if (os != null && os.startsWith("Windows")) { try { String command = "cmd.exe /c ipconfig /all"; Process p = Runtime.getRuntime().exec(command); BufferedReader br = new BufferedReader(new InputStreamReader(p.getInputStream(), "gb2312")); String line; System.out.println("---------------------------------------------------------------"); while ((line = br.readLine()) != null) { System.out.println(line); //這句可以省略,主要是為了把所有的資訊列印出來方便對比 /* * 獲得機器IP地址 * 在以“IPv4”開頭的那一行擷取ip地址,英文版是以“IP Address”開頭 * 格式為: * IPv4 地址 . . . . . . . . . . . . : 10.10.116.132(首選)<span style="white-space:pre"></span>//見doc下的命令輸出 */ if (line.indexOf("IPv4 地址") > 0 || line.indexOf("IP Address") > 0) { int index = line.indexOf(":"); index += 2; ipAddress = line.substring(index); //去掉漢字 “10.10.116.132(首選)”<span style="white-space:pre"></span> int i; char [] array = ipAddress.toCharArray(); for(i=0; i<array.length; i++){ if(array[i]!='.' && (array[i]<'0'||array[i]>'9')) break; } ipAddress = ipAddress.substring(0, i); flag = true; //存在IP地址,必存在其相應的子網路遮罩 } /* * 獲得機器子網路遮罩 * 在以“子網路遮罩”開頭的那一行擷取子網路遮罩,英文版是以“Subnet Mask”開頭 * 格式為: * 子網路遮罩 . . . . . . . . . . . . : 255.255.255.192 */ if (flag==true && (line.indexOf("子網路遮罩 ") > 0 || line.indexOf("Subnet Mask") > 0)) { int index = line.indexOf(":"); index += 2; subNetMask = line.substring(index); flag = false; //消耗掉 map.put(ipAddress, subNetMask); } } br.close(); System.out.println("---------------------------------------------------------------"); } catch (IOException e) { e.printStackTrace(); } } } //主函數測試 public static void main(String args[]){ TestOfSubNetMask test = new TestOfSubNetMask(); test.getIPAddressAndMask(); Map<String, String> map = test.map; Iterator<Entry<String, String>> i = map.entrySet().iterator(); while(i.hasNext()){ Entry<String, String> e = i.next(); String ipAddress = e.getKey(); String subNetMask = e.getValue(); System.out.println("IP 地 址:" + ipAddress); System.out.println("子網路遮罩:" + subNetMask); } } }
結果為:
---------------------------------------------------------------Windows IP 配置 主機名稱 . . . . . . . . . . . . . : DADI 主 DNS 尾碼 . . . . . . . . . . . : 節點類型 . . . . . . . . . . . . : 混合 IP 路由已啟用 . . . . . . . . . . : 否 WINS 代理已啟用 . . . . . . . . . : 否無線區域網路適配器 無線網路串連 29: 串連特定的 DNS 尾碼 . . . . . . . : 描述. . . . . . . . . . . . . . . : Microsoft Virtual WiFi Miniport Adapter #26 物理地址. . . . . . . . . . . . . : 22-16-D8-C9-A3-B2 DHCP 已啟用 . . . . . . . . . . . : 否 自動設定已啟用. . . . . . . . . . : 是 本地連結 IPv6 地址. . . . . . . . : fe80::89eb:f7f1:e6b7:6133%74(首選) <span style="color:#ff0000;"> IPv4 地址 . . . . . . . . . . . . : 172.17.31.1(首選)</span> <span style="color:#ff0000;">子網路遮罩 . . . . . . . . . . . . : 255.255.0.0</span> 預設閘道. . . . . . . . . . . . . : DHCPv6 IAID . . . . . . . . . . . : 1512183512 DHCPv6 用戶端 DUID . . . . . . . : 00-01-00-01-19-03-EF-D5-08-60-6E-DC-A7-B7 DNS 伺服器 . . . . . . . . . . . : fec0:0:0:ffff::1%1 fec0:0:0:ffff::2%1 fec0:0:0:ffff::3%1 TCPIP 上的 NetBIOS . . . . . . . : 已啟用無線區域網路適配器 無線網路串連: 媒體狀態 . . . . . . . . . . . . : 媒體已斷開 串連特定的 DNS 尾碼 . . . . . . . : 描述. . . . . . . . . . . . . . . : Qualcomm Atheros AR9485 Wireless Network Adapter 物理地址. . . . . . . . . . . . . : 20-16-D8-C9-A3-B2 DHCP 已啟用 . . . . . . . . . . . : 是 自動設定已啟用. . . . . . . . . . : 是乙太網路適配器 本地串連: 串連特定的 DNS 尾碼 . . . . . . . : 描述. . . . . . . . . . . . . . . : Realtek PCIe GBE Family Controller 物理地址. . . . . . . . . . . . . : 08-60-6E-DC-A7-B7 DHCP 已啟用 . . . . . . . . . . . : 是 自動設定已啟用. . . . . . . . . . : 是 本地連結 IPv6 地址. . . . . . . . : fe80::c0c9:c8b6:4003:7976%12(首選) <span style="color:#ff0000;">IPv4 地址 . . . . . . . . . . . . : 10.10.116.132(首選) 子網路遮罩 . . . . . . . . . . . . : 255.255.255.192</span> 獲得租約的時間 . . . . . . . . . : 2015年7月18日 23:01:04 租約到期的時間 . . . . . . . . . : 2015年7月25日 23:01:02 預設閘道. . . . . . . . . . . . . : 10.10.116.129 DHCP 伺服器 . . . . . . . . . . . : 222.200.98.70 DHCPv6 IAID . . . . . . . . . . . : 252207214 DHCPv6 用戶端 DUID . . . . . . . : 00-01-00-01-19-03-EF-D5-08-60-6E-DC-A7-B7 DNS 伺服器 . . . . . . . . . . . : 202.96.128.86 202.116.128.1 TCPIP 上的 NetBIOS . . . . . . . : 已啟用隧道適配器 本地串連* 37: 串連特定的 DNS 尾碼 . . . . . . . : 描述. . . . . . . . . . . . . . . : Teredo Tunneling Pseudo-Interface 物理地址. . . . . . . . . . . . . : 00-00-00-00-00-00-00-E0 DHCP 已啟用 . . . . . . . . . . . : 否 自動設定已啟用. . . . . . . . . . : 是 IPv6 地址 . . . . . . . . . . . . : 2001:0:9d38:6ab8:aa:e4df:48c0:88c7(首選) 本地連結 IPv6 地址. . . . . . . . : fe80::aa:e4df:48c0:88c7%66(首選) 預設閘道. . . . . . . . . . . . . : :: TCPIP 上的 NetBIOS . . . . . . . : 已禁用隧道適配器 6TO4 Adapter: 媒體狀態 . . . . . . . . . . . . : 媒體已斷開 串連特定的 DNS 尾碼 . . . . . . . : 描述. . . . . . . . . . . . . . . : Microsoft 6to4 Adapter 物理地址. . . . . . . . . . . . . : 00-00-00-00-00-00-00-E0 DHCP 已啟用 . . . . . . . . . . . : 否 自動設定已啟用. . . . . . . . . . : 是隧道適配器 Reusable Microsoft 6To4 Adapter: 媒體狀態 . . . . . . . . . . . . : 媒體已斷開 串連特定的 DNS 尾碼 . . . . . . . : 描述. . . . . . . . . . . . . . . : Microsoft 6to4 Adapter #2 物理地址. . . . . . . . . . . . . : 00-00-00-00-00-00-00-E0 DHCP 已啟用 . . . . . . . . . . . : 否 自動設定已啟用. . . . . . . . . . : 是隧道適配器 本地串連* 17: 媒體狀態 . . . . . . . . . . . . : 媒體已斷開 串連特定的 DNS 尾碼 . . . . . . . : 描述. . . . . . . . . . . . . . . : Microsoft 6to4 Adapter #3 物理地址. . . . . . . . . . . . . : 00-00-00-00-00-00-00-E0 DHCP 已啟用 . . . . . . . . . . . : 否 自動設定已啟用. . . . . . . . . . : 是//部分已省略。。。。。。---------------------------------------------------------------
//這才是主要的輸出結果<span style="color:#000099;">IP 地 址:10.10.116.132子網路遮罩:255.255.255.192IP 地 址:172.17.31.1子網路遮罩:255.255.0.0</span>
分析:紅色為要抓取的IP地址跟子網路遮罩,藍色為最後抓取的結果。下面附上doc下的ipconfig結果對比
著作權聲明:本文為博主原創文章,未經博主允許不得轉載。
java 求主機IP地址及其相對應的子網路遮罩