`
kayo
  • 浏览: 560388 次
  • 性别: Icon_minigender_1
  • 来自: 安徽
社区版块
存档分类
最新评论

用java获得MAC地址

阅读更多
package com.etong.bms;

import java.io.BufferedInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.InetAddress;
import java.util.StringTokenizer;

import com.sun.org.apache.xerces.internal.impl.xpath.regex.ParseException;

public final class GetMacAddr {
	private final static String getMacAddress() throws IOException {
		String os = System.getProperty("os.name");

		try {
			if (os.startsWith("Windows")) {
				return windowsParseMacAddress(windowsRunIpConfigCommand());
			} else if (os.startsWith("Linux")) {
				return linuxParseMacAddress(linuxRunIfConfigCommand());
			} else {
				throw new IOException("unknown operating system: " + os);
			}
		} catch (ParseException ex) {
			ex.printStackTrace();
			throw new IOException(ex.getMessage());
		}
	}

	/*
	 * Linux stuff
	 */
	private final static String linuxParseMacAddress(String ipConfigResponse)
			throws ParseException {
		String localHost = null;
		try {
			localHost = InetAddress.getLocalHost().getHostAddress();
		} catch (java.net.UnknownHostException ex) {
			ex.printStackTrace();
			throw new ParseException(ex.getMessage(), 0);
		}

		StringTokenizer tokenizer = new StringTokenizer(ipConfigResponse, "\n");
		String lastMacAddress = null;

		while (tokenizer.hasMoreTokens()) {
			String line = tokenizer.nextToken().trim();
			boolean containsLocalHost = line.indexOf(localHost) >= 0;

			// see if line contains IP address
			if (containsLocalHost && lastMacAddress != null) {
				return lastMacAddress;
			}

			// see if line contains MAC address
			int macAddressPosition = line.indexOf("HWaddr");
			if (macAddressPosition <= 0)
				continue;

			String macAddressCandidate = line.substring(macAddressPosition + 6)
					.trim();
			if (linuxIsMacAddress(macAddressCandidate)) {
				lastMacAddress = macAddressCandidate;
				continue;
			}
		}

		ParseException ex = new ParseException("cannot read MAC address for "
				+ localHost + " from [" + ipConfigResponse + "]", 0);
		ex.printStackTrace();
		throw ex;
	}

	private final static boolean linuxIsMacAddress(String macAddressCandidate) {
		// TODO: use a smart regular expression
		if (macAddressCandidate.length() != 17)
			return false;
		return true;
	}

	private final static String linuxRunIfConfigCommand() throws IOException {
		Process p = Runtime.getRuntime().exec("ifconfig");
		InputStream stdoutStream = new BufferedInputStream(p.getInputStream());

		StringBuffer buffer = new StringBuffer();
		for (;;) {
			int c = stdoutStream.read();
			if (c == -1)
				break;
			buffer.append((char) c);
		}
		String outputText = buffer.toString();

		stdoutStream.close();

		return outputText;
	}

	/*
	 * Windows stuff
	 */
	private final static String windowsParseMacAddress(String ipConfigResponse)
			throws ParseException {
		String localHost = null;
		try {
			localHost = InetAddress.getLocalHost().getHostAddress();
		} catch (java.net.UnknownHostException ex) {
			ex.printStackTrace();
			throw new ParseException(ex.getMessage(), 0);
		}

		StringTokenizer tokenizer = new StringTokenizer(ipConfigResponse, "\n");
		String lastMacAddress = null;

		while (tokenizer.hasMoreTokens()) {
			String line = tokenizer.nextToken().trim();

			// see if line contains IP address
			if (line.endsWith(localHost) && lastMacAddress != null) {
				return lastMacAddress;
			}

			// see if line contains MAC address
			int macAddressPosition = line.indexOf(":");
			if (macAddressPosition <= 0)
				continue;

			String macAddressCandidate = line.substring(macAddressPosition + 1)
					.trim();
			if (windowsIsMacAddress(macAddressCandidate)) {
				lastMacAddress = macAddressCandidate;
				continue;
			}
		}

		ParseException ex = new ParseException("cannot read MAC address from ["
				+ ipConfigResponse + "]", 0);
		ex.printStackTrace();
		throw ex;
	}

	private final static boolean windowsIsMacAddress(String macAddressCandidate) {
		// TODO: use a smart regular expression
		if (macAddressCandidate.length() != 17)
			return false;

		return true;
	}

	private final static String windowsRunIpConfigCommand() throws IOException {
		Process p = Runtime.getRuntime().exec("ipconfig /all");
		InputStream stdoutStream = new BufferedInputStream(p.getInputStream());

		StringBuffer buffer = new StringBuffer();
		for (;;) {
			int c = stdoutStream.read();
			if (c == -1)
				break;
			buffer.append((char) c);
		}
		String outputText = buffer.toString();

		stdoutStream.close();

		return outputText;
	}

	/*
	 * Main
	 */
	public final static void main(String[] args) {
		try {
			System.out.println("Network infos");

			System.out.println(" Operating System: "
					+ System.getProperty("os.name"));
			System.out.println(" IP/Localhost: "
					+ InetAddress.getLocalHost().getHostAddress());
			System.out.println(" MAC Address: " + getMacAddress());
		} catch (Throwable t) {
			t.printStackTrace();
		}
	}
}

 

分享到:
评论
1 楼 kakamimika 2010-08-25  
不错 学习了

相关推荐

    java 获取客户端ip mac地址

    这段代码使用`Runtime.getRuntime().exec()`方法执行命令行指令,然后通过读取输出流的方式获取MAC地址。 #### 三、在Linux环境下获取IP地址 在Linux环境中,可以通过`InetAddress`类来获取主机的IP地址。但是需要...

    java获取客户端mac地址

    执行main方法获取mac地址,最权威的demo自己测试已经正常使用。网上基本都是假的获取不到,只有我这个才是最方便的

    如何使用Java代码获取Android移动终端Mac地址.zip

    以下将详细介绍如何使用Java代码在Android中获取Mac地址。 1. **获取Mac地址的基础概念** - **Mac地址**:Media Access Control (MAC) 地址是一个48位的二进制数字,通常表示为12个16进制数,例如`00:11:22:33:44:...

    通过java获取远程机器mac地址

    在对网内主机进行监控时需要通过java获取远程机器的mac地址

    JAVA_MAC地址校验和转换

    - **校验物理唯一性**:如果需要确保MAC地址在实际网络中是唯一的,可以查询网络接口或使用第三方库,如`java.net.NetworkInterface`类来获取和验证。 3. **MAC地址转换**: - **二进制与十六进制转换**:可以...

    java中通过request获取IP以及MAC地址.java

    获取用户请求IP地址 根据IP地址获取mac地址

    java获取mac地址

    java获取mac,通过命令获取裁剪后得到想要的内容

    java编程实现获取服务器IP地址及MAC地址的方法

    至于获取MAC地址,这需要用到`NetworkInterface`类的`getHardwareAddress()`方法。以下是一个获取MAC地址的示例: ```java public static String getLocalMACAddress() { String macAddress = ""; try { ...

    java获取客户端ip及mac地址

    ### Java 获取客户端 IP 地址 在 Web 开发中,获取客户端 IP 地址是一项非常重要的功能,尤其是在需要记录用户活动、实现地理位置定位...以上就是关于如何在 Java 中获取客户端 IP 地址及 MAC 地址的相关知识点介绍。

    java通过ip获取mac地址的工具

    java中通过ip获取远程客户端的mac地址,支持跨平台

    java获取不同操作系统名称及Mac地址

    java获取不同操作系统的名称以及mac地址工具类,例如:windows,Linux,Unix等

    Java内嵌Chrome浏览器 并实现web项目获取MAC地址

    在Java中获取MAC地址通常涉及网络接口的查询。以下是一个简单的示例: - 引入所需库: ```java import java.net.NetworkInterface; import java.net.SocketException; import java.util.Enumeration; ``` - ...

    java获取本机网卡的MAC地址

    在Java中,可以通过调用`Runtime.getRuntime().exec()`方法执行操作系统级别的命令来获取MAC地址。此方法适用于Windows和Unix/Linux系统。具体来说,对于Windows系统,我们通常使用`ipconfig /all`命令;而对于Unix/...

    用java实现获取MAC地址的方法

    ### 使用Java实现获取MAC地址的方法 #### 背景与目的 在计算机网络管理或安全领域,有时需要获取远程主机的MAC地址来进行设备识别或跟踪。本文将介绍一种使用Java编程语言来实现获取本地或远程计算机MAC地址的方法...

    java获取网卡MAC地址.rar

    首先,我们来看`MacAddressHelper.java`这个文件,它应该是一个用于获取MAC地址的辅助类。这个类可能包含了一个或多个方法,其中核心方法可能是`getMacAddress()`。下面是一个可能的`MacAddressHelper`类实现: ```...

    java通过ip获取mac地址源代码.rar

    4. **获取MAC地址**:使用`NetworkInterface.getHardwareAddress()`方法从匹配的接口获取MAC地址。 代码中可能会包含异常处理,因为某些接口可能不可用或者没有硬件地址。此外,对于IPv6支持,还需要额外的处理。 ...

    Java/JSP获得客户端网卡MAC地址的三种方法解析

    本文将深入解析在Java/JSP环境中获取客户端网卡MAC地址的三种常见方法,旨在为开发者提供全面而深入的理解。 ### 方法一:通过Java NIO(非阻塞I/O)库 Java NIO库提供了访问底层网络接口的能力,从而可以获取包括...

    跨网段获取远程主机MAC地址的方法与java实现

    ### 跨网段获取远程主机MAC地址:方法与Java实现 #### 引言与背景 在计算机网络领域,MAC地址(Media Access Control Address)作为网卡的唯一标识,扮演着关键角色,尤其是在网络通信和安全监控中。然而,传统的...

    Java获取本机MAC地址IP地址主机名

    Java获取本机MAC地址IP地址主机名

Global site tag (gtag.js) - Google Analytics