545 Stimmen

Maximale Länge der textuellen Darstellung einer IPv6-Adresse?

Ich möchte die Daten speichern, die von $_SERVER["REMOTE_ADDR"] in PHP in ein DB-Feld zu übertragen, eigentlich eine recht einfache Aufgabe. Das Problem ist, dass ich keine richtigen Informationen über die maximale Länge der textuelle Darstellung einer IPv6-Adresse, die ein Webserver über $_SERVER["REMOTE_ADDR"] .

Ich bin nicht daran interessiert, die textuelle Darstellung in die 128 Bits umzuwandeln, in denen die Adresse normalerweise kodiert ist. Ich möchte nur wissen, wie viele Zeichen maximal benötigt werden, um eine IPv6-Adresse zu speichern, die von $_SERVER["REMOTE_ADDR"] .

772voto

Matthew Scharley Punkte 121038

45 Zeichen .

Sie könnten erwarten, dass eine Adresse lautet

0000:0000:0000:0000:0000:0000:0000:0000

8 * 4 + 7 = 39

8 Gruppen von 4 Ziffern mit 7 : zwischen ihnen.

Aber wenn Sie eine IPv4-gemappte IPv6-Adresse können die letzten beiden Gruppen zur Basis 10 geschrieben werden, getrennt durch . , z.B.. [::ffff:192.168.100.228] . Vollständig ausgeschrieben:

0000:0000:0000:0000:0000:ffff:192.168.100.228

(6 * 4 + 5) + 1 + (4 * 3 + 3) = 29 + 1 + 15 = 45

Beachten Sie, dass es sich hierbei um eine Eingabe-/Anzeigekonvention handelt - es handelt sich immer noch um eine 128-Bit-Adresse, und für die Speicherung wäre es wahrscheinlich am besten, das durch Doppelpunkte getrennte Rohformat zu verwenden, d. h. [0000:0000:0000:0000:0000:ffff:c0a8:64e4] für die oben genannte Adresse.

122voto

Yury Punkte 2752

Unter Linux, siehe Konstante INET6_ADDRSTRLEN (enthalten <arpa/inet.h> siehe man inet_ntop ). Auf meinem System (Header "in.h"):

#define INET6_ADDRSTRLEN 46

Das letzte Zeichen ist für die Beendigung von NULL, wie ich glaube, so dass die maximale Länge 45 ist, wie andere Antworten.

20voto

Sean F Punkte 3844

Wie bereits erwähnt, besteht eine ipv6-Standardadresse aus höchstens 45 Zeichen, aber eine ipv6-Adresse kann auch eine Endung % enthalten, gefolgt von einer "scope"- oder "zone"-Zeichenkette, die keine feste Länge hat, sondern im Allgemeinen eine kleine positive ganze Zahl oder ein Netzwerkschnittstellenname ist, so dass sie in Wirklichkeit länger als 45 Zeichen sein kann. Netzwerkschnittstellennamen sind in der Regel "eth0", "eth1", "wlan0", so dass 50 Zeichen als Grenze wahrscheinlich ausreichen. Die Die maximale Länge des Schnittstellennamens unter Linux beträgt 15 Zeichen. Die Wahl von 60 Bytes deckt also ungewöhnlich lange Schnittstellennamen unter Linux ab.

13voto

Gilles Punkte 6837

Ich habe meine eigene Frage beantwortet:

IPv6-Adressen werden normalerweise als acht Gruppen von vier hexadezimalen Ziffern geschrieben, wobei jede Gruppe durch einen Doppelpunkt (:) getrennt ist.

Das sind also maximal 39 Zeichen.

8voto

QMaster Punkte 3479

Ich denke, die Antwort von @Deepak in diesem Link kommt der richtigen Antwort näher. Maximale Länge für die Client-IP-Adresse . Die richtige Größe ist also 45 und nicht 39. Manchmal versuchen wir, in Feldgrößen zu schnorren, aber es scheint besser zu sein, wenn wir genügend Lagergröße vorbereiten.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X