11.13 Tiefer liegende Netzwerkeigenschaften *
11.13.1 Internet Control Message Protocol (ICMP)
Neben dem Internet-Protokoll werden weitere Steuerprotokolle auf der Vermittlungsschicht eingesetzt. Darunter befindet sich auch das Internet Control Message Protocol (ICMP), das im Prinzip ein IP-Paket mit bestimmten Flags ist. 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.
11.13.2 MAC-Adresse
Die MAC-Adresse ist eine (im Idealfall) eindeutige Adresse einer Netzwerkkarte. 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 jedoch erst seit Java 6 mit dem NetworkInterface und sonst nur über einen Umweg:
Listing 11.33: com/tutego/insel/net/MacAddress.java, getMacAddress()
public static String getMacAddress() throws SocketException
{
String result = "";
for ( NetworkInterface ni : Collections.list( NetworkInterface.getNetworkInterfaces() ) )
{
byte[] hardwareAddress = ni.getHardwareAddress();
if ( hardwareAddress != null )
{
for ( int i = 0; i < hardwareAddress.length; i++ )
result += String.format( (i==0?"":"-")+"%02X", hardwareAddress[i] );
return result;
}
}
return result;
}
Ihr Kommentar
Wie hat Ihnen das <openbook> gefallen? Wir freuen uns immer über Ihre freundlichen und kritischen Rückmeldungen.