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(首選)      //見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(首選)”
						 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(首選) 
   IPv4 地址 . . . . . . . . . . . . : 172.17.31.1(首選)
   子網掩碼  . . . . . . . . . . . . : 255.255.0.0
   默認網關. . . . . . . . . . . . . : 
   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(首選) 
   IPv4 地址 . . . . . . . . . . . . : 10.10.116.132(首選) 
   子網掩碼  . . . . . . . . . . . . : 255.255.255.192
   獲得租約的時間  . . . . . . . . . : 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 已啓用 . . . . . . . . . . . : 否
   自動配置已啓用. . . . . . . . . . : 是

//部分已省略。。。。。。
---------------------------------------------------------------
//這纔是主要的輸出結果
IP 地  址:10.10.116.132
子網掩碼:255.255.255.192
IP 地  址:172.17.31.1
子網掩碼:255.255.0.0


下面附上doc下的ipconfig結果對比



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章