Longueur maximale de la représentation textuelle d'une adresse IPv6?
Je veux stocker les données renvoyées par $_SERVER["REMOTE_ADDR"]
en PHP dans un champ DB, la tâche assez simple, vraiment. Le problème est que je ne peux pas trouver toutes les informations appropriées au sujet de la longueur maximale de la représentation textuelle d'une adresse IPv6, qui est ce qu'un serveur web fournit par $_SERVER["REMOTE_ADDR"]
.
Je ne suis pas intéressé dans la conversion de la représentation textuelle dans la 128 bits de l'adresse est généralement codé, je veux juste savoir combien de caractères maximum sont nécessaires pour stocker toute IPv6 adresse retournée par $_SERVER["REMOTE_ADDR"]
.
- Ce sujet de la zone d'index?
- #define INET_ADDRSTRLEN (16) #define INET6_ADDRSTRLEN (48)
- Source: lxr.free-electrons.com/source/include/linux/inet.h
- La question stackoverflow.com/questions/1076714/... a quelques similaires, mais les réponses utiles.
Vous devez vous connecter pour publier un commentaire.
45 caractères.
Vous pourriez vous attendre à une adresse à
8 groupes de 4 chiffres à 7
:
entre eux.Mais si vous avez une IPv4 mappée adresse IPv6, les deux derniers groupes peuvent être écrit en base 10 séparés par
.
, par exemple.[::ffff:192.168.100.228]
. Écrit entièrement:Remarque, c'est une entrée/affichage de la convention - c'est toujours un 128 bits de l'adresse et de stockage, il serait probablement préférable de normaliser sur le raw du côlon format séparé, c'est à dire
[0000:0000:0000:0000:0000:ffff:c0a8:64e4]
pour l'adresse ci-dessus.Sur Linux, voir constant
INET6_ADDRSTRLEN
(inclure<arpa/inet.h>
, voirman inet_ntop
). Sur mon système (en-tête de "en.h"):Le dernier caractère est pour mettre fin à NULL, comme je le crois, de sorte que la longueur maximum est de 45 ans, comme d'autres réponses.
Répondu à ma propre question:
Donc, c'est de 39 caractères max.
Je pense que @Deepak réponse dans ce lien est plus proche de la réponse correcte. Longueur Max pour adresse ip du client. Afin de corriger la taille est de 45 pas 39. Parfois, nous essayons de scrounge dans les champs de taille, mais il semble mieux si nous préparer suffisamment la taille de stockage.
Comme indiqué une adresse ipv6 standard est à plus de 45 caractères, mais une adresse ipv6 peut également inclure une fin %, suivie par un "champ d'application" ou "zone" de la chaîne, qui n'a pas de longueur fixe, mais est généralement un petit nombre entier positif ou un nom d'interface réseau, donc en réalité, il peut être plus grand que 45 caractères. Des noms d'interfaces réseau sont généralement "eth0", "eth1", "wlan0", afin de choisir 50 que la limite est probablement assez bon.
Attention à certains en-têtes tels que
HTTP_X_FORWARDED_FOR
qui semblent contenir une adresse IP unique. Ils peuvent en fait contenir plusieurs adresses (une chaîne de procurations je suppose).Ils semblent être délimité par des virgules - et peut-être beaucoup plus longtemps que 45 caractères au total - afin de vérifier avant de le ranger dans la DB.