Chcę przechowywać dane zwrócone przez $_SERVER["REMOTE_ADDR"]
PHP w polu DB, całkiem proste zadanie, naprawdę. Problem polega na tym, że nie mogę znaleźć żadnej właściwej informacji o maksymalnej długości reprezentacji tekstowej adresu IPv6, co zapewnia serwer WWW $_SERVER["REMOTE_ADDR"]
.
Nie jestem zainteresowany konwersją reprezentacji tekstowej na 128 bitów, w których zwykle kodowany jest adres, chcę tylko wiedzieć, ile znaków potrzeba maksymalnie do przechowywania zwróconego adresu IPv6 $_SERVER["REMOTE_ADDR"]
.
ip
ip-address
ipv6
Gilles
źródło
źródło
Odpowiedzi:
45 znaków .
Możesz spodziewać się adresu
8 grup po 4 cyfry z 7
:
między nimi.Ale jeśli masz adres IPv6 odwzorowany na IPv4 , dwie ostatnie grupy można zapisać w bazie 10, oddzielając je
.
np.[::ffff:192.168.100.228]
. Napisane w całości:Zauważ, że jest to konwencja wprowadzania / wyświetlania - wciąż jest to 128-bitowy adres i do przechowywania prawdopodobnie najlepiej byłoby ustandaryzować w formacie surowego oddzielenia dwukropka, tj.
[0000:0000:0000:0000:0000:ffff:c0a8:64e4]
Dla powyższego adresu.źródło
W systemie Linux spójrz na stałą
INET6_ADDRSTRLEN
(dołącz<arpa/inet.h>
, zobaczman inet_ntop
). W moim systemie (nagłówek „in.h”):Ostatni znak służy do zakończenia NULL, jak wierzę, więc maksymalna długość wynosi 45, podobnie jak inne odpowiedzi.
źródło
Odpowiedziałem na własne pytanie:
To maksymalnie 39 znaków.
źródło
Myślę, że odpowiedź @Deepak w tym linku jest bliższa poprawnej odpowiedzi. Maksymalna długość adresu IP klienta . Tak więc prawidłowy rozmiar to 45, a nie 39. Czasami staramy się zmieniać rozmiar pól, ale wydaje się, że lepiej, jeśli przygotujemy wystarczająco dużo miejsca do przechowywania.
źródło
Jak wskazano, standardowy adres ipv6 ma najwyżej 45 znaków, ale adres ipv6 może również zawierać% końcowe, po którym następuje ciąg „scope” lub „zone”, który nie ma stałej długości, ale ogólnie jest małą dodatnią liczbą całkowitą lub interfejsem sieciowym nazwa, więc w rzeczywistości może mieć więcej niż 45 znaków. Nazwy interfejsów sieciowych to zazwyczaj „eth0”, „eth1”, „wlan0”, więc wybranie 50 jako limitu jest prawdopodobnie wystarczające.
źródło
Uważaj na niektóre nagłówki, takie jak te,
HTTP_X_FORWARDED_FOR
które wydają się zawierać jeden adres IP. Mogą one faktycznie zawierać wiele adresów (zakładam, że jest to łańcuch proxy).Będą wyglądać na rozdzielone przecinkami - i mogą mieć znacznie więcej niż 45 znaków ogółem - więc sprawdź przed zapisaniem w DB.
źródło