Ipv4映射的Ipv6验证


Ipv4 mapped Ipv6 validation

在rfc4291 中

即这种类型的Ipv4映射的Ipv6地址的前80个比特是0。如何使用PHP进行检查?我需要更快速、更安全的方法来做到这一点,而不是regexp。

最简单的方法是使用inet_pton将地址从可打印形式转换为二进制形式。这将给你一个字符串,其中每个宪章对应于地址的8位。检查前80位是否为零就像检查返回字符串的前10个字符一样简单:

$addr = '::10.1.2.3';
$bytes = inet_pton($addr);
if (substr($bytes, 0, 10) == "'x00'x00'x00'x00'x00'x00'x00'x00'x00'x00") {
  echo "Yes'n";
} else {
  echo "No'n";
}