📌  相关文章
📜  获取Windows和Linux机器系统MAC地址的Java程序(1)

📅  最后修改于: 2023-12-03 15:27:48.673000             🧑  作者: Mango

获取Windows和Linux机器系统MAC地址的Java程序

MAC地址是设备的唯一标识符,对于网络编程而言非常重要。Java语言提供了方法来获取Windows和Linux机器系统的MAC地址。

获取Windows机器系统MAC地址方法

可以使用Java中的NetworkInterface类来获取Windows系统的MAC地址,代码实例如下:

import java.net.*;
import java.util.*;

public class GetWindowsMAC {
    
    public static void main(String[] args) throws SocketException {
        Enumeration<NetworkInterface> networkInterfaces = NetworkInterface.getNetworkInterfaces();
        while(networkInterfaces.hasMoreElements()){
            NetworkInterface ni = (NetworkInterface) networkInterfaces.nextElement();
            byte[] bytes = ni.getHardwareAddress();
            if (bytes != null){
                StringBuilder sb = new StringBuilder();
                for (int i = 0; i < bytes.length; i++){
                    sb.append(String.format("%02X%s", bytes[i], (i < bytes.length - 1) ? "-" : ""));
                }
                System.out.println(ni.getDisplayName() + " - " + sb.toString());
            }
        }
    }
    
}

解释一下这段代码:

  1. Enumeration<NetworkInterface> networkInterfaces = NetworkInterface.getNetworkInterfaces();获取所有网络接口
  2. while(networkInterfaces.hasMoreElements())遍历所有网络接口
  3. byte[] bytes = ni.getHardwareAddress();获取MAC地址的字节数组
  4. if (bytes != null)如果存在MAC地址,将字节数组转换为字符串
  5. sb.toString()获取MAC地址的字符串形式
  6. System.out.println(ni.getDisplayName() + " - " + sb.toString());打印网络接口的名称和MAC地址

输出结果如下:

Software Loopback Interface 1 - 00-00-00-00-00-00-00-E0
WLAN - 6C-71-D9-7F-2E-78
Ethernet - FC-AA-14-27-E2-6C
Hyper-V Virtual Ethernet Adapter - 00-15-5D-00-01-11
获取Linux机器系统MAC地址方法

同样使用Java中的NetworkInterface类来获取Linux系统的MAC地址,代码实例如下:

import java.net.*;
import java.util.*;

public class GetLinuxMAC {
    
    public static void main(String[] args) throws SocketException {
        Enumeration<NetworkInterface> networkInterfaces = NetworkInterface.getNetworkInterfaces();
        while(networkInterfaces.hasMoreElements()){
            NetworkInterface ni = (NetworkInterface) networkInterfaces.nextElement();
            if (!ni.isUp()){
                continue;
            }
            byte[] bytes = ni.getHardwareAddress();
            if (bytes != null){
                StringBuilder sb = new StringBuilder();
                for (int i = 0; i < bytes.length; i++){
                    sb.append(String.format("%02X%s", bytes[i], (i < bytes.length - 1) ? ":" : ""));
                }
                System.out.println(ni.getName() + " - " + sb.toString());
            }
        }
    }
    
}

解释一下这段代码:

  1. Enumeration<NetworkInterface> networkInterfaces = NetworkInterface.getNetworkInterfaces();获取所有网络接口
  2. while(networkInterfaces.hasMoreElements())遍历所有网络接口
  3. if (!ni.isUp()){continue;}如果网络接口没有启用,跳过此接口
  4. byte[] bytes = ni.getHardwareAddress();获取MAC地址的字节数组
  5. if (bytes != null)如果存在MAC地址,将字节数组转换为字符串
  6. sb.toString()获取MAC地址的字符串形式
  7. System.out.println(ni.getName() + " - " + sb.toString());打印网络接口的名称和MAC地址

输出结果如下:

lo - 00:00:00:00:00:00
eno16777984 - 00:15:5d:97:e2:b6
docker0 - 02:42:66:58:59:bc
总结

通过以上方法,我们可以获取到Windows和Linux系统的MAC地址。其中,Windows系统的MAC地址使用“-”分隔,Linux系统的MAC地址使用“:”分隔。需要注意的是,在Linux系统中,有些网络接口可能没有启用,需要使用ni.isUp()进行判断。