Gil*_*les 414 ip ip-address ipv6
我想将$_SERVER["REMOTE_ADDR"]
PHP中返回的数据存储到数据库字段中,这非常简单.问题是我无法找到有关IPv6地址的文本表示的最大长度的任何适当信息,这是网络服务器提供的$_SERVER["REMOTE_ADDR"]
.
我对将文本表示转换为地址通常编码的128位不感兴趣,我只想知道存储返回的任何IPv6地址需要多少个字符$_SERVER["REMOTE_ADDR"]
.
Mat*_*ley 585
45个字符.
你可能期望一个地址
0000:0000:0000:0000:0000:0000:0000:0000
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
(6*4 + 5)+ 1 +(4*3 + 3)= 29 + 1 + 15 = 45
注意,这是一个输入/显示约定 - 它仍然是一个128位地址,对于存储,它可能最好标准化原始冒号分隔格式,即[0000:0000:0000:0000:0000:ffff:c0a8:64e4]
上面的地址.
Yur*_*ury 83
在Linux上,请参阅constant INET6_ADDRSTRLEN
(include <arpa/inet.h>
,see man inet_ntop
).在我的系统上(标题"in.h"):
#define INET6_ADDRSTRLEN 46
Run Code Online (Sandbox Code Playgroud)
最后一个字符用于终止NULL,正如我所说,所以最大长度为45,与其他答案一样.
Gil*_*les 14
回答了我自己的问题:
IPv6地址通常写为八组,每组四个十六进制数字,每组用冒号(:)分隔.
所以最多39个字符.
如上所述,标准 ipv6 地址最多为 45 个字符,但 ipv6 地址也可以包含结尾 % 后跟“范围”或“区域”字符串,该字符串没有固定长度,但通常是一个小的正整数或网络接口名称,因此实际上它可以大于 45 个字符。网络接口名称通常是“eth0”、“eth1”、“wlan0”,因此选择 50 作为限制可能就足够了。linux 中的最大接口名称长度为 15 个字符,因此选择 60 个字节将覆盖 linux 上异常长的接口名称。
归档时间: |
|
查看次数: |
140204 次 |
最近记录: |