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

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

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


#1楼

回答了我本身的问题: 编码

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

因此最多39个字符。 代理


#2楼

45个字符code

你可能指望一个地址 get

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

8 * 4 + 7 = 39 io

8组4位数字,7位:它们之间。 搜索

可是若是你有一个IPv4映射的IPv6地址 ,那么最后两个组能够用10分隔的基数写入. ,例如。 [::ffff:192.168.100.228] 。 彻底写出来: bug

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]上面的地址。


#3楼

我认为@Deepak在这个连接中的答案更接近正确答案。 客户端IP地址的最大长度 。 因此正确的大小是45而不是39.有时咱们试图在字段大小中搜索,可是若是咱们准备足够的存储大小彷佛更好。


#4楼

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

#define INET6_ADDRSTRLEN 46

最后一个字符用于终止NULL,正如我所说,因此最大长度为45,与其余答案同样。


#5楼

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

它们看起来是以逗号分隔的 - 而且可能总共超过45个字符 - 所以请在存储到DB以前进行检查。

相关文章
相关标签/搜索