1. 概述
在本教程中,我们将使用Java获取本地计算机的MAC地址。
MAC地址是物理网络接口卡的唯一标识符。
我们将仅介绍MAC地址,但有关网络接口的更一般概述,请参阅在Java中使用网络接口。
2. 示例
在下面的示例中,我们将使用java.net.NetworkInterface和java.net.InetAddress API。
2.1 机器Localhost
首先,让我们获取机器localhost的MAC地址:
InetAddress localHost = InetAddress.getLocalHost();
NetworkInterface ni = NetworkInterface.getByInetAddress(localHost);
byte[] hardwareAddress = ni.getHardwareAddress();
由于NetworkInterface#getHardwareAddress返回一个字节数组,我们可以格式化结果:
String[] hexadecimal = new String[hardwareAddress.length];
for (int i = 0; i < hardwareAddress.length; i++) {
hexadecimal[i] = String.format("%02X", hardwareAddress[i]);
}
String macAddress = String.join("-", hexadecimal);
请注意我们如何使用String#format将数组中的每个字节格式化为十六进制数。
之后,我们可以用“-”(破折号)拼接所有格式化元素。
2.2 本地IP
其次,让我们获取给定本地IP地址的MAC地址:
InetAddress localIP = InetAddress.getByName("192.168.1.108");
NetworkInterface ni = NetworkInterface.getByInetAddress(localIP);
byte[] macAddress = ni.getHardwareAddress();
再次注意我们如何获取MAC地址的字节数组。
2.3 所有网络接口
最后,让我们获取机器上所有网络接口的MAC地址:
Enumeration<NetworkInterface> networkInterfaces = NetworkInterface.getNetworkInterfaces();
while (networkInterfaces.hasMoreElements()) {
NetworkInterface ni = networkInterfaces.nextElement();
byte[] hardwareAddress = ni.getHardwareAddress();
if (hardwareAddress != null) {
String[] hexadecimalFormat = new String[hardwareAddress.length];
for (int i = 0; i < hardwareAddress.length; i++) {
hexadecimalFormat[i] = String.format("%02X", hardwareAddress[i]);
}
System.out.println(String.join("-", hexadecimalFormat));
}
}
由于getNetworkInterfaces返回物理接口和虚拟接口,我们需要过滤掉虚拟接口。
例如,我们可以通过对getHardwareAddress进行空检查来做到这一点。
3. 总结
在本快速教程中,我们探讨了获取本地计算机MAC地址的不同方法。
与往常一样,本教程的完整源代码可在GitHub上获得。
Show Disqus Comments
Post Directory
扫码关注公众号:Taketoday
发送 290992
即可立即永久解锁本站全部文章