PHP 將 IPv4 CIDR subnet IP 展開

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

PHP 將 IPv4 CIDR subnet IP 展開

PHP 將 CIDR IP 展開:

  1. <?php
  2. function ip_cidr_list($cidr) {
  3. list($ip, $vlsm) = explode('/', $cidr);
  4. $start_ip = long2ip((ip2long($ip)) & ((-1 << (32 - (int)$vlsm))));
  5. $ip_count = 1 << (32 - $vlsm);
  6. $start = ip2long($start_ip);
  7. for ($i = 0; $i < $ip_count; $i++) {
  8. $ip = long2ip($start + $i);
  9. echo $ip . "\n";
  10. }
  11. }
  12. print_r(ip_cidr_list('207.64.1.68/28')); // 207.64.1.68, 207.64.1.69, .. 207.64.1.83
  13. print_r(ip_cidr_list('172.224.224.88/29')); // 172.224.224.88,172.224.224.89 .. 172.224.224.95
  14. ?>

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

  1. <?php
  2. function ip_cidr_range($cidr) {
  3. $range = [];
  4. $cidr = explode('/', $cidr);
  5. $range[0] = long2ip((ip2long($cidr[0])) & ((-1 << (32 - (int)$cidr[1]))));
  6. $range[1] = long2ip((ip2long($range[0])) + pow(2, (32 - (int)$cidr[1])) - 1);
  7. return $range;
  8. }
  9. print_r(ip_cidr_range('207.64.1.68/28')); // [207.64.1.64, 207.64.1.79]
  10. print_r(ip_cidr_range('172.224.224.88/29')); // [172.224.224.88, 172.224.224.95]
  11. ?>

作者: Tsung

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

發表迴響

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