Java 程序获取 Windows 和 Linux 机器的系统 MAC 地址
计算机可以使用称为网络接口控制器 (NIC) 的硬件或软件组件连接到网络并与其他设备通信。NIC 有助于创建一个有助于在两个设备之间传输和接收数据的层。MAC 地址称为媒体访问控制地址,是 NIC 的唯一标识符。它由 48 位十六进制数字组成。数据链路层使用它来控制访问、确保数据完整性和识别网络设备。在本节中,我们将学习如何使用 Java 查找 Windows 和 Linux 机器的 MAC 地址。
设备 MAC 地址不会改变。MAC 地址由路由器和交换机等网络设备使用。这些设备(如路由器和交换机)通常用于在网络上的不同设备之间转发数据包。当设备将数据包发送到同一网络上的另一台设备时,数据包在数据包头中包含预期接收者的 MAC 地址。然后,网络设备使用从数据包头中收到的 MAC 地址,将数据包传送给预期的接收者。
现在,我们将详细研究用于查找 Linux 和 Windows 计算机的 MAC 地址的不同方法。Java 提供 InetAddress 类和 NetworkInterface 类来对 MAC 地址执行操作。
现在,我们将研究用于查找 Windows 和 Linux 计算机的 MAC 地址的不同代码实现。
查找 Windows 计算机的 MAC 地址
我们将实现 Java 代码来查找 Windows 计算机的 MAC 地址。查找 MAC 地址的算法如下。
算法
使用 InetAddress.getLocalHost() 获取 InetAddress 实例。
通过传递 InetAddress 对象,使用 NetworkInterface.getByInetAddress() 获取 NetworkInterface 实例。使用网络接口实例上的 getHardwareAddress() 获取 MAC 地址并存储在字节数组中。
声明一个字符串生成器并循环遍历字节数组。
使用 format() 将字节转换为十六进制数字并附加字节并打印。
示例
在此示例中,我们最初使用"InetAddress.getLocalHost()"创建了一个 InteAddress 实例,并将其传递给 NetworkInterface 构造函数,这有助于我们创建一个 NetworkInterface 对象。然后我们在 NetworknIterface 对象上调用内置的"getHardwareAddress()"方法以字节数组格式获取 mac 地址。获取 mac 地址的字节数组后,我们使用字符串生成器对象并循环遍历 mac 数组并将字节转换为十六进制格式并打印输出。
import java.net.*; import java.util.*; public class Main { public static void main(String args[]) throws Exception { InetAddress address = InetAddress.getLocalHost(); NetworkInterface networkInterface = NetworkInterface.getByInetAddress(address); byte[] mac = networkInterface.getHardwareAddress(); System.out.print("MAC address : "); StringBuilder stringBuilder = new StringBuilder(); for (int i = 0; i < mac.length; i++) { stringBuilder.append(String.format("%02X%s", mac[i], (i < mac.length - 1) ? "-" : "")); } System.out.println(stringBuilder.toString()); } }
输出
MAC address of this system is : 00-15-F2-5D-8A-80
查找 Linux 机器的 MAC 地址
我们将执行 Java 代码来查找 Linux 机器的 MAC 地址。查找 MAC 地址的步骤如下。
步骤
导入所有必需的 Java 库。
使用 NetworkInterface.getNetworkInterfaces() 获取所有网络接口
对于每个网络,使用 network.getHardwareAddress() 获取 MAC 地址
如果 MAC 地址不为空,则声明一个字符串生成器并循环遍历 MAC 地址。
使用 format() 将字节转换为十六进制数字并附加并打印它
示例
在此示例中,我们使用函数"NetworkInterface.getNetworkInterfaces()"并获取 NetworkInterfaces 的枚举。然后,我们迭代此枚举,直到枚举中出现 NetworkInterface,我们使用"getHardwareAddress()"函数获取每个 NetworkInterface 的 MAC 地址,该函数通常返回一个 MAC 地址的字节数组,然后使用 StringBuilder 对象和 format() 方法将此数组转换为十六进制值,并将所有内容附加到 StringBuilder 对象,并通过将 StringBuilder 对象转换为 toString() 方法打印该值。因此,我们使用 Java 代码获取 Linux 机器的 MAC 地址。
import java.net.InetAddress; import java.net.NetworkInterface; import java.util.Enumeration; public class Main{ public static void main(String[] args) { try { Enumeration<NetworkInterface> networkInterfaces = NetworkInterface.getNetworkInterfaces(); while (networkInterfaces.hasMoreElements()) { NetworkInterface networkInterface = networkInterfaces.nextElement(); byte[] mac = networkInterface.getHardwareAddress(); if (mac != null) { System.out.print("MAC address : "); StringBuilder stringBuilder = new StringBuilder(); for (int i = 0; i < mac.length; i++) { stringBuilder.append(String.format("%02X%s", mac[i], (i < mac.length - 1) ? "-" : "")); } System.out.println(stringBuilder.toString()); } } } catch (Exception e) { e.printStackTrace(); } } }
输出
MAC address : 54-E1-AD-3F-2E-63 MAC address : 0A-B1-CD-2F-6A-83 MAC address : 12-34-56-78-9A-BC
因此,在本文中,我们学习了如何使用 Java 获取 Windows 和 Linux 机器的系统 MAC 地址。