Longueur maximale de la représentation textuelle d’une adresse IPv6?

Je veux stocker les données retournées par $_SERVER["REMOTE_ADDR"] en PHP dans un champ de firebase database, tâche assez simple, vraiment. Le problème est que je ne trouve aucune information correcte sur la longueur maximale de la représentation textuelle d’une adresse IPv6, ce que fournit un serveur Web via $_SERVER["REMOTE_ADDR"] .

Je ne suis pas intéressé par la conversion de la représentation textuelle en 128 bits dans lesquels l’adresse est généralement encodée, je veux juste savoir combien de caractères maximum sont nécessaires pour stocker toute adresse IPv6 renvoyée par $_SERVER["REMOTE_ADDR"] .

Une option légèrement naïve serait:

8 * 4 + 7 = 39

8 groupes de 4 chiffres avec 7 ‘:’ entre eux.

Mais pour prendre en compte la fonctionnalité des adresses IPv6 mappées IPv4, par exemple. [::ffff:192.168.0.1] , écrit complètement:

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

Notez qu’il s’agit d’une convention d’entrée / affichage – la quantité de données est la même et pour le stockage, il serait probablement préférable de normaliser le format séparé par des deux-points, c’est-à-dire. [0000:0000:0000:0000:ffff:7fa8:0001] pour l’adresse ci-dessus.

Sous Linux, consultez la constante INET6_ADDRSTRLEN (incluez , voir man inet_ntop ). Sur mon système (en-tête “in.h”):

 #define INET6_ADDRSTRLEN 46 

Le dernier caractère est pour terminer NULL, comme je crois, donc la longueur maximale est de 45, comme les autres réponses.

Répond à ma propre question:

Les adresses IPv6 sont normalement écrites sous la forme de huit groupes de quatre chiffres hexadécimaux, chaque groupe étant séparé par deux points (:).

Donc, c’est 39 caractères maximum.

Je pense que @Deepak répond dans ce lien est plus proche de la réponse correcte. Longueur maximale pour l’adresse IP du client . Donc, la taille correcte est de 45 et non de 39. Parfois, nous essayons de scruter la taille des champs, mais il semble que cela soit mieux si nous préparons suffisamment de taille de stockage.

Comme indiqué, une adresse ipv6 standard est au maximum de 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 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”, alors choisir 50 comme limite est probablement suffisant.

Attention à certains en-têtes tels que HTTP_X_FORWARDED_FOR qui semblent contenir une seule adresse IP. Ils peuvent en réalité contenir plusieurs adresses (une chaîne de procurations que je suppose).

Ils sembleront être délimités par des virgules – et pourront dépasser 45 caractères au total – alors vérifiez avant de les stocker dans la firebase database.