Programmieren mit Java IIhttp://sol.cs.hm.edu/4129Inhaltsverzeichnis
7. Netzwerkprogrammierung7.1 Grundlagen
7.1.3 MAC-Adressen (Ethernet)
Hardware-Adressen identifizieren Netzwerkschnittstellen
Auf Ebene 2 identifizieren sich Systeme mit Hardware-Adressen (Media Access Control Address, MAC-Adresse). MAC-Adressen sind weltweit eindeutig für jede Netzwerkschnittstelle eines Rechners. Logisch sind MAC-Adressen 48-stellige Binärzahlen, wobei die ersten 24 Bits den Hersteller codieren (Organizationally Unique Identifier, OUI) und die zweiten 24 Bits eine Seriennummer des Herstellers.[1]
In Wahrheit liegen die Verhältnisse komplizierter: Bit 2 des ersten Bytes entscheidet darüber, ob die ersten 24 Bits einen OUI repräsentieren (0) oder frei vergeben sind (1).
image/svg+xml Herstellerkennung Seriennummer 0 = Weltweit eindeutige OUI1 = frei vergeben 00 24 54 0D 85 9C
Auslesen der MAC-Adresse
Das folgende Programm gibt die MAC-Adresse der Netzwerkschnittstelle aus, die auf der Kommandozeile angegeben ist:
import java.net.*;



public class MACAddress {

public static void main(String... args) throws SocketException {

NetworkInterface networkInterface = NetworkInterface.getByName(args[0]);

byte[] macAddress = networkInterface.getHardwareAddress();



// Ausgabe

for(byte b: macAddress)

System.out.printf("%02X ", b);

System.out.println();

}

}

MACAddress.java: MAC-Adresse der Netzwerkschnittstelle laut Kommandozeile ausgeben.
Auf dem System des Autors ergibt sich:
$ java MACAddress eth0

00 24 54 0D 86 9C
Die ersten 3 Bytes dieses Beispiels (00 24 54) sind dem koreanischen Hersteller Samsung Electronics Co., LTD zugeordnet. Die weiteren 3 Bytes (0D 86 9C) unterliegen der Kontrolle des Herstellers.[2]
Der Dienst http://hwaddress.com hilft beim Ermitteln des Herstellers einer MAC-Adresse.
Liste der Netzwerkschnittstellen eines Systems
Ein Rechner kann über mehrere Netzwerkschnittstellen verfügen, von denen jede eine eigene MAC-Adresse hat. Das folgende Programm listet die Netzwerkschnittstellen auf:
import java.net.*;

import java.util.*;



public class ListNetworkInterfaces {

public static void main(String... args) throws SocketException {

for(Enumeration<NetworkInterface> interfaces = NetworkInterface.getNetworkInterfaces();

interfaces.hasMoreElements();)

System.out.println(interfaces.nextElement().getDisplayName());

}

}

ListNetworkInterfaces.java: Netzwerkschnittstellen auflisten.
Das Programm gibt beispielsweise aus:
$ java ListInterfaces

eth0

lo

tap0

wlan0
Diese Namen sind systemspezifisch. Die Schnittstelle lo spielt eine besondere Rolle, die im nächsten Abschnitt diskutiert wird.
Hardware-Adressen lassen sich mit geeigneten Hilfsmitteln und Zugriffsrechten ändern. Sie sind also nicht so verlässlich, wie man vermuten könnte.[3]
Eine Internetsuche nach den Begriffen MAC und change liefert schnell passende Software für Ihr System.