IPv6 kürzen und erweitern

Kürzen Sie eine IPv6-Adresse auf ihre eine kanonische Form oder erweitern Sie sie auf alle 32 Ziffern, und sehen Sie, welche Nullen wegfallen, warum eine Folge zu :: wurde und gegen welche Regel aus RFC 5952 Ihre Schreibweise verstieß. Auch Listen funktionieren.

Kanonischer Text nach RFC 5952 · Parsing nach RFC 4291, gemischte IPv4-Enden eingeschlossen · läuft in Ihrem Browser

Gelesen als IPv6

Die 8 Gruppen und was die Kürzung weglässtZeichen: 39 → 17 · 22 Zeichen weniger
bleibtführende Null, entfälltdie Folge, die zu :: wirdandere Nullen, bleiben
Beispiele

Eine Adresse oder eine Liste mit einer Adresse pro Zeile (bis zu 100). Die Umwandlung läuft in Ihrem Browser; nichts wird gesendet.

3 Regeln angewandtRFC 5952

2001:db8::1:0:0:1

Zwei Folgen aus je 2 Nullgruppen: Die erste wurde zu ::

RFC 5952, Regel für Regel

Führende Nullen entfernt§4.1Korrigiert0DB8 → db8, 0001 → 1, 0000 → 0, 0000 → 0
:: so lang wie möglich§4.2.1Korrigiert0000:0000 ausgeschrieben → ::
Kein :: für eine Gruppe§4.2.2Erfüllt
Längste Folge, bei Gleichstand die erste§4.2.3ErfülltZwei Folgen aus je 2 Nullgruppen: Die erste wurde zu ::
Kleinbuchstaben§4.3Korrigiert0DB8 → db8
Gekürzt (RFC 5952)
Erweitert (vollständig)
In einer URL
Als Zahl
Dezimal · Hex · Binär
Reverse-DNS-Name

Wie kürzt man eine IPv6-Adresse?

Schreiben Sie sie in Kleinbuchstaben, entfernen Sie die führenden Nullen jeder Gruppe und ersetzen Sie dann die längste Folge aus zwei oder mehr Nullgruppen durch ::, bei zwei gleich langen Folgen die erste.

Das ergibt die eine kanonische Form, die Software laut RFC 5952 ausgeben soll. Als Eingabe müssen Programme weiterhin jede andere gültige Schreibweise akzeptieren; das Kürzen ändert also nie die Adresse, nur wie sie geschrieben wird.

2001:0DB8:0000:0000:0000:FF00:0042:8329 Schritt für Schritt gekürzt zu 2001:db8::ff00:42:8329.
IPv6 kürzen: Das Tool zeigt die Nullen, die RFC 5952 entfernt, und die Folge, die zu :: wirdIPv6 kürzen: Das Tool zeigt die Nullen, die RFC 5952 entfernt, und die Folge, die zu :: wirdWas Sie eingegeben habenGroßbuchstaben, führende Nullen und alles: Jede gültige Schreibweise wird gelesen.Entfernte NullenFührende Nullen durchgestrichen, Gruppe für Gruppe.Die Folge, die zu :: wirdDie längste Folge von Nullgruppen; bei Gleichstand die erste.Folgen, die bleibenAndere Nullfolgen behalten ihre Nullen, mit Begründung.Regel für RegelWie viele Regeln aus RFC 5952 die Schreibweise verletzte; die Checkliste darunter nennt jede und was sich änderte.
Zwei gleich lange Nullfolgen: RFC 5952 kürzt die erste, und die Checkliste nennt jede Regel, gegen die die Schreibweise verstieß.

IPv6 kürzen: Welche Regeln gelten?

RFC 5952 legt fünf Regeln fest: führende Nullen entfernen, :: so lang wie möglich machen, :: nie für eine einzelne Nullgruppe verwenden, die längste Folge kürzen (bei Gleichstand die erste) und Hex-Buchstaben kleinschreiben.

Eine sechste Empfehlung betrifft Adressen, die eine IPv4 tragen: Nach einem Präfix wie ::ffff: werden die letzten 32 Bits als IPv4-Adresse mit Punkten geschrieben. Das Tool prüft jede Regel an Ihrer Eingabe und nennt die, die es korrigiert hat.

1Führende Nullen entfernt§4.1

Richtig: 2001:db8::1

Falsch: 2001:0db8::0001

2:: so lang wie möglich§4.2.1

Richtig: 2001:db8::2:1

Falsch: 2001:db8:0:0:0:0:2:1

3Kein :: für eine Gruppe§4.2.2

Richtig: 2001:db8:0:1:1:1:1:1

Falsch: 2001:db8::1:1:1:1:1

4Längste Folge, bei Gleichstand die erste§4.2.3

Richtig: 2001:db8::1:0:0:1

Falsch: 2001:db8:0:0:1::1

5Kleinbuchstaben§4.3

Richtig: 2001:db8::a

Falsch: 2001:DB8::A

+IPv4-Ende mit Punkten§5

Richtig: ::ffff:192.0.2.1

Falsch: 0:0:0:0:0:ffff:192.0.2.1

Jede Regel mit den richtigen und falschen Beispielen aus RFC 5952 selbst.

Wie erweitert man eine IPv6-Adresse?

Zählen Sie die geschriebenen Gruppen, lassen Sie :: für so viele Nullgruppen stehen, wie bis acht fehlen, und füllen Sie jede Gruppe auf vier Ziffern auf: 2001:db8::1 hat drei Gruppen, also steht :: für fünf.

Reverse DNS nutzt die erweiterte Form, Nibble für Nibble, und viele Logs und Tabellen brauchen sie, um als Text zu sortieren. Python nennt sie .exploded, Go StringExpanded.

2001:db8::1 erweitert: 3 geschriebene Gruppen, 5 Nullgruppen für ::, jede Gruppe aufgefüllt.

Wie viele Schreibweisen hat eine IPv6-Adresse?

Viele: Führende Nullen, Groß- und Kleinschreibung und die Stelle von :: können sich ändern, eine Adresse hat also viele gültige Schreibweisen, und RFC 5952 listet acht für 2001:db8:0:0:1:0:0:1 auf, bevor es eine kanonische Form festlegt.

Deshalb scheitert der Vergleich von Adressen als Text: Zwei Schreibweisen derselben Adresse stimmen nicht überein. Vergleichen Sie sie stattdessen als 128-Bit-Zahlen, oder kürzen Sie beide vorher.

2001:db8:0:0:1:0:0:12001:0db8:0:0:1:0:0:12001:db8::1:0:0:12001:db8::0:1:0:0:12001:0db8::1:0:0:12001:db8:0:0:1::12001:db8:0000:0:1::12001:DB8:0:0:1::1
2001:db8::1:0:0:1kanonisch · RFC 5952
Acht Schreibweisen aus RFC 5952, eine Adresse.

Wie schreibt man eine IPv6-Adresse in eine URL, mit Port oder Zone?

Setzen Sie die Adresse in eckige Klammern, http://[2001:db8::1]:8443/, damit der Port nicht für eine Gruppe gehalten wird; eine Zone wie %eth0 kann überhaupt nicht in eine Browser-URL.

RFC 5952 verlangt Klammern um eine Adresse mit Port und nennt 2001:db8::1:8443 nicht empfohlen. Für nichts anderes werden in einer URL Klammern verwendet. Browser geben die Adresse auch nach ::ffff: in Hex aus, sodass [::ffff:192.0.2.1] als [::ffff:c000:201] erscheint.

Zonen benennen eine Schnittstelle auf einem Rechner, wie in fe80::1%eth0. RFC 9844 hat sie 2025 wieder aus URLs entfernt, und Browser lehnen sie ab, doch Programme sollten die Eingabe einer Zone weiterhin erlauben.

http://Schema[2001:db8::1]IPv6 in Klammern:8443Port/statusPfad

Eine Zone (%eth0) · fe80::1%eth0

In das Feld eines Programms getippterlaubt
In einer Browser-URLabgelehnt
inet_pton()kann sie nicht lesen
Globale Adressenhaben nie eine
Eine URL mit einer IPv6-Adresse, in ihre Teile zerlegt, und wo eine Zone stehen darf.

Wie kürze oder erweitere ich IPv6 im Code?

Adresse parsen und ausgeben: Pythons .compressed, Gos netip.Addr.String() und MySQLs INET6_NTOA(INET6_ATON(…)) liefern den kanonischen Text, .exploded und StringExpanded() die volle Form.

Pythons str() liefert ebenfalls die gekürzte Form, und Python akzeptiert ein Suffix %zone. MySQL gibt Kleinbuchstaben aus, höchstens 39 Zeichen, auf jeder Plattform gleich.

› import ipaddress
a = ipaddress.ip_address('2001:0DB8::0001')
a.compressed, a.exploded
('2001:db8::1', '2001:0db8:0000:0000:0000:0000:0000:0001')

Python ipaddress

› a := netip.MustParseAddr("2001:0DB8::0001")
fmt.Println(a.String(), a.StringExpanded())
2001:db8::1 2001:0db8:0000:0000:0000:0000:0000:0001

Go net/netip

› SELECT INET6_NTOA(INET6_ATON('2001:0DB8::0001'));
2001:db8::1

MySQL 8.4

Die kanonische Kurzform und die volle Form aus Python, Go und MySQL.

Häufig gestellte Fragen

Wie lautet die gekürzte Form von 2001:0db8:0000:0000:0000:ff00:0042:8329?

Sie lautet 2001:db8::ff00:42:8329. Schreiben Sie die Buchstaben klein, entfernen Sie die führenden Nullen jeder Gruppe (aus 0db8 wird db8, aus 0042 wird 42) und ersetzen Sie dann die Folge aus drei Nullgruppen durch ::. Das Ergebnis hat 22 statt 39 Zeichen und ist die einzige Form, die RFC 5952 kanonisch nennt. Erweitert man sie wieder, erhält man exakt dieselben 32 Hexziffern.

Darf :: in einer IPv6-Adresse zweimal vorkommen?

Nein. :: steht für eine oder mehrere Nullgruppen und darf nur einmal vorkommen; bei zweien könnte niemand sagen, für wie viele Nullgruppen jedes steht, daher ist 2001:db8::1::1 ungültig. Hat eine Adresse zwei Nullfolgen, kürzen Sie die längere, bei gleicher Länge die erste, und schreiben Sie die andere als 0:0, wie in 2001:db8::1:0:0:1.

Warum wird 2001:db8:0:1:1:1:1:1 nicht zu 2001:db8::1:1:1:1:1 gekürzt?

Weil RFC 5952 verbietet, :: für eine einzelne Nullgruppe zu verwenden. Die Kürzung würde ein Zeichen sparen und die Adresse schwerer lesbar machen, daher behält die kanonische Form die einzelne Gruppe als 0: 2001:db8:0:1:1:1:1:1. Parser akzeptieren 2001:db8::1:1:1:1:1 trotzdem als dieselbe Adresse, aber Software sollte sie nie so ausgeben.

Schreibt man IPv6-Adressen groß oder klein?

Klein. RFC 5952 verlangt für die kanonische Form die Hex-Buchstaben a bis f in Kleinbuchstaben, und Browser sowie die meisten Bibliotheken geben sie so aus. Software muss trotzdem Großbuchstaben als Eingabe akzeptieren, also sind 2001:DB8::A und 2001:db8::a dieselbe Adresse; nur die ausgegebene Form ändert sich. Großbuchstaben sind in älterer Dokumentation und in den Konfigurationsdateien mancher Hersteller verbreitet.

Wie erweitere ich :: in einer IPv6-Adresse?

Zählen Sie die geschriebenen Gruppen und lassen Sie :: für so viele Nullgruppen stehen, wie bis acht fehlen. In 2001:db8::ff00:42:8329 sind fünf Gruppen geschrieben, also steht :: für drei Gruppen 0000. Füllen Sie jede Gruppe auf vier Ziffern auf, dann erhalten Sie 2001:0db8:0000:0000:0000:ff00:0042:8329, die erweiterte Form, die Reverse DNS und viele Log-Tools verwenden.

Wie viele Zeichen hat die längste IPv6-Adresse?

39 in der vollen Hex-Form: acht Gruppen zu vier Ziffern und sieben Doppelpunkte. Die Form mit IPv4-Ende kann länger sein, deshalb beträgt die Puffergröße INET6_ADDRSTRLEN der Socket-API 46 Bytes, genug für 0000:0000:0000:0000:0000:ffff:255.255.255.255 und das abschließende NUL. Gekürzte Adressen sind meist viel kürzer; die Adresse :: hat nur zwei Zeichen.

Warum wird ::ffff:c000:280 zu ::ffff:192.0.2.128?

Weil RFC 5952 empfiehlt, die letzten 32 Bits einer IPv4-gemappten Adresse als IPv4-Adresse mit Punkten zu schreiben, da genau das diese Bits bedeuten. Beide Schreibweisen sind dieselbe Adresse und beide gültige Eingaben. Browser sind die Ausnahme: Der URL-Standard gibt immer die Hex-Form aus, sodass dieselbe Adresse in der Adressleiste als [::ffff:c000:280] erscheint.

Wie schreibe ich eine IPv6-Adresse mit Port in eine URL?

Setzen Sie die Adresse in eckige Klammern und den Port dahinter: http://[2001:db8::1]:8443/. Ohne Klammern sähe der Port wie eine weitere Gruppe aus, deshalb rät RFC 5952 davon ab, 2001:db8::1:8443 zu schreiben. Eckige Klammern stehen in URLs nur für IPv6-Literale. Eine Zone wie %eth0 kann überhaupt nicht in eine Browser-URL; Browser lehnen sie ab.

Wie kürze ich eine IPv6-Adresse in Python?

Parsen Sie sie mit dem Modul ipaddress und lesen Sie .compressed für die kanonische Kurzform oder .exploded für alle 32 Ziffern: ipaddress.ip_address('2001:0db8::0001').compressed ergibt '2001:db8::1', und str() liefert dasselbe. In Go erledigen String() und StringExpanded() von netip.Addr dieselbe Aufgabe, und MySQLs INET6_NTOA(INET6_ATON(…)) gibt kanonischen Text in Kleinbuchstaben aus.

Kann ich eine Liste von IPv6-Adressen auf einmal kürzen?

Ja. Fügen Sie bis zu 100 Adressen ein, eine pro Zeile, und das Tool wechselt zu einer Tabelle mit der gekürzten und der erweiterten Form jeder Zeile und den Regeln aus RFC 5952, gegen die ihre Schreibweise verstieß. Zeilen, die keine Adressen sind, werden markiert statt entfernt, sodass die Zeilen weiter zu Ihrer Eingabe passen. Kopieren Sie eine Spalte oder laden Sie eine CSV herunter; nichts verlässt Ihren Browser.

Fehlt Ihnen etwas?Funktion oder neues Tool vorschlagen