Я хочу сохранить данные, возвращаемые $_SERVER["REMOTE_ADDR"]
PHP, в поле БД, на самом деле довольно простая задача. Проблема в том, что я не могу найти какую-либо правильную информацию о максимальной длине текстового представления адреса IPv6, что обеспечивает веб-сервер $_SERVER["REMOTE_ADDR"]
.
Меня не интересует преобразование текстового представления в 128 битов, в которые обычно кодируется адрес, я просто хочу знать, сколько символов максимально необходимо для хранения любого адреса IPv6, возвращаемого $_SERVER["REMOTE_ADDR"]
.
ip
ip-address
ipv6
жилль
источник
источник
Ответы:
45 символов .
Вы можете ожидать, что адрес будет
8 групп по 4 цифры с 7
:
между ними.Но если у вас есть IPv4-сопоставленный адрес IPv6 , последние две группы можно записать в базу 10, разделив
.
, например,[::ffff:192.168.100.228]
, Выписано полностью:Обратите внимание, что это соглашение ввода / вывода - это по-прежнему 128-битный адрес, и для хранения, вероятно, было бы лучше стандартизировать формат с необработанным двоеточием, то есть
[0000:0000:0000:0000:0000:ffff:c0a8:64e4]
для указанного выше адреса.источник
В Linux смотрите константу
INET6_ADDRSTRLEN
(включайте<arpa/inet.h>
, смотритеman inet_ntop
). В моей системе (заголовок "in.h"):Последний символ предназначен для завершения NULL, как я полагаю, поэтому максимальная длина составляет 45, как и другие ответы.
источник
Ответил на мой вопрос:
Так что это максимум 39 символов.
источник
Я думаю, что ответ @Deepak в этой ссылке более близок к правильному ответу. Максимальная длина для IP-адреса клиента . Таким образом, правильный размер - 45, а не 39. Иногда мы пытаемся найти размер полей, но лучше подготовить достаточно места для хранения.
источник
Как указано, стандартный адрес ipv6 составляет не более 45 символов, но адрес ipv6 также может включать в себя конечный%, за которым следует строка «scope» или «zone», которая не имеет фиксированной длины, но обычно представляет собой небольшое положительное целое число или сетевой интерфейс. имя, так что на самом деле это может быть больше, чем 45 символов. Имена сетевых интерфейсов, как правило, имеют вид «eth0», «eth1», «wlan0», поэтому выбор 50 в качестве предела, вероятно, достаточно хорош.
источник
Следите за тем, чтобы определенные заголовки, например
HTTP_X_FORWARDED_FOR
, содержали один IP-адрес. Они могут содержать несколько адресов (я полагаю, цепочку прокси).Они будут выглядеть разделенными запятыми - и могут быть намного длиннее, чем 45 символов - поэтому проверьте перед сохранением в БД.
источник