猿问

IPv6地址的文本表示形式的最大长度?

$_SERVER["REMOTE_ADDR"]实际上,我想将PHP 返回的数据存储到DB字段中。问题是我找不到有关IPv6地址的文本表示形式的最大长度的任何适当信息,而网络服务器正是通过IPv6地址提供的$_SERVER["REMOTE_ADDR"]

我不希望将文本表示形式转换为地址通常使用的128位编码,我只想知道存储由返回的任何IPv6地址最多需要多少个字符$_SERVER["REMOTE_ADDR"]


当年话下
浏览 514回答 3
3回答

临摹微笑

45个字符。您可能希望地址是0000:0000:0000:0000:0000:0000:0000:00008 * 4 + 7 = 398组4位数字,:中间有7位。但是,如果您有一个映射了IPv4的IPv6地址,那么最后两个组可以以10为基数写.,例如。[::ffff:192.168.100.228]。完全写出来:0000:0000:0000:0000:0000:ffff:192.168.100.228(6 * 4 + 5)+ 1 +(4 * 3 + 3)= 29 + 1 + 15 = 45注意,这是一个输入/显示约定-它仍然是一个128位地址,对于存储而言,最好以原始冒号分隔的格式进行标准化,即[0000:0000:0000:0000:0000:ffff:c0a8:64e4]上面的地址。

阿晨1998

在Linux上,请参见constant INET6_ADDRSTRLEN(包括<arpa/inet.h>,请参见man inet_ntop)。在我的系统上(标头“ in.h”):#define INET6_ADDRSTRLEN 46最后一个字符是终止NULL(如我所相信的),因此最大长度为45,其他答案也是如此。

繁花如伊

如所示,标准ipv6地址最多为45个字符,但是ipv6地址也可以包含结尾%,后跟“范围”或“区域”字符串,该字符串没有固定的长度,但通常是一个小的正整数或网络接口名称,因此实际上可以超过45个字符。网络接口名称通常为“ eth0”,“ eth1”,“ wlan0”,因此选择50作为限制可能就足够了。
随时随地看视频慕课网APP
我要回答