Je veux stocker les données renvoyées par $_SERVER["REMOTE_ADDR"]
en PHP dans un champ DB, tâche assez simple, vraiment. Le problème est que je ne trouve aucune information appropriée sur la longueur maximale de la représentation textuelle d'une adresse IPv6, ce que fournit un serveur Web $_SERVER["REMOTE_ADDR"]
.
Je ne suis pas intéressé par la conversion de la représentation textuelle en 128 bits où l'adresse est généralement codée, je veux juste savoir combien de caractères maximum sont nécessaires pour stocker une adresse IPv6 retournée par $_SERVER["REMOTE_ADDR"]
.
ip
ip-address
ipv6
Gilles
la source
la source
Réponses:
45 caractères .
Vous pourriez vous attendre à ce qu'une adresse soit
8 groupes de 4 chiffres avec 7
:
entre eux.Mais si vous avez une adresse IPv6 mappée IPv4 , les deux derniers groupes peuvent être écrits en base 10 séparés par
.
, par exemple.[::ffff:192.168.100.228]
. Écrit entièrement:Remarque, il s'agit d'une convention d'entrée / affichage - c'est toujours une adresse de 128 bits et pour le stockage, il serait probablement préférable de standardiser le format séparé par deux points, c'est-
[0000:0000:0000:0000:0000:ffff:c0a8:64e4]
à- dire pour l'adresse ci-dessus.la source
Sous Linux, voir constant
INET6_ADDRSTRLEN
(inclure<arpa/inet.h>
, voirman inet_ntop
). Sur mon système (en-tête "in.h"):Le dernier caractère est pour terminer NULL, comme je le crois, donc la longueur maximale est de 45, comme les autres réponses.
la source
Répondu à ma propre question:
C'est donc 39 caractères max.
la source
Je pense que la réponse @Deepak dans ce lien est plus proche de la bonne réponse. Longueur maximale pour l'adresse IP du client . La taille correcte est donc 45 et non 39. Parfois, nous essayons de saisir la taille des champs, mais il semble préférable de préparer une taille de stockage suffisante.
la source
Comme indiqué, une adresse ipv6 standard contient au plus 45 caractères, mais une adresse ipv6 peut également inclure un% de fin suivi d'une chaîne "scope" ou "zone", qui n'a pas de longueur fixe mais qui est généralement un petit entier positif ou une interface réseau nom, donc en réalité il peut être plus grand que 45 caractères. Les noms d'interface réseau sont généralement "eth0", "eth1", "wlan0", donc choisir 50 comme limite est probablement suffisant.
la source
Méfiez-vous de certains en-têtes tels que ceux
HTTP_X_FORWARDED_FOR
qui semblent contenir une seule adresse IP. Ils peuvent en fait contenir plusieurs adresses (une chaîne de procurations je suppose).Ils sembleront être séparés par des virgules - et peuvent être beaucoup plus longs que 45 caractères au total - alors vérifiez avant de les stocker dans DB.
la source