java获取当前计算机网卡MAC地址

package com.yjm.testmac;

import java.net.InetAddress;
import java.net.NetworkInterface;
import java.net.SocketException;
import java.net.UnknownHostException;
import java.util.Enumeration;

public class MacTest {
	public static void main(String[] args) {

		// 获得本机全部的mac地址信息
		test();
		// 根据当前的IP地址信息对象获得在用的网卡信息
		test1();

	}

	private static void test1() {
		System.out.println("==========test1方法中运行start......");
		try {
			InetAddress ipInfo = InetAddress.getLocalHost();
			// 输出IP地址内容
			System.out.println(ipInfo.getHostAddress());
			// 获得网卡内容字节数组
			byte[] byAddress = NetworkInterface.getByInetAddress(ipInfo)
					.getHardwareAddress();
			// 输出数组长度
			System.out.println(byAddress.length);
			// 地址字符串容器
			StringBuffer stringBuffer = new StringBuffer();
			// 单个数组值进行转换
			for (int i = 0; i < byAddress.length; i++) {
				// 单个数组值 就是一个地址位数添加分隔符
				if (i != 0) {
					stringBuffer.append("-");
				}
				// 字节转换为16进制数
				int number = byAddress[i] & 0xff;
				String strAddr = Integer.toHexString(number);
				System.out.println("转换后:=======================================" + strAddr);

				// 当转换的值是 个位数时,在前面补0
				if (strAddr.length() == 1) {
					stringBuffer.append("0" + strAddr);
				} else {
					stringBuffer.append(strAddr);
				}
			}
			// 输出转换后的mac地址
			System.out.println("转换后的MacAddress为:"
					+ stringBuffer.toString().toUpperCase());

		} catch (UnknownHostException e) {
			e.printStackTrace();
		} catch (SocketException e) {
			e.printStackTrace();
		}
		System.out.println("==========test1方法中运行over......");
	}

	private static void test() {
		System.out.println("==========test方法中运行start......");

		// 初始化 网卡信息容器
		Enumeration<NetworkInterface> allNetDevices = null;
		// 初始化一张网卡对象
		NetworkInterface networkInterface = null;
		// 等到网卡的byte数组信息
		byte[] networkbyte = null;
		// 盛放 封装的网卡信息字符串
		StringBuffer stringBuffer=null;
		try {
			// 获取网卡信息容器
			allNetDevices = NetworkInterface.getNetworkInterfaces();
			while (allNetDevices.hasMoreElements()) {
				// 获取单张网卡对象 迭代输出网卡信息
				networkInterface = allNetDevices.nextElement();
				// 获得正在 运行的 网卡信息
				if (networkInterface.isUp()) {
					//转换字节后用到的网卡地址容器
					stringBuffer = new StringBuffer();
					//网卡mac地址字节容器
					networkbyte = networkInterface.getHardwareAddress();
					//网卡名字
					System.out.println("网卡 名字: "+networkInterface.getName());
                    //网卡信息
					System.out.println("网卡信息 : "+networkInterface.getDisplayName());

					// 单个数组值进行转换
					for (int i = 0; i < networkbyte.length; i++) {
						// 单个数组值 就是一个地址位数添加分隔符
						if (i != 0) {
							stringBuffer.append("-");
						}
						// 字节转换为16进制数
						int number = networkbyte[i] & 0xff;
						String strAddr = Integer.toHexString(number);
						System.out.println("转换后:==================================" + strAddr);

						// 当转换的值是 个位数时,在前面补0
						if (strAddr.length() == 1) {
							stringBuffer.append("0" + strAddr);
						} else {
							stringBuffer.append(strAddr);
						}
					}

					// 输出转换后的mac地址
					System.out.println("转换后的MacAddress为:"
							+ stringBuffer.toString().toUpperCase());
				}
			}
		} catch (SocketException e) {
			e.printStackTrace();
		}
		System.out.println("==========test方法中运行 over......");
	}
}

方法在Linux下只能得到127.0.0.1,只能在Windows下获取正确的ip地址。

输出结果:

==========test方法中运行start......

网卡 名字: lo

网卡信息 : Software Loopback Interface 1

转换后的MacAddress为:

网卡 名字: eth3

网卡信息 : Realtek PCIe GBE Family Controller

转换后:==================================14

转换后:==================================da

转换后:==================================e9

转换后:==================================2b

转换后:==================================38

转换后:==================================10

转换后的MacAddress为:14-DA-E9-2B-38-10

网卡 名字: net4

网卡信息 : Teredo Tunneling Pseudo-Interface

转换后:==================================0

转换后:==================================0

转换后:==================================0

转换后:==================================0

转换后:==================================0

转换后:==================================0

转换后:==================================0

转换后:==================================e0

转换后的MacAddress为:00-00-00-00-00-00-00-E0

==========test方法中运行 over......

==========test1方法中运行start......

192.168.101.243

6

转换后:=======================================14

转换后:=======================================da

转换后:=======================================e9

转换后:=======================================2b

转换后:=======================================38

转换后:=======================================10

转换后的MacAddress为:14-DA-E9-2B-38-10

==========test1方法中运行over......

时间: 2024-10-08 11:32:06

java获取当前计算机网卡MAC地址的相关文章

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

java/jsp获得客户端(IE)网卡MAC地址的方法大概有三种. 1.通过命令方式,在客户端执行Ipconfig 等等.(java/jsp) 2.通过ActiveX的方法.(jsp) 3.通过向137的端口发送查询指令的方法.(java/jsp) 简介: 第一种方法,在真正用到时候不知道为什么获得mac地址的指令阻塞了,不往下继续执行.而且速度是这三种方法中最慢的一种. 代码如下: String sip=""; String smac=""; sip = requ

java获取硬盘ID以及MAC地址

http://blog.csdn.net/coolwzjcool/article/details/6698327 为了达到软件注册,或者说软件和电脑绑定的目的,需要将电脑上的固定编号进行一系列的算法计算,并生成唯一和软件匹配的号码. 那么使用java如何达到这个目的呢? 通常做法都是通过java的Runtime来完成,通过 process的输入流,进行获取相关的信息. 下面列举具体的例子: 1.DiskUtils 获取硬盘编号 import java.io.File; import java.i

java 获取访问者ip和mac地址

获取访问者ip,代码: <% String sip=""; try{ sip = (String)request.getRemoteAddr(); }catch(Exception e){ } %> 获取访问者mac地址,法是用UDP协议来发送查询mac指令然后返回值中解析mac.代码 <% String smac = ""; String sip = request.getHeader("x-forwarded-for");

用函数SendARP()获取局域网计算机的MAC地址

sendARP 31 说明对方没有开机,我们的函数检测不到它, 1784 说明的给函数的最后一个参数的值是0,或你的给的值与你给的缓存区大小不符合. 如果返回31不在线,则最后一个参数指针指向的值赋值为0 该函数有一个缺点: 该函数本质上就是向目标主机发送一个ARP请求包,然后得到应答包来更新MAC,但是ARP请求包里的发送端IP和MAC是本机的实际IP和MAC,这样对方arp -a查看缓存表时记录里就有我的IP-MAC映射记录,容易知道有人在扫描其机器,或者是ARP病毒也可能. 解决该函数问题

C++ 硬件信息 获取网卡MAC地址

获取计算机网卡MAC地址的方法很多,这里采用的是命令行的形式获取,可以获取有线网卡与无线网卡的MAC地址,很简单,直接 上代码. [1]头文件 #if !defined(AFX_95644697_C78F_4DD6_885B_3D7C40B2D55C__INCLUDED_) #define AFX_95644697_C78F_4DD6_885B_3D7C40B2D55C__INCLUDED_ #if _MSC_VER > 1000 #pragma once #endif // _MSC_VER

Python 获取 网卡 MAC 地址

/*********************************************************************** * Python 获取 网卡 MAC 地址 * 说明: * 记录一下Python如何获取网卡MAC地址,主要用于数据唯一性保存. * * 2016-10-14 深圳 南山平山村 曾剑锋 **********************************************************************/ 一.参考文档: pyth

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

快下班了,现在总结一下如何使用Java代码获取Android移动终端Mac地址: 通过设备开通WiFi连接获取Mac地址是最可取的,代码如下: /** * 设备开通WiFi连接,通过wifiManager获取Mac地址 * * @author 高焕杰 */ public static String getMacFromWifi(Context context){ ConnectivityManager connectivityManager = (ConnectivityManager) con

Java如何获取本地计算机的IP地址和主机名?

在Java编程中,如何获取本地计算机的IP地址和主机名? 以下示例显示如何使用InetAddress类的getLocalAddress()方法获取系统的本地IP地址和主机名. package com.yiibai; import java.net.InetAddress; public class GetLocalIPAddress { public static void main(String[] args) throws Exception { InetAddress addr = Ine

在Mac OSX中获取网卡MAC地址

今天在CocoaChina上看到有人发帖在询问如何在Mac OSX下获得网卡的物理地址,恰好最近在学习IOKit的一些知识,所以通过IOKit的接口肯定是可以很方便的拿到MAC地址信息的,但不知道还有没有其它更方便的API了,所以我姑且贴出一段通过IOKit去获得网卡MAC地址的代码: 12345678910111213141516171819202122232425262728293031323334353637383940414243444546 - (void)applicationDid