13.13Tiefer liegende Netzwerkeigenschaften * 

Neben dem Internetprotokoll werden weitere Steuerprotokolle auf der Vermittlungsschicht eingesetzt. Auf vieles hat Java standardmäßig keinen Zugriff.
13.13.1MAC-Adressen auslesen 

Die MAC-Adresse (von Media-Access-Control) ist eine (im Idealfall) eindeutige Adresse eines Netzwerkgeräts. MAC-Adressen sind für Ethernet-Verbindungen essenziell, da auf der physikalischen Übertragungsebene Signale zu einer gewünschten Netzwerkkarte aufgebaut werden. Wegen der Eindeutigkeit eignen sie sich gut als Schlüssel, und es ist interessant, auch in Java diese Adresse auszulesen. Das geht mit der Klasse NetworkInterface recht unkompliziert. Alle lokale Netzwerkschnittstellen liefert NetworkInterface.getNetworkInterfaces(), ist die IP-Adresse bekannt, können wir NetworkInterface.getByInetAddress(InetAddress) nutzen:
Listing 13.36com/tutego/insel/net/MacAddress.java, main()
byte[] adr = ni.getHardwareAddress();
if ( adr == null || adr.length != 6 )
continue;
String mac = String.format( "%02X:%02X:%02X:%02X:%02X:%02X",
adr[0], adr[1], adr[2], adr[3], adr[4], adr[5] );
System.out.println( mac );
}
Auf der Windows-Kommandozeile liefert ipconfig /all alle MAC-Adressen, die dort »physikalische Adressen« heißen.
13.13.2Internet Control Message Protocol (ICMP) 

Das Internet Control Message Protocol (ICMP), beschreibt im Prinzip ein IP-Paket mit bestimmten Flags und dient dem Austausch von Informationen und Fehlermeldungen. Dieses ist in RFC 792 definiert. Da das Funktionieren des Internets sehr stark von Routern abhängt, wurde ICMP entwickelt, um unerwartete Ereignisse und Zusatzinformationen zu melden. Java unterstützt zurzeit nur Sockets vom Typ SOCK_STREAM (TCP) und SOCK_DGRAM (UDP), aber keine IP-Pakete (und damit auch nicht das Internet Control Message Protocol) mit dem SOCK-Typ SOCK_RAW. Daher können in Java mit den Standardbibliotheken keine IP-Pakete und ICMP-Nachrichten verschickt werden, um Rechts- und Sicherheitsproblemen vorzubeugen. Viele Unix-Systeme erlauben Sockets vom Typ SOCK_RAW auch nur unter Root-Rechten.