当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《IPv6地址的文本表示的最大长度?》经验,为你挑选了4个好方法。

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

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



1> Matthew Scha..:

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


头文件将INET6_ADDRSTRLEN定义为46,它适合45个字符加尾随空值.
@FelipeSchenone其那种无用的思考 - 弄清楚尺寸并使用它.你想要扩展缓冲区的唯一时间是它是否有助于填充,所以64个字符,但45(+ 1)是最佳的.
值得注意的是,IPv6地址也可能包含范围区域http://stackoverflow.com/questions/5746082/ipv6-link-local-address-format,例如,您可以从RemoteEndpointMessageProperty.Address获取该地址.

2> Yury..:

在Linux上,请参阅constant INET6_ADDRSTRLEN(include ,see man inet_ntop).在我的系统上(标题"in.h"):

#define INET6_ADDRSTRLEN 46

最后一个字符用于终止NULL,正如我所说,所以最大长度为45,与其他答案一样.



3> Gilles..:

回答了我自己的问题:

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

所以最多39个字符.


然而,显然有一个警告,请参阅http://stackoverflow.com/a/7477384/3787376("客户端IP地址的最大长度") - 引用:"对于IPv4映射的IPv6地址,字符串可以超过39个字符." .它表示"IPv4映射的IPv6"是45个字符,格式为"NNNN:NNNN:NNNN:NNNN:NNNN:NNNN:192.168.158.190".因此,最大值应为45个字符.http://stackoverflow.com/a/166157/3787376(这个问题)的答案似乎也证明了这一点.

4> QMaster..:

我认为@Deepak在这个链接中的答案更接近正确答案.客户端IP地址的最大长度.所以正确的大小是45而不是39.有时我们试图在字段大小中搜索,但是如果我们准备足够的存储大小似乎更好.

推荐阅读
跟我搞对象吧
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有