`
stephen830
  • 浏览: 3010247 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

java获取本机网卡的MAC地址

    博客分类:
  • java
阅读更多
★★★ 本篇为原创,需要引用转载的朋友请注明:《 http://stephen830.iteye.com/blog/255210 》 谢谢支持! ★★★

软件项目或者产品有时候会用到本机网卡的物理MAC地址,例如结合MAC地址进行登录验证等等,当然这种项目一般在局域网内运行,能相对提高系统的安全性。

下面列出了java读取MAC地址的工具方法,可以读取windows和非windows操作系统(linux,unix)下的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地址
	 */
	public static String getUnixMACAddress() {
		String mac = null;
		BufferedReader bufferedReader = null;
		Process process = null;
		try {
			process = Runtime.getRuntime().exec("ifconfig eth0");// linux下的命令,一般取eth0作为本地主网卡 显示信息中包含有mac地址信息
			bufferedReader = new BufferedReader(new InputStreamReader(process
					.getInputStream()));
			String line = null;
			int index = -1;
			while ((line = bufferedReader.readLine()) != null) {
				index = line.toLowerCase().indexOf("hwaddr");// 寻找标示字符串[hwaddr]
				if (index >= 0) {// 找到了
					mac = line.substring(index +"hwaddr".length()+ 1).trim();//  取出mac地址并去除2边空格
					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 {
			process = Runtime.getRuntime().exec("ipconfig /all");// windows下的命令,显示信息中包含有mac地址信息
			bufferedReader = new BufferedReader(new InputStreamReader(process
					.getInputStream()));
			String line = null;
			int index = -1;
			while ((line = bufferedReader.readLine()) != null) {
				index = line.toLowerCase().indexOf("physical address");// 寻找标示字符串[physical address]
				if (index >= 0) {// 找到了
					index = line.indexOf(":");// 寻找":"的位置
					if (index>=0) {
						mac = line.substring(index + 1).trim();//  取出mac地址并去除2边空格
					}
					break;
				}
			}
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			try {
				if (bufferedReader != null) {
					bufferedReader.close();
				}
			} catch (IOException e1) {
				e1.printStackTrace();
			}
			bufferedReader = null;
			process = null;
		}

		return 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);
		}
	}
}




分享知识,分享快乐,希望文章能给需要的朋友带来小小的帮助。

分享到:
评论
12 楼 feng5199 2011-11-11  
Windows7获取的是乱码,没法查找
11 楼 FlashHorse 2011-11-10  
楼主 window 7貌似不行呀
10 楼 菜菜天堂 2009-10-10  
机器上安装了VMware的虚拟机,使用ipconfig /all 指令会显示好几个,最好加上个判断是否是本地连接的语句。
就像下面实际的是00-03-53-77-E1-32,而程序遇到虚拟机的00-50-56-C0-00-08就算获取到了。。

Windows IP Configuration

        Host Name . . . . . . . . . . . . : www-yokli-test
        Primary Dns Suffix  . . . . . . . :
        Node Type . . . . . . . . . . . . : Hybrid
        IP Routing Enabled. . . . . . . . : No
        WINS Proxy Enabled. . . . . . . . : No
Ethernet adapter VMware Network Adapter VMnet8:

        Connection-specific DNS Suffix  . :
        Description . . . . . . . . . . . : VMware Virtual Ethernet Adapter for
VMnet8
        Physical Address. . . . . . . . . : 00-50-56-C0-00-08
        Dhcp Enabled. . . . . . . . . . . : No
        IP Address. . . . . . . . . . . . : 192.168.184.1
        Subnet Mask . . . . . . . . . . . : 255.255.255.0
        Default Gateway . . . . . . . . . :

Ethernet adapter VMware Network Adapter VMnet1:

        Connection-specific DNS Suffix  . :
        Description . . . . . . . . . . . : VMware Virtual Ethernet Adapter for
VMnet1
        Physical Address. . . . . . . . . : 00-50-56-C0-00-01
        Dhcp Enabled. . . . . . . . . . . : No
        IP Address. . . . . . . . . . . . : 192.168.81.1
        Subnet Mask . . . . . . . . . . . : 255.255.255.0
        Default Gateway . . . . . . . . . :

Ethernet adapter 本地连接:

        Connection-specific DNS Suffix  . : eddd.com.cn
        Description . . . . . . . . . . . : Broadcom NetLink (TM) Gigabit Ethern
et
        Physical Address. . . . . . . . . : 00-03-53-77-E1-32
        Dhcp Enabled. . . . . . . . . . . : Yes
        Autoconfiguration Enabled . . . . : Yes
        IP Address. . . . . . . . . . . . : 192.168.42.41
        Subnet Mask . . . . . . . . . . . : 255.255.255.0
        Default Gateway . . . . . . . . . : 192.168.42.254
        DHCP Server . . . . . . . . . . . : 192.168.42.254
9 楼 ivyloo 2009-06-01  
很有用,谢谢了!
8 楼 netstorm 2009-03-31  
搞成数组返回合适点, 特别是笔记本肯定是2个网卡了
另外最好取已连接网卡的物理地址, 比如像我现在是网线连接的,却取了个无线网卡的mac
7 楼 mum0532javaeye 2009-03-31  
论坛的回复机制很垃圾,很浪费别人的宝贵时间。
楼主的帖子很有意义,收藏了
6 楼 oldman 2009-02-27  
呵呵,很有意思。
5 楼 rich130 2009-02-22  
学到知道精通为止
4 楼 danjingwu 2008-10-31  
不错,学习
3 楼 stephen830 2008-10-30  
daiwenting2601 写道

不错,不错,,支持楼主

2 楼 daiwenting2601 2008-10-30  
不错,不错,,支持楼主
1 楼 srdrm 2008-10-20  
这招牛,呵呵

相关推荐

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

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

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

    JAVA 获取网卡物理地址(Windows 和 Linux) 在 Java 中获取网卡物理地址是一项常见的需求,特别是在开发网络相关的应用程序时。网卡物理地址,也称为 MAC 地址,是一个唯一的识别码,用来标识网络设备。今天,我们...

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

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

    Java中获取IP地址,主机名称,网卡地址

    Java 中获取 IP 地址、主机名称、网卡地址 Java 中获取 IP 地址、主机名称、网卡地址是 NETWORK 编程中的一个重要主题。在 Java 中,我们可以使用 InetAddress 类和 Runtime 类来获取这些信息。下面我们来详细介绍...

    java获取网卡MAC地址.rar

    在Java编程中,获取计算机硬件信息是常见的需求之一,其中之一就是获取网卡(Network Interface Card,简称NIC)的物理地址,也就是MAC地址。MAC地址是一个唯一标识网络接口的硬件地址,通常由六组两进制数字组成,...

    java 获取客户端ip mac地址

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

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

    在Java编程中,获取服务器的IP地址和MAC地址是常见的需求,特别是在网络通信和系统管理中。本篇文章将详细介绍如何使用Java实现这一功能,包括针对单网卡和多网卡环境的情况。 首先,获取服务器的IP地址通常涉及到`...

    MacBindingTool_程序启动绑定MAC地址_RSA加密MAC地址绑定_获取本机所有网卡MAC地址_

    在Linux和Windows环境下,获取本机所有网卡MAC地址的方法略有不同。在Linux中,可以通过`ifconfig`命令或`/sys/class/net`目录下的文件系统接口来获取;而在Windows中,可以使用WMI(Windows Management ...

    JAVA 获取本机的(所有)MAC地址

    java 程序, 亲测。 获取计算机的网卡IP地址。 runttime 的调用。

    java获取Centos7服务器网卡ip 子网掩码 默认网关 DNS 同时设置网卡 及 重启网卡参考

    java获取Centos7服务器网卡ip 子网掩码 默认网关 DNS 同时设置网卡 及 重启网卡参考

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

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

    java 获取本机mac地址

    允许这个测试类,就可以轻松的获取到本地连接的mac网卡地址了,就可以作为设备的唯一编码。

    获取网卡MAC地址 获取网卡MAC地址

    获取网卡MAC地址是网络管理、设备识别或者安全验证等场景中的常见需求。在不同的操作系统中,获取MAC地址的方法略有不同。以下是一些主要操作系统的获取方法: 1. **Windows系统**: - 命令行:通过运行`cmd`打开...

    java获取网卡地址

    在Java编程环境中,获取网络接口(网卡)的地址是一项常见的任务,特别是在系统级编程或者网络通信的应用中。本文将详细讲解如何利用J2SE(Java 2 Standard Edition)中的`ProcessBuilder`类来实现这一功能,特别是...

    商业编程-源码-获取本机网卡的MAC地址.zip

    在商业环境中,获取本机网卡的MAC地址是一项常见的需求,例如用于设备识别、网络管理或者安全验证等。MAC(Media Access Control)地址是网络接口控制器(NIC,即网卡)的一个唯一标识符,它在物理层上定义了网络...

    获取mac地址的几种方法

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

    获得网卡MAC地址java类

    在Java编程语言中,获取计算机硬件的物理地址,即网卡MAC地址,是常见的系统信息获取需求。MAC地址是一个用于标识网络设备的唯一物理地址,通常由六组两字符的十六进制数字组成,例如“00:14:22:01:23:45”。本篇...

    获取以太网卡的MAC地址

    - **Java**:使用`java.net.NetworkInterface`类,遍历所有网络接口并获取MAC地址。 - **C#**:通过`ManagementClass`和`ManagementObjectCollection`操作WMI。 3. **第三方软件**:有些系统工具或网络诊断软件也...

    获得本机网卡地址源代码

    在IT领域,获取本机网卡(网络接口卡,NIC)地址是一项常见的任务,这通常涉及到网络编程或者系统信息查询。网卡地址,也被称为物理地址或MAC地址,是一个全球唯一的标识符,由6个双字节的16进制数字组成,用于在...

Global site tag (gtag.js) - Google Analytics