PHP 將 IPv4 CIDR subnet IP 展開

PHP 想將 CIDR 的 IP 展開,或者要抓 CIDR 最小與最大值的區間,要怎麼做呢?

PHP 將 IPv4 CIDR subnet IP 展開

PHP 將 CIDR IP 展開:

<?php                                                                                                                                                                        
function ip_cidr_list($cidr) {
    list($ip, $vlsm) = explode('/', $cidr);
    $start_ip = long2ip((ip2long($ip)) & ((-1 << (32 - (int)$vlsm))));
    $ip_count = 1 << (32 - $vlsm);

    $start = ip2long($start_ip);
    for ($i = 0; $i < $ip_count; $i++) {
        $ip = long2ip($start + $i);
        echo $ip . "\n";
    }
}

print_r(ip_cidr_list('207.64.1.68/28')); // 207.64.1.68, 207.64.1.69, .. 207.64.1.83
print_r(ip_cidr_list('172.224.224.88/29')); // 172.224.224.88,172.224.224.89 .. 172.224.224.95
?>

PHP 將 CIDR IP 展開取得最小與最大值,抓取範圍區間:

<?php                                                                                                                                                                        
function ip_cidr_range($cidr) {
    $range = [];
    $cidr = explode('/', $cidr);
    $range[0] = long2ip((ip2long($cidr[0])) & ((-1 << (32 - (int)$cidr[1]))));
    $range[1] = long2ip((ip2long($range[0])) + pow(2, (32 - (int)$cidr[1])) - 1);

    return $range;
}

print_r(ip_cidr_range('207.64.1.68/28')); // [207.64.1.64, 207.64.1.79]
print_r(ip_cidr_range('172.224.224.88/29')); // [172.224.224.88, 172.224.224.95]
?>

作者: Tsung

對新奇的事物都很有興趣, 喜歡簡單的東西, 過簡單的生活.

發表迴響

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料