Abrufen von MAC-Adressen in Java

1. Einleitung

In diesem Tutorial verwenden wir Java, um die MAC-Adressen eines lokalen Computers abzurufen.

Eine MAC-Adresse ist die eindeutige Kennung für eine physische Netzwerkschnittstellenkarte.

Wir werden nur MAC-Adressen behandeln. Eine allgemeinere Übersicht über Netzwerkschnittstellen finden Sie unter Arbeiten mit Netzwerkschnittstellen in Java.

2. Beispiele

In den folgenden Beispielen verwenden wir die APIs java.net.NetworkInterface und java.net.InetAddress .

2.1. Machine Localhost

Lassen Sie uns zunächst die MAC-Adresse für den lokalen Host unseres Computers ermitteln:

InetAddress localHost = InetAddress.getLocalHost(); NetworkInterface ni = NetworkInterface.getByInetAddress(localHost); byte[] hardwareAddress = ni.getHardwareAddress(); 

Da NetworkInterface # getHardwareAddress ein Array von Bytes zurückgibt, können wir das Ergebnis formatieren:

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);

Beachten Sie, wie wir jedes Byte im Array im String # -Format auf eine Hexadezimalzahl formatieren .

Danach können wir alle formatierten Elemente mit einem „-“ (Bindestrich) verbinden.

2.2. Lokale IP

Zweitens erhalten wir die MAC-Adresse für eine bestimmte lokale IP-Adresse:

InetAddress localIP = InetAddress.getByName("192.168.1.108"); NetworkInterface ni = NetworkInterface.getByInetAddress(localIP); byte[] macAddress = ni.getHardwareAddress();

Beachten Sie erneut, wie wir ein Array von Bytes für die MAC-Adresse erhalten.

2.3. Alle Netzwerkschnittstellen

Lassen Sie uns abschließend die MAC-Adressen für alle Netzwerkschnittstellen auf unserem Computer abrufen:

Enumeration 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)); } }

Da getNetworkInterfaces sowohl physische als auch virtuelle Schnittstellen zurückgibt, müssen wir die virtuellen herausfiltern.

Wir können dies zum Beispiel tun, indem wir getHardwareAddress auf Null prüfen .

3. Fazit

In diesem kurzen Tutorial haben wir verschiedene Möglichkeiten untersucht, um MAC-Adressen für einen lokalen Computer abzurufen.

Wie üblich finden Sie den gesamten Quellcode mit den Beispielen in diesem Tutorial auf GitHub.