Ich möchte die von $_SERVER["REMOTE_ADDR"]
PHP zurückgegebenen Daten in einem DB-Feld speichern , eigentlich eine ziemlich einfache Aufgabe. Das Problem ist, dass ich keine richtigen Informationen über die maximale Länge der Textdarstellung einer IPv6-Adresse finden kann, die ein Webserver bereitstellt $_SERVER["REMOTE_ADDR"]
.
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 erforderlich sind, um eine von zurückgegebene IPv6-Adresse zu speichern $_SERVER["REMOTE_ADDR"]
.
ip
ip-address
ipv6
Gilles
quelle
quelle
Antworten:
45 Zeichen .
Sie können eine Adresse erwarten
8 Gruppen mit 4 Ziffern mit 7
:
dazwischen.Wenn Sie jedoch eine IPv4-zugeordnete IPv6-Adresse haben , können die letzten beiden Gruppen in Basis 10 geschrieben werden, die durch
.
z.[::ffff:192.168.100.228]
. Vollständig ausgeschrieben:Beachten Sie, dass dies eine Eingabe- / Anzeigekonvention ist - es handelt sich immer noch um eine 128-Bit-Adresse. Für die Speicherung ist es wahrscheinlich am besten, das durch Doppelpunkte getrennte Format zu standardisieren, dh
[0000:0000:0000:0000:0000:ffff:c0a8:64e4]
für die oben angegebene Adresse.quelle
Unter Linux siehe Konstante
INET6_ADDRSTRLEN
(einschließlich<arpa/inet.h>
, sieheman inet_ntop
). Auf meinem System (Header "in.h"):Das letzte Zeichen dient zum Beenden von NULL, wie ich glaube, also beträgt die maximale Länge 45, wie andere Antworten.
quelle
Beantwortete meine eigene Frage:
Das sind also maximal 39 Zeichen.
quelle
Ich denke, @ Deepak Antwort in diesem Link ist näher an der richtigen Antwort. Maximale Länge für die Client-IP-Adresse . Die richtige Größe ist also 45, nicht 39. Manchmal versuchen wir, die Feldgröße einzuschränken, aber es scheint besser zu sein, wenn wir genügend Speichergröße vorbereiten.
quelle
Wie angegeben, besteht eine Standard-IPv6-Adresse aus höchstens 45 Zeichen. Eine IPv6-Adresse kann jedoch auch eine Endung% enthalten, gefolgt von einer Zeichenfolge "Bereich" oder "Zone", die keine feste Länge hat, aber im Allgemeinen eine kleine positive Ganzzahl oder eine Netzwerkschnittstelle ist Name, also kann es in Wirklichkeit größer als 45 Zeichen sein. Netzwerkschnittstellennamen sind normalerweise "eth0", "eth1", "wlan0", daher ist es wahrscheinlich gut genug, 50 als Limit zu wählen.
quelle
Achten Sie auf bestimmte Header
HTTP_X_FORWARDED_FOR
, die anscheinend nur eine einzige IP-Adresse enthalten. Sie können tatsächlich mehrere Adressen enthalten (eine Kette von Proxys, nehme ich an).Sie scheinen durch Kommas getrennt zu sein - und können insgesamt viel länger als 45 Zeichen sein - überprüfen Sie dies, bevor Sie sie in der Datenbank speichern.
quelle