У меня есть ip и сетевая маска
192.168.1.0 255.255.255.0
Мне нужно преобразовать маску сети в формат CIDR
192.168.1.0/24
Как мне конвертировать адрес ipv4 и маску сети в формат cidr?
Я использую PHP5.6
Сложным способом было бы преобразовать маску сети в двоичную и посчитать количество старших 1 бит. Но поскольку существует только 33 возможных значения, более простой способ — это просто ассоциативный массив:
$netmask_to_cidr = array(
'255.255.255.255' => 32,
'255.255.255.254' => 31,
'255.255.255.252' => 30,
...
'128.0.0.0' => 1,
'0.0.0.0' => 0);
Немного подержите тему, но может помочь кто-то другой и у вас есть здесь решение:
function mask2cidr($mask)
{
$long = ip2long($mask);
$base = ip2long('255.255.255.255');
return 32-log(($long ^ $base)+1,2);
/* xor-ing will give you the inverse mask,
log base 2 of that +1 will return the number
of bits that are off in the mask and subtracting
from 32 gets you the cidr notation */
}