【发布时间】:2015-03-16 19:20:20
【问题描述】:
我有一个带有 CIDR 前缀的 IPv6 地址。 Ex: 2001:0:3238:DFE1:0063::FEFB/32
我希望编写一个函数,以便转换 IPv6 地址以匹配所提供的 CIDR 前缀中的位数。这意味着,如果提供了 32 前缀,则 IP 地址应从左开始包含 32 位,其余应为零。在上面的例子中,期望的输出应该是:
2001:0000:0000:0000:0000:0000:0000:0000/32
我确实有其他功能可以像 2001::/32 那样快捷地访问所需的 IP
CIDR 前缀的范围为 0-128。
这是我到目前为止所拥有的,基于这篇帖子here,但我不确定它是否提供了所需的输出。有人可以看看它并提供帮助吗?我在这里直接考虑 CIDR 表示吗?
public function getCIDRMatchedIP( $ipAddress )
{
// Split in address and prefix length
list($firstaddrstr, $prefixlen) = explode('/', $ipAddress);
// Parse the address into a binary string
$firstaddrbin = inet_pton($firstaddrstr);
// Convert the binary string to a string with hexadecimal characters
# unpack() can be replaced with bin2hex()
# unpack() is used for symmetry with pack() below
$firstaddrhex = reset(unpack('H*', $firstaddrbin));
// Overwriting first address string to make sure notation is optimal
$firstaddrstr = inet_ntop($firstaddrbin);
$cidrMatchedString = $firstaddrstr.'/'.$prefixlen;
echo $cidrMatchedString;
}
【问题讨论】: