java获取本机网卡的MAC地址

java获取本机网卡的MAC地址,/** * 测试用的main方法. * * @param argc * 运行参数. */ public static void main(String[] argc) { String os = getOSName(); System.out.println(os); if(os.startsWith("windows")){ //本地是windows String mac = getWindowsMACAddress(); System.out.println(mac); }else{ //本地是非windows系统 一般就是unix String mac = getUnixMACAddress(); System.out.println(mac); } } ### Java 获取本机网卡的MAC地址 在Java开发中,有时我们需要获取当前计算机的MAC地址,例如在网络设备管理或安全认证等场景中。本文将详细介绍如何通过Java代码获取本机网卡的MAC地址,并针对不同的操作系统(如Windows与Unix/Linux)提供相应的实现方式。 #### 1. 概述 在Java中,可以通过调用`Runtime.getRuntime().exec()`方法执行操作系统级别的命令来获取MAC地址。此方法适用于Windows和Unix/Linux系统。具体来说,对于Windows系统,我们通常使用`ipconfig /all`命令;而对于Unix/Linux系统,则使用`ifconfig eth0`命令。这两种命令都能输出包含MAC地址的信息,然后我们可以通过解析这些输出来提取出MAC地址。 #### 2. 代码分析 导入必要的类库: ```java import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; ``` 接下来是关键的方法实现: - `getOSName()`:获取当前操作系统的名称。 - `getUnixMACAddress()`:获取Unix/Linux系统的MAC地址。 - `getWindowsMACAddress()`:获取Windows系统的MAC地址。 #### 3. 获取操作系统名称 为了区分不同的操作系统并执行相应的命令,我们需要先确定当前运行的是哪种类型的操作系统。这可以通过`System.getProperty("os.name")`方法来实现,该方法返回一个字符串表示当前运行的操作系统名称,例如"Windows 10"、"Linux"等。 ```java public static String getOSName() { return System.getProperty("os.name").toLowerCase(); } ``` #### 4. 获取Unix/Linux MAC地址 在Unix/Linux系统中,可以通过执行`ifconfig eth0`命令来获取网络接口eth0的信息,其中包含了MAC地址。下面是如何解析输出以获取MAC地址的具体步骤: 1. 使用`Runtime.getRuntime().exec()`执行`ifconfig eth0`命令。 2. 读取命令的输出流。 3. 在输出流中查找含有“hwaddr”的行,这一行包含了MAC地址。 4. 提取MAC地址并返回。 ```java public static String getUnixMACAddress() { String mac = null; BufferedReader bufferedReader = null; Process process = null; try { process = Runtime.getRuntime().exec("ifconfig eth0"); bufferedReader = new BufferedReader(new InputStreamReader(process.getInputStream())); String line = null; int index = -1; while ((line = bufferedReader.readLine()) != null) { index = line.toLowerCase().indexOf("hwaddr"); if (index >= 0) { 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; } ``` #### 5. 获取Windows MAC地址 对于Windows系统,我们可以使用`ipconfig /all`命令来获取所有网络接口的配置信息。下面是如何解析输出以获取MAC地址的具体步骤: 1. 使用`Runtime.getRuntime().exec()`执行`ipconfig /all`命令。 2. 读取命令的输出流。 3. 在输出流中查找含有“Physical Address”的行,这一行包含了MAC地址。 4. 提取MAC地址并返回。 ```java public static String getWindowsMACAddress() { String mac = null; BufferedReader bufferedReader = null; Process process = null; try { process = Runtime.getRuntime().exec("ipconfig /all"); bufferedReader = new BufferedReader(new InputStreamReader(process.getInputStream())); String line = null; int index = -1; while ((line = bufferedReader.readLine()) != null) { index = line.toLowerCase().indexOf("physical address"); if (index >= 0) { index = line.indexOf(":"); if (index >= 0) { 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; } ``` #### 6. 主方法 主方法用于测试上述功能: ```java public static void main(String[] args) { String os = getOSName(); System.out.println(os); if (os.startsWith("windows")) { String mac = getWindowsMACAddress(); System.out.println(mac); } else { String mac = getUnixMACAddress(); System.out.println(mac); } } ``` 该方法首先获取当前的操作系统名称,然后根据名称调用相应的获取MAC地址的方法,并打印结果。 #### 7. 总结 通过以上步骤,我们可以有效地在Java程序中获取本机网卡的MAC地址。这种方法不仅简单实用,而且兼容性好,能够适应多种操作系统环境。需要注意的是,在实际应用中可能还需要考虑到权限问题以及异常处理等细节,以确保程序的稳定性和安全性。









* Created on 2005-6-5
* Author stephen
* Email zhoujianqiang AT gmail DOT com
* CopyRight(C)2005-2008 , All rights reserved.
*/
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
/**
* 与系统相关的一些常用工具方法.
*
* @author stephen
* @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地址

- kelp12092024-03-06没用,返回null
- xy1215782014-06-03用不了哦,亲

- 粉丝: 6
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


最新资源
- 西门子S7-1215与MCGS7.7触摸屏联机程序:交通灯控制系统的人行道功能设计与实现
- 基于YALMIP的微网优化调度模型构建与应用
- 模拟IC设计教程:Buck型DCDC电路与LTC3542高效转换电路设计详解
- 激光技术中COMSOL仿真模拟多组分粉末熔化凝固过程的热行为及性能影响
- COMSOL多裂纹水力压裂扩展技术:实现拉伸与压缩破坏的高效模拟 - 流体动力学 v2.5
- IMG_20250730_114130.jpg
- 基于断裂力学理论的COMSOL相场法模拟横观各向同性介质水力压裂裂纹扩展
- 【地理信息系统】基于EE的爱荷华州城市扩展分析:1985-2025年建成区面积变化与可视化展示系统构建
- 简单的labview上位机搭建
- WPF中实现加载等待动画(Loading)的实现
- 电商购物平台 Node+Express+Vue.js 2025毕业设计
- 高效精准的循环载荷试验机:快速进行各类材料低频疲劳测试,涵盖20N至200KN大载荷范围,确保应力应变曲线精度至0.001N - 极速代测
- 理发店管理系统 Node+Express+Vue.js 2025毕业设计
- 社会养老平台 Node+Express+Vue.js 2025毕业设计
- RK3568下的进程间通信:UDP实现MASH网络
- 在线教育平台 SpringCloud+Vue.js 2025毕业设计


