IPv6地址的文字表述的最大长度?(Maximum length of the textual re

2019-09-04 02:39发布

我想通过存储返回的数据$_SERVER["REMOTE_ADDR"]在PHP为DB场,相当简单的任务,真的。 问题是,我无法找到一个IPv6地址,这是一个网络服务器提供通过文字表述的最大长度适当的任何信息, $_SERVER["REMOTE_ADDR"]

我不感兴趣的文本表示转换为128位的地址通常是编码,我只是想知道需要多少个字符最大存储由返回的任何IPv6地址$_SERVER["REMOTE_ADDR"]

Answer 1:

45个字符

你可能期望的地址是

0000:0000:0000:0000:0000:0000:0000:0000

8 * 4 + 7 = 39

8组,每组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]对于上面的地址。



Answer 2:

在Linux中,看到恒定INET6_ADDRSTRLEN (包括<arpa/inet.h>man inet_ntop )。 在我的系统(头“in.h中”):

#define INET6_ADDRSTRLEN 46

最后一个字符是终止NULL,因为我相信,这样的最大长度为45,其他的答案。



Answer 3:

回答我的问题:

IPv6地址通常写为八组的四个十六进制数字,其中每个组由冒号(:)分隔。

所以这是最多39个字符。



Answer 4:

我觉得在这个环节@Deepak答案更接近正确答案。 最大长度为客户端IP地址 。 所以,正确的尺寸是45不是39。有时候,我们尝试在领域规模攒够,但它似乎更好,如果我们准备好足够的存储容量。



Answer 5:

如所指示的一个标准的IPv6地址是至多45个字符,但IPv6地址还可以包括结束%,其次是一个“范围”或“区域”的字符串,它不具有固定的长度,但通常是一个小的正整数或网络接口名字,所以在现实中,它可以超过45个字符更大。 网络接口名称通常为“eth0的”,将对“eth1”,“为wlan0”,所以选择50作为限制也很可能好。



Answer 6:

当心某些标题如HTTP_X_FORWARDED_FOR出现包含单个IP地址。 他们实际上可能包含多个地址(代理链我假设)。

他们将显示为逗号分隔 -并且可以更长很多超过45个字符合计-所以在DB存储前检查。



文章来源: Maximum length of the textual representation of an IPv6 address?