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.192
IP 地  址:172.17.31.1
子网掩码:255.255.0.0</span>

分析:红色为要抓取的IP地址跟子网掩码,蓝色为最后抓取的结果。下面附上doc下的ipconfig结果对比

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 07-18

java 求主机IP地址及其相对应的子网掩码的相关文章

java获取客户端IP地址和MAC地址

最近项目中要获得客户端的mac地址.服务端是移植的centos系统,arm架构的盒子.客户端是手机和移动设备.(其它场景应该也是类似的) 首先要获得ip地址: 根据客户端的http请求,利用request.getRemoteAddr()获取客户端Ip地址.在局域网内getRemoteAddr()和getRemoteHost()获得的结果相同.request.getRemoteAddr()是获得客户端的ip地址 .getRemoteHost()是获得客户端的主机名 .在有些场景中,可能有Squid

Java 获取真实IP地址

当项目发布在内网的时候,主机(如IP地址为192.168.10.88)访问局域网服务器的url,如http://192.168.10.142:8080/index/,用request.getRemoteAddr()获取到的主机IP地址是192.168.10.142,而不是真实的IP地址192.168.10.88.为了解决这个问题,可以采用以下方法避免该问题产生. public static String getIpAddress(HttpServletRequest request) {    

发起SSH攻击主机IP地址列表

发起SSH攻击主机IP地址列表 东北大学 http://antivirus.neu.edu.cn/scan/ssh.php 以下IP地址对SSH服务进行攻击,严重增加主机成为肉鸡的可能性.强烈建议网管对以下地址进行封锁. #==========开始复制========== ldd `which sshd` | grep libwrap # 确认sshd是否支持TCP Wrapper,输出类似:libwrap.so.0 => /lib/libwrap.so.0 (0x00bd1000) cd /u

获取请求主机IP地址,如果通过代理进来,则透过防火墙获取真实IP地址

/** * 获取请求主机IP地址,如果通过代理进来,则透过防火墙获取真实IP地址; * @Title: getIpAddress * @Description: TODO(这里用一句话描述这个方法的作用) * @param @param request * @param @return * @param @throws IOException 参数 * @return String 返回类型 * @throws */ public String getIpAddress(HttpServletR

配置LINUX主机IP地址并修改hosts文件和远程桌面

配置远程桌面 永久关掉放火墙 service iptables stop chkconfig iptables off 修改启动内核级别 # vi etc/inittab id:5:initdefault; 修改配置远程桌面 # vi /etc/gdm/custom.conf [xdmcp] Enable=1 [security] AllowRemoteRoot=true 重启服务器 配置主机IP地址并修改hosts文件 # vi /etc/hosts #Public 10.xx.40.44 d

java如何获取IP地址

import java.net.Inet6Address; import java.net.InetAddress; import java.net.NetworkInterface; import java.net.SocketException; import java.util.Enumeration; public class GetMacIp { /** * @Title: main * @Description: TODO * @param :@param args * @retur

3.IP地址分类_规划_子网掩码

IP地址分类_规划_子网掩码 3.1MAC地址 网卡的身份证号———MAC地址 MAC地址的长度为48位(6个字节),通常表示为12个16进制数,每2个16进制数之间用冒号隔开,如:08:00:20:0A:8C:6D就是一个MAC地址. 3.2更改MAC地址 方法一:硬件厂家提供的程序修改 方法二:在操作系统 3.3IP地址的作用 3.4IP地址分类 A:(0.0.0.0-127.255.255.255) 255.0.0.0 B:(128.0.0.0-191.255.255.255)255.25

Java如何从IP地址查找主机名?

在Java编程中,如何从IP地址查询出主机名? 以下示例显示了如何通过net.InetAddress类的InetAddress.getByName()方法将指定的IP地址查到主机名称. package com.yiibai; import java.net.InetAddress; public class HostSpecificByIP { public static void main(String[] argv) throws Exception { InetAddress addr =

Java获取系统IP地址

在一个项目中如果你想获取系统的ip地址那么可能许多同学在想那是多么容易,但是如果在多种操作系统貌似就不那么简单了,下面看看怎么获取系统的ip地址的. package easyway.tbs.commons; import java.net.InetAddress; import java.net.NetworkInterface; import java.net.SocketException; import java.net.UnknownHostException; import java.