计算ipv6 cidr php
Calculate ipv6 cidr php
我可以使用“ip2long
”php 方法从 ipv4 的子网掩码计算 cidr。我应该如何计算 ipv6 的相同值?
例如,
我可以计算如下:
255.255.252.0 => /22
我应该如何计算像这样的 ipv6 地址:
ffff:ffff:ffff:ffff::
ffff:ffff:ffff:ffff:0:0:0:0
当我对 ipv6 进行同样的尝试时,我没有得到任何输出?
注意:我没有使用这种 CIDR 表示法计算 IP 地址。我只是想将 ipv6 的子网掩码转换为它的相关网络位。
function ip6_mask2cidr($mask) {
$s = '';
if (substr($mask, -1) == ':') $mask .= '0';
if (substr($mask, 0, 1) == ':') $mask = '0' . $mask;
if (strpos($mask, '::') !== false)
$mask = str_replace('::', str_repeat(':0', 8 - substr_count($mask, ':')).':', $mask);
foreach(explode(':',$mask) as $oct) {
// The following two lines, perhaps, superfluous.
// I left them because of the paranoia :)
$oct = trim($oct);
if ($oct == '') $s .= '0000000000000000';
else $s .= str_pad(base_convert($oct, 16, 2), 16, '0', STR_PAD_LEFT);
}
return strlen($s) - strlen(rtrim($s, '0'));
}
echo ip6_mask2cidr('ffff:ffff:ffff:ffff::') . "\n"; // 64
我可以使用“ip2long
”php 方法从 ipv4 的子网掩码计算 cidr。我应该如何计算 ipv6 的相同值?
例如,
我可以计算如下:
255.255.252.0 => /22
我应该如何计算像这样的 ipv6 地址:
ffff:ffff:ffff:ffff::
ffff:ffff:ffff:ffff:0:0:0:0
当我对 ipv6 进行同样的尝试时,我没有得到任何输出?
注意:我没有使用这种 CIDR 表示法计算 IP 地址。我只是想将 ipv6 的子网掩码转换为它的相关网络位。
function ip6_mask2cidr($mask) {
$s = '';
if (substr($mask, -1) == ':') $mask .= '0';
if (substr($mask, 0, 1) == ':') $mask = '0' . $mask;
if (strpos($mask, '::') !== false)
$mask = str_replace('::', str_repeat(':0', 8 - substr_count($mask, ':')).':', $mask);
foreach(explode(':',$mask) as $oct) {
// The following two lines, perhaps, superfluous.
// I left them because of the paranoia :)
$oct = trim($oct);
if ($oct == '') $s .= '0000000000000000';
else $s .= str_pad(base_convert($oct, 16, 2), 16, '0', STR_PAD_LEFT);
}
return strlen($s) - strlen(rtrim($s, '0'));
}
echo ip6_mask2cidr('ffff:ffff:ffff:ffff::') . "\n"; // 64