不多说,直接上代码。
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.192 IP 地 址:172.17.31.1 子网掩码:255.255.0.0</span>
分析:红色为要抓取的IP地址跟子网掩码,蓝色为最后抓取的结果。下面附上doc下的ipconfig结果对比
版权声明:本文为博主原创文章,未经博主允许不得转载。
时间: 2024-10-22 07:22:20