Как получить список IP-адресов из нотации CIDR в PHP?

Возможный дубликат:
Получение IP-адресов списка из нотации CIDR в PHP

Всем привет,

Мне нужно создать список IP-адресов из нотации CIDR.

Например, пользователь ввел 200.41.132.11/28. Взамен мне нужно показать список IP-адресов, соответствующих этой нотации CIDR.

Знаете ли вы функцию PHP для этого или алгоритм?

Спасибо за вашу помощь.

Мат.


person TamTam    schedule 06.04.2011    source источник


Ответы (1)


Может быть, я ошибаюсь, но попробуйте что-то вроде этого (не проверено):

function getIPfromCIDR($CIDRn) {
  $a = explode("/", $CIDRn);
  $g = explode(".", $a[0]);
  $b = '';  $res = '';
  foreach ($g as $gv) $b .= str_pad(decbin($gv), 8, '0', STR_PAD_LEFT);
  $bm = str_split(str_pad(substr($b, 0, $a[1]), 32, '0', STR_PAD_RIGHT), 8);
  foreach($bm as &$bg) $bg = bindec($bg);
  return join('.', $bm); 
  }

$addr = "200.41.132.11/28";
print_r(getIPFromCIDR($addr));

Вывод должен быть

200.41.132.0

Чтобы получить только битовую маску (сетевую маску)

function bitMask($bits) {
  $res = str_split(str_pad(str_pad('', $bits, '1'), 32, '0', STR_PAD_RIGHT), 8);
  foreach($res as &$bg) $bg = bindec($bg); 
  return join('.', $res); 
  }

echo bitMask(28);

Выход

255.255.255.240

Примечание. Это работает только для IPv4!

person Wh1T3h4Ck5    schedule 06.04.2011