Префикс php cidr для сетевой маски

Я хочу преобразовать префикс cidr (например, /28) в сетевую маску (например, 255.255.255.240) и не нашел для этого функции, существует ли она в php? Если нет, то как мне это сделать?


person phpnoobipv4    schedule 19.04.2011    source источник
comment
Это примитивная математика. Может быть легко реализован за несколько минут.   -  person zerkms    schedule 19.04.2011
comment
Кстати, stackoverflow. ком/вопросы/4931721/   -  person zerkms    schedule 19.04.2011
comment
НВМ, понял: понял! $cidr_mask = 24; $бин = ''; for($i=1;$i‹=32;$i++) { $bin .= $cidr_mask ›= $i ? «1»: «0»; } $netmask = bindec($bin); эхо long2ip($netmask);   -  person phpnoobipv4    schedule 19.04.2011


Ответы (2)


Я написал класс, который содержит метод, который делает это.

function CIDRtoMask($int) {
    return long2ip(-1 << (32 - (int)$int));
}

Я разместил весь курс по адресу snipplr.

person jonavon    schedule 02.05.2011

Пример 1:

функция cidr2NetmaskAddr()

  function cidr2NetmaskAddr ($cidr) {

    $ta = substr ($cidr, strpos ($cidr, '/') + 1) * 1;
    $netmask = str_split (str_pad (str_pad ('', $ta, '1'), 32, '0'), 8);

    foreach ($netmask as &$element)
      $element = bindec ($element);

    return join ('.', $netmask);

  }

Использование

  echo cidr2NetmaskAddr ('194.234.213.0/28');

Вывод

255.255.255.240


Пример 2.

функция createNetmaskAddr()

  function createNetmaskAddr ($bitcount) {

    $netmask = str_split (str_pad (str_pad ('', $bitcount, '1'), 32, '0'), 8);

    foreach ($netmask as &$element)
      $element = bindec ($element);

    return join ('.', $netmask);

  }

Использование

  echo createNetmaskAddr (28);

Вывод

255.255.255.240

person Wh1T3h4Ck5    schedule 19.04.2011