::ffff:
是一个子网前缀对于位于IPv6(128位)空间内的IPv4(32位)地址。 IPv6分为两部分,子网前缀和接口后缀。每个长度为64位,或者4个4个十六进制字符组。
在IPv6中,你被允许删除前导零,然后取出连续的零,这意味着::ffff:
实际上转化为0000:0000:ffff:0000
,该地址已被指定为IPv4向IPv6子网前缀,因此,任何IPv6的处理器就会明白它的工作与一个IPv4地址并相应地处理它。
在不久的将来,IP地址将全部是IPv6,这是因为我们在IPv4地址空间中几乎没有数字(42亿,减去一些空间用于其他目的)。
IPv6允许更大的空间。 “对于任何人来说,340美元都足以成为 ” - 比尔盖茨谈到IPv6。
它开始解决使用IPv6命名空间的IP地址,因此包括::ffff:
在你的代码,因为在将来会有那些冒号之间真正的十六进制数据是非常重要的。如果您出于审美原因将其剥离,则当您的代码切换到IPv6网络或遇到IPv6地址时,您的代码将会中断。
某些网络当前正在运行IPv6,您将很快遇到IPv6 IP地址;立即做出飞跃或将来有可能破坏您的代码。
TL; DR(简称)版本的问题是:一切工作正常。不要改变它,它是IPv4地址的IPv6版本。
如果你想使你的代码兼容IPv6,所有你需要做的是检查是否有::ffff:
前缀...如果存在,将其删除并将其余部分处理为IPv4 ...如果::ffff:
不存在,则它是IPv6地址,需要按照这种方式进行处理。 您可以通过查看句点是否在字符串中进行仔细检查,如果是,则为IPv4。
请记住,除了需要对IP地址进行的调整外,您只需记录IP,对吗?解析器和日志聚合将在未来期望::ffff:127.0.01
等等。除非您需要更改IP,否则请将其保留为您收到的内容。
那么你用什么'req.ip'或'req.ips'? – 2015-04-02 11:32:02
'req.ip',刚试过'req.ips'作为测试。我只是不确定是什么导致前缀':: ffff:'。 – rockerBOO 2015-04-02 11:33:27
http://stackoverflow.com/q/5861107/1700321,http://en.wikipedia.org/wiki/IPv6_address#Presentation'虚线四舍五入符号'。 – 2015-04-02 11:35:25