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物件。然後,我們在NetworkInterface物件上呼叫內建的'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地址。

更新於:2024年6月26日

2K+ 瀏覽量

啟動你的職業生涯

完成課程獲得認證

開始學習
廣告
© . All rights reserved.