2017-08-15 104 views
1

我需要将IPv6地址转换为IPv4地址。要做到这一点,我使用的代码从pedmillon's answer to a related question在PHP中将IPv6转换为IPv4地址

$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。

+6

IPv6地址不能转换为IPv4地址。这就像想把苹果变成香蕉一样。首先,有** 340,282,366,920,938,463,463,374,607,431,768,211,456 **可能的IPv6地址,而只有** 4,294,967,296 **可能的IPv4地址。所以让我细化一下:就像想把几个苹果星系变成一个香蕉一样。 – spectras

+0

嗯..那么它会是最好的解决方案,如果我强制我的Apache使用IPv4地址,而不是? –

+2

面向未来的解决方案将支持ipv6。为了简化转换,如果你不想处理这两个系统,你可以告诉你的服务器你想要ipv4地址映射到ipv6地址空间,然后你可以使用ipv6。 – spectras

回答

4

IPv4和IPv6是两种完全不同的互不兼容的网络寻址方案。没有办法从一个“翻译”到另一个。 IPv4地址不对应于特定的IPv6地址,反之亦然。互联网上的绝大多数节点仍然只使用IPv4地址,一小部分同时运行IPv4和IPv6的双栈,并且一个极小的数字可能仅限于IPv6。 IPv4和IPv6节点不能直接相互通话。从长远来看,每个人都应该完全转向IPv6,但这还有很长的路要走。

你能解释我如何使用IPv6地址来阻止国家

您阻止使用IPv4的特定区域用同样的方法:获取IP地址映射到地理位置数据库。唯一的区别是,你需要找到一个数据库或服务,它为IPv6地址。

+0

IP块归属方案使构建这样的数据库变得困难得多(更不用说它会更大)。事实上,我刚刚检查了三个支持ipv6的地理定位服务,而他们三个都有我的国家错误。我的托管服务器也一样。虽然使用ipv4地址,他们可以非常准确地找到我的位置(正确的邻居)。 – spectras

+1

我并没有声称这很容易或现实...... ;-) – deceze

+0

'从长远来看,每个人都应该专门转向IPv6,但这还有很长的路要走。我有多少年了? ;) –