префикс php cidr к маске сети - PullRequest
6 голосов
/ 19 апреля 2011

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

Ответы [ 2 ]

8 голосов
/ 02 мая 2011

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

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

Я разместил весь класс в snipplr .

5 голосов
/ 19 апреля 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

...