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

时间:2008-10-03 09:51:52

标签: ip ip-address ipv6

我想将PHP中$_SERVER["REMOTE_ADDR"]返回的数据存储到数据库字段中,这非常简单。问题是我无法找到有关IPv6地址的文本表示的最大长度的任何正确信息,这是网络服务器通过$_SERVER["REMOTE_ADDR"]提供的。

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

6 个答案:

答案 0 :(得分:559)

45个字符

您可能希望地址

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

8 * 4 + 7 = 39

8组4位数,其中7 :

但是如果你有一个IPv4-mapped IPv6 address,那么最后两组可以写在以.分隔的基数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]

答案 1 :(得分:77)

在Linux上,请参阅常量INET6_ADDRSTRLEN(包括<arpa/inet.h>,请参阅man inet_ntop)。在我的系统上(标题“in.h”):

#define INET6_ADDRSTRLEN 46

最后一个字符用于终止NULL,我相信,所以最大长度为45,与其他答案一样。

答案 2 :(得分:15)

回答了我自己的问题:

  

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

最多39个字符

答案 3 :(得分:6)

我认为@Deepak在此链接中的答案更接近正确答案。 Max length for client ip address。所以正确的大小是45而不是39.有时我们会尝试在字段大小中搜索,但如果我们准备足够的存储空间大小似乎更好。

答案 4 :(得分:4)

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

答案 5 :(得分:1)

注意某些标题,例如HTTP_X_FORWARDED_FOR,似乎包含单个IP地址。它们实际上可能包含多个地址(我假设的代理链)。

它们看起来像comma delimited - 并且总长度超过45个字符 - 所以在存储到数据库之前检查。