【发布时间】:2018-01-23 22:56:08
【问题描述】:
我需要将 IPv6 地址转换为 IPv4 地址。为此,我使用了来自pedmillon's answer to a related question的代码:
$ipv6 = $_SERVER['REMOTE_ADDR'];
$ipv4 = hexdec(substr($ipv6, 0, 2)). "." . hexdec(substr($ipv6, 2, 2)). "." . hexdec(substr($ipv6, 5, 2)). "." . hexdec(substr($ipv6, 7, 2));
我在本地主机中尝试过, ::1 被转换为 0.1.0.0。这段代码是否正常工作?
我相信它应该显示 127.0.0.1 而不是 0.1.0.0。
【问题讨论】:
-
无法将 IPv6 地址转换为 IPv4 地址。这就像想把苹果变成香蕉。首先,有 340,282,366,920,938,463,463,374,607,431,768,211,456 个可能的 IPv6 地址,而只有 4,294,967,296 个可能的 IPv4 地址。所以让我提炼一下:这就像想把相当于几个星系的苹果变成一根香蕉。
-
hmm.. 如果我强制我的 Apache 使用 IPv4 地址,那会是最好的解决方案吗?
-
面向未来的解决方案是支持 ipv6。为了简化过渡,如果您不想同时处理这两个系统,您可以告诉服务器您希望将 ipv4 地址映射到 ipv6 地址空间,然后您就可以使用 ipv6。
-
如果这将是面向未来的解决方案,那么您能否解释一下我如何使用 IPv6 地址来阻止此链接上的国家/地区 *.com/questions/45702122/…。我已经问过这个问题,如果你能回答我如何让我的代码与 IPv6 一起工作,我会很高兴,这也是未来的证明。请看一看。
-
您找到的脚本根本不支持 IPv6。它已经过时了。从 IPv6 中猜测国家非常困难,而且在很多情况下是不可能的。 IPv6 分配的工作方式与 IPv4 的工作方式不同。它还涵盖了新的需求,例如在移动时保持相同地址的移动设备。
标签: php ip-address ipv6 ipv4