`
yuelangyc
  • 浏览: 454658 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Java中获取windows、Linux和windows7的MAC地址

阅读更多
今天在完成任务的时候,遇到了需要对对应的MAC地址进行验证的方法,以为很简单就能过,鼓捣了半天以后才发现,我的机器是window7,查询出来是乱码,居然不给支持。没办法在网上继续找资料。终于找到了,贴上来,以备不时之需。
东西都有注释,自己看吧,

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.InetAddress;
import java.net.NetworkInterface;

/**
 * 与系统相关的一些常用工具方法.
 * 
 * @author lvbogun
 * @version 1.0.0
 */
public class SystemTool {

	/**
	 * 获取当前操作系统名称. return 操作系统名称 例如:windows xp,linux 等.
	 */
	public static String getOSName() {
		return System.getProperty("os.name").toLowerCase();
	}

	/**
	 * 获取unix网卡的mac地址. 非windows的系统默认调用本方法获取.
	 * 如果有特殊系统请继续扩充新的取mac地址方法.
	 * 
	 * @return mac地址
	 */
	public static String getUnixMACAddress() {
		String mac = null;
		BufferedReader bufferedReader = null;
		Process process = null;
		try {
			// linux下的命令,一般取eth0作为本地主网卡
			process = Runtime.getRuntime().exec("ifconfig eth0");
			// 显示信息中包含有mac地址信息
			bufferedReader = new BufferedReader(new InputStreamReader(
					process.getInputStream()));
			String line = null;
			int index = -1;
			while ((line = bufferedReader.readLine()) != null) {
				// 寻找标示字符串[hwaddr]
				index = line.toLowerCase().indexOf("hwaddr");
				if (index >= 0) {// 找到了
					// 取出mac地址并去除2边空格
					mac = line.substring(index + "hwaddr".length() + 1).trim();
					break;
				}
			}
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			try {
				if (bufferedReader != null) {
					bufferedReader.close();
				}
			} catch (IOException e1) {
				e1.printStackTrace();
			}
			bufferedReader = null;
			process = null;
		}
		return mac;
	}

	/**
	 * 获取widnows网卡的mac地址.
	 * 
	 * @return mac地址
	 */
	public static String getWindowsMACAddress() {
		String mac = null;
		BufferedReader bufferedReader = null;
		Process process = null;
		try {
			// windows下的命令,显示信息中包含有mac地址信息
			process = Runtime.getRuntime().exec("ipconfig /all");
			bufferedReader = new BufferedReader(new InputStreamReader(
					process.getInputStream()));
			String line = null;
			int index = -1;
			while ((line = bufferedReader.readLine()) != null) {
				System.out.println(line);
				// 寻找标示字符串[physical
				index = line.toLowerCase().indexOf("physical address");
				
				if (index >= 0) {// 找到了
					index = line.indexOf(":");// 寻找":"的位置
					if (index >= 0) {
						System.out.println(mac);
						// 取出mac地址并去除2边空格
						mac = line.substring(index + 1).trim();
					}
					break;
				}
			}
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			try {
				if (bufferedReader != null) {
					bufferedReader.close();
				}
			} catch (IOException e1) {
				e1.printStackTrace();
			}
			bufferedReader = null;
			process = null;
		}

		return mac;
	}

	/**
	 * windows 7 专用 获取MAC地址
	 * 
	 * @return
	 * @throws Exception
	 */
	public static String getMACAddress() throws Exception {
		
		// 获取本地IP对象
		InetAddress ia = InetAddress.getLocalHost();
		// 获得网络接口对象(即网卡),并得到mac地址,mac地址存在于一个byte数组中。
		byte[] mac = NetworkInterface.getByInetAddress(ia).getHardwareAddress();

		// 下面代码是把mac地址拼装成String
		StringBuffer sb = new StringBuffer();

		for (int i = 0; i < mac.length; i++) {
			if (i != 0) {
				sb.append("-");
			}
			// mac[i] & 0xFF 是为了把byte转化为正整数
			String s = Integer.toHexString(mac[i] & 0xFF);
			sb.append(s.length() == 1 ? 0 + s : s);
		}

		// 把字符串所有小写字母改为大写成为正规的mac地址并返回
		return sb.toString().toUpperCase();
	}

	/**
	 * 测试用的main方法.
	 * 
	 * @param argc 运行参数.
	 * @throws Exception
	 */
	public static void main(String[] argc) throws Exception {
		String os = getOSName();
		System.out.println(os);
		if (os.equals("windows 7")) {
			String mac = getMACAddress();
			System.out.println(mac);
		} else if (os.startsWith("windows")) {
			// 本地是windows
			String mac = getWindowsMACAddress();
			System.out.println(mac);
		} else {
			// 本地是非windows系统 一般就是unix
			String mac = getUnixMACAddress();
			System.out.println(mac);
		}
	}
}


找了很多都是只支持window和linux的。windows7 因为是中文,不能用同一个方法获取。只能另想办法了
分享到:
评论
2 楼 topbox163 2012-12-04  
bufferedReader = new BufferedReader(new InputStreamReader(process
.getInputStream(),"GBK"));
1 楼 railway 2012-04-10  
第124行的getHardwareAddress()方法是JDK1.6才有的,有没有办法支持JDK1.5啊?:
byte[] mac = NetworkInterface.getByInetAddress(ia).getHardwareAddress();

相关推荐

    JAVA得到网卡物理地址(windows和Linux)

    今天,我们将讨论如何使用 Java 获取网卡物理地址在 Windows 和 Linux 两个操作系统中。 在 Windows 操作系统中,获取网卡物理地址可以使用 ipconfig 命令。ipconfig 命令可以显示当前计算机的网络配置信息,包括...

    java获取linux服务器上的IP操作

    在本文中,我们将详细介绍Java获取Linux服务器上的IP操作,包括Linux服务器上的网络接口、回环接口、获取IP地址的方法等。 Linux服务器上的网络接口 在Linux服务器上,网络接口是用来发送和接受数据包的基本设备...

    java读取服务器硬件信息(windowx+linux+Mac OS)

    在Java编程中,读取服务器硬件信息是一项重要的任务,尤其对于跨平台的应用程序来说,能够兼容Windows、Linux和Mac OS等不同操作系统是必不可少的。本文将深入探讨如何使用Java来获取这些不同系统的硬件信息。 首先...

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

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

    java 获取客户端ip mac地址

    ### Java 获取客户端 IP 和 MAC 地址 在Java Web开发中,有时我们需要获取客户端的IP地址甚至是MAC地址,以便进行安全验证、用户行为追踪等操作。本文将详细介绍如何通过Java来实现这一功能。 #### 一、获取客户端...

    java获取客户端ip及mac地址

    这里提供了一个简单的示例,用于在 Windows 系统中通过 IP 地址获取 MAC 地址: ```java public String getMACAddress(String ip) { String str = ""; String macAddress = ""; try { Process p = Runtime....

    java通过正则表达式匹配获取MAC(支持windows和Linux)

    java通过正则表达式匹配获取MAC(支持windows和Linux)

    java获取本机网卡的MAC地址

    本文将详细介绍如何通过Java代码获取本机网卡的MAC地址,并针对不同的操作系统(如Windows与Unix/Linux)提供相应的实现方式。 #### 1. 概述 在Java中,可以通过调用`Runtime.getRuntime().exec()`方法执行操作...

    java log4j统一打印在user.dir目录下(windows、linux通用、不用考虑不同操作系统分隔符不一致的情况)

    总的来说,通过合理配置Log4j,可以轻松地实现跨平台的日志管理,使得在Windows和Linux系统中日志路径保持一致,同时也方便了日志的管理和分析。在`webapp`项目中,你可以将上述配置文件添加至类路径,并在代码中...

    获得 Linux window 的硬盘ID 和mac , ip 等信息(已测试)

    总结,本文详细介绍了如何在Linux和Windows操作系统中,利用Java获取硬盘ID(序列号)、MAC地址以及IP地址的方法。在实际应用中,可能需要根据具体的环境和需求进行相应的调整。希望这些信息对需要获取系统信息的...

    获取windows or unix系统下服务器MAC地址及服务器IP地址

    在Windows和Unix(包括Linux)系统下,获取这两种地址的方法有所不同。下面将详细介绍这两个操作系统下的实现方式以及提供的源码文件`GetMAC.java`。 ### Windows系统下获取MAC地址 在Windows系统中,可以使用`...

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

    通过上述代码,我们实现了使用Java获取远程主机MAC地址的功能。需要注意的是,这种方法受限于操作系统的限制,并且可能存在一定的安全风险。在生产环境中部署此类功能前,建议进行充分的测试并采取适当的安全措施。

    java JDK8 windows、mac、linux三平台安装包

    在Windows、Mac OS X(现在称为macOS)和Linux这三个主流操作系统上安装JDK8,是许多开发者进行Java编程的必备步骤。本教程将详细介绍在这三个平台上安装JDK8的步骤和注意事项。 ### Windows平台安装 1. **下载**:...

    php与java获得电脑mac地址

    在这个场景中,我们将探讨如何使用PHP和Java这两种编程语言在Windows和Linux操作系统上获取MAC地址。 首先,我们来看PHP如何获取MAC地址。在PHP中,没有内置的函数直接提供获取MAC地址的功能,但我们可以利用`exec`...

    jdk1.8、java8,包含windows、linux、mac三种版本

    这个压缩包文件包含了适用于Windows、Linux和Mac三种操作系统64位版本的JDK 1.8,确保了跨平台的兼容性。 Java 8在语言层面引入了一些重大改变,其中最显著的是Lambda表达式。Lambda表达式使得代码更加简洁,特别是...

    java获取mac地址

    总结来说,Java获取MAC地址的方法有两种:一是通过操作系统特定的命令,如`ifconfig`或`ipconfig`;二是利用Java内置的`java.net.NetworkInterface`类。选择哪种方法取决于项目需求,比如是否需要跨平台兼容,或者对...

    Appium-Inspector-2023.2.1 windows linux mac

    Appium Inspector 2023.2.1是一款强大的自动化测试工具,专为移动应用程序而设计,支持Windows、Linux和Mac操作系统。这个版本的更新带来了更先进的功能和优化,以帮助开发者和测试工程师高效地进行Appium自动化测试...

    免费下载java串口通信包windows+linux,32+64

    本文将详细介绍如何在Windows和Linux平台上,使用免费的Java串口通信包进行开发,以及如何处理32位和64位系统的兼容性问题。 首先,Java串口通信通常依赖于RXTX库,这是一个开源项目,提供了Java访问串行端口的能力...

    跨平台 获取本机IP/MAC地址,检测是否内网IP,字符串IP转换成Number地址

    在Windows系统中,可以使用Winsock API,而在Linux或Mac OS中,可以利用socket库和`ifconfig`命令。对于Java开发者,可以使用`java.net.NetworkInterface`类;对于Python程序员,可以利用`socket`和`os`模块。这些...

    获取mac地址的几种方法

    - **Java**:使用`java.net.NetworkInterface`类,遍历所有网络接口并获取MAC地址。 3. 系统管理工具 大多数操作系统都提供了图形界面的网络设置工具,用户可以在其中查看设备的MAC地址: - **Windows**:控制...

Global site tag (gtag.js) - Google Analytics