9.2 Net_IPv6 

Besprochene Version: 1.0 | Lizenz: PHP-Lizenz |
Klassendatei(en): Net/IPv6.php |
Weil das Internet so stark wächst, werden langsam, aber sicher die IP-Adressen knapp. Dies wurde bereits Anfang der 90er Jahre erkannt und führte Mitte des Jahrzehnts zu der Entwicklung eines neuen IP-Protokolls. In der neuen Version 6 besteht eine IP-Adresse nicht mehr aus 32, sondern aus 128 Bit. Diese 16 Byte werden üblicherweise in Zweierpaaren zusammengefasst, wobei die einzelnen Paare jeweils durch einen Doppelpunkt voneinander getrennt werden. Im Gegensatz zu den Adressen der Version 4 müssen die Zahlen im 6er Format jeweils hexadezimal angegeben werden. Eine solche Adresse könnte also z. B. 0588:0053:0000:0000:0000:FAEF:1428:57AB lauten. Üblicherweise werden führende Nullen innerhalb eines Abschnitts weggelassen, was im zuständigen RFC 3513 explizit vorgesehen ist. In diesem Fall könnte die Adresse also als 588:53:0:0:0:FAEF:1428:57AB dargestellt werden, wobei mindestens eine Zahl erhalten bleiben muss. Darüber hinaus ist in der Definition des Formats auch vorgesehen, dass Bytes, die nur Nullen repräsentieren, durch zwei direkt aufeinander folgende Doppelpunkte dargestellt werden können, so dass die vorgenannte Adresse auch als 588:53::FAEF:1428:57AB dargestellt werden kann. Allerdings ist es unzulässig, dass diese »doppelten Doppelpunkte« an zwei Stellen der Adresse vorkommen, da in einem solchen Fall die ursprüngliche Adresse nicht mehr ermittelt werden könnte.
Das Paket ist nicht sehr umfangreich, und die vier enthaltenen Methoden können alle statisch aufgerufen werden. Um die Gültigkeit einer IPv6-Adresse zu prüfen, steht die Methode checkIPv6() zur Verfügung, die die Adresse als String übergeben bekommt und einen booleschen Wert zurückgibt.
require_once("Net/IPv6.php"); $ip="::588:0:FAEF:1428:57AB"; // Zu nutzende IP-Adresse // IP-Adresse gueltig? if (true === Net_IPv6::checkIPv6($ip)) { echo "Ja, die Adresse ist gültig"; }
Möchten Sie ein wenig Speicherplatz sparen, ist es hilfreich, die Adressen zu komprimieren und enthaltene Folgen von Nullen durch Doppelpunkte zu ersetzen, was die Methode compress() für Sie erledigt. Genau wie ihr Gegenstück uncompress() bekommt sie die IP-Adresse als String übergeben.
require("Net/IPv6.php"); // gibt 0:0:0:588:0:FAEF:1428:57AB aus echo Net_IPv6::uncompress("::588:0:FAEF:1428:57AB"); // gibt ::588:0:FAEF:1428:57AB aus echo Net_IPv6::compress("0:0:0:588:0:FAEF:1428:57AB");
Die letzte Funktion des Pakets unterstützt ein durchaus interessantes Feature des IPv6-Protokolls. Und zwar ist es möglich, in eine Adresse der Version 6 eine Adresse der Version 4 zu integrieren, um eine Kompatibilität zu gewährleisten. In diesem Fall sind die letzten 32 Bit für die IPv4-Adresse reserviert, die in der für die Version 4 üblichen Dotted Quad Notation angegeben wird.
require("Net/IPv6.php"); $daten=Net_IPv6::splitV64("::AFED:21:FFFF:129.144.52.38"); echo "V6-Anteil: $daten[0]<br />"; echo "V4-Anteil: $daten[1]"; /*Ausgabe: V6-Anteil: 0:0:0:AFED:21:FFFF V4-Anteil: 129.144.52.38 */
Um beide Teile zurückliefern zu können, werden die Daten in einem indizierten Array zurückgegeben, wobei das erste Element den IPv6- und das zweite den IPv4-Anteil enthält.