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

javaobject oriented programmingprogramming更新于 2024/8/5 20:09:00

计算机可以使用称为网络接口控制器 (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 地址。


相关文章