webentwicklung-frage-antwort-db.com.de

Maximale Länge der Textdarstellung einer IPv6-Adresse?

Ich möchte die von $_SERVER["REMOTE_ADDR"] Zurückgegebenen Daten in PHP=) in einem DB-Feld speichern, eigentlich eine ziemlich einfache Aufgabe Maximale Länge des Textdarstellung einer IPv6-Adresse, die ein Webserver durch $_SERVER["REMOTE_ADDR"] bereitstellt.

Ich bin nicht daran interessiert, die Textdarstellung in die 128 Bit zu konvertieren, in denen die Adresse normalerweise codiert ist. Ich möchte nur wissen, wie viele Zeichen maximal benötigt werden, um eine von $_SERVER["REMOTE_ADDR"] Zurückgegebene IPv6-Adresse zu speichern.

403
Gilles

45 Zeichen .

Vielleicht erwarten Sie eine Adresse

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

8 * 4 + 7 = 39

8 4-stellige Gruppen mit 7 : Dazwischen.

Wenn Sie jedoch eine IPv4-zugeordnete IPv6-Adresse haben, können die letzten beiden Gruppen in die Basis 10 geschrieben werden, die durch . Getrennt sind, z. [::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 dies eine Eingabe-/Anzeigekonvention ist - es handelt sich immer noch um eine 128-Bit-Adresse, und für die Speicherung ist es wahrscheinlich am besten, das durch Doppelpunkte getrennte Rohformat zu standardisieren, d. H. [0000:0000:0000:0000:0000:ffff:c0a8:64e4] Für die obige Adresse.

572

Unter Linux finden Sie Konstante INET6_ADDRSTRLEN (Einschließlich <arpa/inet.h>, Siehe man inet_ntop). Auf meinem System (Header "in.h"):

#define INET6_ADDRSTRLEN 46

Das letzte Zeichen dient zum Beenden von NULL, wie ich glaube, also beträgt die maximale Länge 45, wie andere Antworten.

80
Yury

Beantwortete meine eigene Frage:

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

Das sind also maximal 39 Zeichen.

15
Gilles

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

6
QMaster

Wie angegeben, besteht eine Standard-IPv6-Adresse aus höchstens 45 Zeichen. Eine IPv6-Adresse kann jedoch auch eine Endung% gefolgt von einer Zeichenfolge "scope" oder "zone" enthalten, die keine feste Länge hat, im Allgemeinen aber eine kleine positive Ganzzahl oder eine Netzwerkschnittstelle ist Name, so kann es in Wirklichkeit größer als 45 Zeichen sein. Die Namen der Netzwerkschnittstellen lauten normalerweise "eth0", "eth1", "wlan0". Daher ist die Auswahl von 50 als Grenzwert wahrscheinlich ausreichend.

4
Sean F

Achten Sie auf bestimmte Überschriften wie HTTP_X_FORWARDED_FOR, die anscheinend eine einzelne IP-Adresse enthalten. Sie können tatsächlich mehrere Adressen enthalten (eine Kette von Proxys, von denen ich annehme).

Sie werden durch Kommas getrennt angezeigt und können viel länger als 45 Zeichen sein. Überprüfen Sie dies, bevor Sie sie in der Datenbank speichern.

1
Simon_Weaver