记Java如何获取MAC地址

2022-10-17 14:47:18

MAC地址简单认识

MAC地址也叫物理地址、硬件地址,由网络设备制造商生产时烧录在网卡(Network lnterface Card)的EPROM(一种闪存芯片,通常可以通过程序擦写)。

IP地址与MAC地址在计算机里都是以二进制表示的,IP地址是32位的,而MAC地址则是48位的 ,通常表示为12个16进制数,如:00-16-EA-AE-3C-40就是一个MAC地址,其中前3个字节,16进制数00-16-EA代表网络硬件制造商的编号,它由IEEE(电气与电子工程师协会)分配,而后3个字节,16进制数AE-3C-40代表该制造商所制造的某个网络产品(如网卡)的系列号。只要不更改自己的MAC地址,MAC地址在世界是唯一的。形象地说,MAC地址就如同身份证上的身份证号码,具有唯一性 。

MAC地址用于在网络中唯一标示一个网卡,一台设备若有一或多个网卡,则每个网卡都需要并会有一个唯一的MAC地址。



查看本机MAC地址

打开命令窗口:win + R, 然后输入cmd,回车
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-W4dafITu-1650204802241)(D:\MyTools\typora\source\Java边角料知识\image-20220415174947750.png)]
输入ipconfig /all查看MAC地址



Java获取mac地址的两种方式

1.通过InetAddress对象获取

packagecom.chunni.mac;importorg.junit.jupiter.api.Test;importjava.net.InetAddress;importjava.net.NetworkInterface;importjava.net.SocketException;importjava.net.UnknownHostException;publicclassMACTest{@Testpublicvoid test01()throwsUnknownHostException,SocketException{// 获取特定的mac地址InetAddress address=InetAddress.getByName("xxx");byte[] mac=NetworkInterface.getByInetAddress(address).getHardwareAddress();StringBuilder sb=newStringBuilder();for(int i=0; i< mac.length; i++){// 转为16进制
            sb.append(String.format("%02X%s", mac[i],(i< mac.length-1)?"-":""));}System.out.println(sb.toString());}@Testpublicvoid test02()throwsUnknownHostException,SocketException{InetAddress[] addresses=InetAddress.getAllByName("xxx");StringBuilder sb=newStringBuilder();for(InetAddress address: addresses){byte[] mac=NetworkInterface.getByInetAddress(address).getHardwareAddress();for(int i=0; i< mac.length; i++){// 转为16进制
                sb.append(String.format("%02X%s", mac[i],(i< mac.length-1)?"-":"\n"));}}System.out.println(sb.toString());}}

2.通过NetworkInterface对象获取
packagecom.chunni.mac;importjava.net.NetworkInterface;importjava.net.SocketException;importjava.util.Enumeration;publicclassMACTest01{publicstaticvoidmain(String[] args)throwsSocketException{StringBuilder sb=newStringBuilder();Enumeration<NetworkInterface> allNetInterfaces=NetworkInterface.getNetworkInterfaces();byte[] mac=null;while(allNetInterfaces.hasMoreElements()){NetworkInterface netInterface= allNetInterfaces.nextElement();if(netInterface.isLoopback()|| netInterface.isVirtual()|| netInterface.isPointToPoint()||!netInterface.isUp()){continue;}else{
                mac= netInterface.getHardwareAddress();if(mac!=null){for(int i=0; i< mac.length; i++){
                        sb.append(String.format("%02X%s", mac[i],(i< mac.length-1)?"-":"\n"));}}}}System.out.println(sb.toString());}}

注意:第一种方式查询所有mac地址时会有重复的,因为ipv4和ipv6都会查询一份mac地址

  • 作者:椿尼
  • 原文链接:https://blog.csdn.net/qq_43080741/article/details/124237926
    更新时间:2022-10-17 14:47:18