📅  最后修改于: 2023-12-03 15:27:48.673000             🧑  作者: Mango
MAC地址是设备的唯一标识符,对于网络编程而言非常重要。Java语言提供了方法来获取Windows和Linux机器系统的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());
}
}
}
}
解释一下这段代码:
Enumeration<NetworkInterface> networkInterfaces = NetworkInterface.getNetworkInterfaces();
获取所有网络接口while(networkInterfaces.hasMoreElements())
遍历所有网络接口byte[] bytes = ni.getHardwareAddress();
获取MAC地址的字节数组if (bytes != null)
如果存在MAC地址,将字节数组转换为字符串sb.toString()
获取MAC地址的字符串形式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
同样使用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());
}
}
}
}
解释一下这段代码:
Enumeration<NetworkInterface> networkInterfaces = NetworkInterface.getNetworkInterfaces();
获取所有网络接口while(networkInterfaces.hasMoreElements())
遍历所有网络接口if (!ni.isUp()){continue;}
如果网络接口没有启用,跳过此接口byte[] bytes = ni.getHardwareAddress();
获取MAC地址的字节数组if (bytes != null)
如果存在MAC地址,将字节数组转换为字符串sb.toString()
获取MAC地址的字符串形式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()
进行判断。