php实现ipv4转换ipv6

123534980.jpg

首先ipv6是什么?

IPv6是下一版本的互联网协议,也可以说是下一代互联网的协议,它的提出最初是因为随着互联网的迅速发展,IPv4定义的有限地址空间将被耗尽,地址空间的不足必将妨碍互联网的进一步发展。为了扩大地址空间,拟通过IPv6重新定义地址空间。IPv4采用32位地址长度,只有大约43亿个地址,估计在2005-2010年间将被分配完毕,而IPv6采用128位地址长度,几乎可以不受限制地提供地址。

ipv4转换ipv6原理:

我们知道 ipv4的地址是32位二进制用点分十进制表示。

而ipv6的地址是128位二进制 通常用8组16进制数表示。

所以,想要写出兼容的ipv6地址。 只需要把32位的ipv4地址 转化成十六进制写法就可以了。

也就是说前面96位都是0,后面32位用ipv4的地址表示出来就可以。(其中::表示全是零)

php实现ipv4转换ipv6代码如下:

例如百度www.baidu.com 的ipv4是220.181.111.85,
将它转换成ipv6:
4) { return false; } for ($i = 0; $i < 4; ++$i) { if ($ip_parts[$i] > 255) { return false; } } $part7 = base_convert(($ip_parts[0] * 256) + $ip_parts[1], 10, 16); $part8 = base_convert(($ip_parts[2] * 256) + $ip_parts[3], 10, 16); $ip = '::ffff:'.$part7.':'.$part8; } // expand IPv6 notation if (strpos($ip, '::') !== false) { $ip = str_replace('::', str_repeat(':0000', (8 - substr_count($ip, ':'))).':', $ip); } if (strpos($ip, ':') === 0) { $ip = '0000'.$ip; } // normalize parts to 4 bytes $ip_parts = explode(':', $ip); foreach ($ip_parts as $key => $num) { $ip_parts[$key] = sprintf('%04s', $num); } $ip = implode(':', $ip_parts); return $ip;}$myip="220.181.111.85";echo ''.getNormalizedIP($myip).'';?>