Frage

Ich mag die Daten von $_SERVER["REMOTE_ADDR"] in PHP in ein DB-Feld zurück zu speichern, ziemlich einfache Aufgabe, wirklich. Das Problem ist, dass ich keine richtigen Informationen über die maximale Länge der Textdarstellung eine IPv6-Adresse finden, das ist, was ein Webserver durch $_SERVER["REMOTE_ADDR"] bietet.

ich bei der Umwandlung der Textdarstellung in die 128 Bits nicht interessiert bin die Adresse in der Regel in codiert ist, ich möchte nur wissen, wie viele Zeichen maximal jede IPv6-Adresse von $_SERVER["REMOTE_ADDR"] zurück speichern benötigt werden.

War es hilfreich?

Lösung

45 Zeichen .

Sie können eine Adresse erwarten sein

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

8 * 4 + 7 = 39

8 Gruppen von 4 Stellen mit 7 : zwischen ihnen.

Aber wenn Sie eine IPv4-mapped IPv6-Adresse , die letzten beiden Gruppen durch ., zB in der Basis 10 getrennt geschrieben werden. [::ffff:192.168.100.228]. Ausgeschrieben voll:

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

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

Beachten Sie, ist dies eine Eingabe / Anzeige-Konvention - es ist immer noch eine 128-Bit-Adresse und für die Lagerung wäre es wahrscheinlich am besten, auf dem rohen Kolon zu standardisieren getrennten Format, das heißt [0000:0000:0000:0000:0000:ffff:c0a8:64e4] für die oben genannte Adresse

.

Andere Tipps

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

#define INET6_ADDRSTRLEN 46

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

meine eigene Frage beantwortet:

  

IPv6-Adressen werden in der Regel als acht Gruppen zu je vier hexadezimalen Ziffern geschrieben, wobei jede Gruppe durch einen Doppelpunkt getrennt (:).

Das ist also 39 Zeichen max.

Ich denke, @Deepak Antwort in diesem Link, um mehr Nähe Antwort zu korrigieren. Max Länge für die Client-IP-Adresse . So richtige Größe 45 nicht 39. Manchmal versuchen wir in den Feldern Größe schnorren, aber es scheint besser, wenn wir genügend Speichergröße herzustellen.

Wie angegeben eine Standard-IPv6-Adresse ist höchstens 45 Zeichen, aber eine IPv6-Adresse kann auch ein endende%, gefolgt von einem „Rahmen“ oder „Zone“ String, der keine feste Länge hat, ist aber im Allgemeinen eine kleine positive ganze Zahl oder ein Netzwerk-Interface-Name, so in der Realität kann es größer als 45 Zeichen lang sein. Netzwerk-Interface-Namen sind in der Regel "eth0", "eth1", "wlan0", so 50 Wahl als die Grenze wahrscheinlich gut genug ist.

Achten Sie auf bestimmte Header wie HTTP_X_FORWARDED_FOR, die eine einzelne IP-Adresse zu enthalten scheinen. Sie können tatsächlich mehrere Adressen (eine Kette von Proxy Ich gehe davon) enthalten.

Sie werden zu sein scheinen kommagetrennte - und kann viel länger sein als 45 Zeichen insgesamt -. so überprüfen, bevor in DB Speicher

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top