Получение списка IP-адресов из нотации CIDR в PHP - PullRequest
17 голосов
/ 08 февраля 2011

Есть ли способ (или функция / класс) получить список IP-адресов из нотации CIDR?

Например, у меня есть 73.35.143.32/27 CIDR и я хочу получить список всехIP в этой записи.Есть предложения?

Спасибо.

Ответы [ 12 ]

0 голосов
/ 19 октября 2015

Исправлена ​​версия скрипта Kosmonaft:

function get_list_ip($ip_addr_cidr){

        $ip_arr = explode("/", $ip_addr_cidr);    
        $bin = "";

        for($i=1;$i<=32;$i++) {
            $bin .= $ip_arr[1] >= $i ? '1' : '0';
        }

        $ip_arr[1] = bindec($bin);

        $ip = ip2long($ip_arr[0]);
        $nm = $ip_arr[1];
        $nw = ($ip & $nm);
        $bc = $nw | ~$nm;
        $bc_long = ip2long(long2ip($bc));

        echo "Number of Hosts:    " . ($bc_long - $nw - 1) . "<br/>";
        echo "Host Range:         " . long2ip($nw + 1) . " -> " . long2ip($bc - 1) . "<br/>". "<br/>";

        for($zm=1;($nw + $zm)<=($bc_long - 1);$zm++)
        {
            echo long2ip($nw + $zm).  "<br/>";
        }
    }
0 голосов
/ 25 октября 2012

Хей. Мне также нужна была эта функция, и я редактирую еще 1, чтобы вернуть мне список всех IP-адресов из диапазона. Это вернет список IP-адресов из нотации CIDR. Наслаждайся этим;)

<?php 

    $ip_addr_cidr = "192.256.0.0/16";
    $ip_arr = explode('/', $ip_addr_cidr);

    $bin = '';
    for($i=1;$i<=32;$i++) {
        $bin .= $ip_arr[1] >= $i ? '1' : '0';
    }
    $ip_arr[1] = bindec($bin);

    $ip = ip2long($ip_arr[0]);
    $nm = ip2long($ip_arr[1]);
    $nw = ($ip & $nm);
    $bc = $nw | (~$nm);

    echo "Number of Hosts:    " . ($bc - $nw - 1) . "<br/>";
    echo "Host Range:         " . long2ip($nw + 1) . " -> " . long2ip($bc - 1) . "<br/>". "<br/>";

    for($zm=1;($nw + $zm)<=($bc - 1);$zm++)
        {
        echo long2ip($nw + $zm).  "<br/>";
        }

    ?>
...