Getting list IPs from CIDR notation in PHP

前端 未结 13 1343
慢半拍i
慢半拍i 2020-12-08 05:38

Is there a way (or function/class) to get the list of IP addresses from a CIDR notation?

For example, I have 73.35.143.32/27 CIDR and want to get the list of all IP\

13条回答
  •  粉色の甜心
    2020-12-08 06:12

    There is small fix - when someone place ip prefix like: 127.0.0.15/26 this function returns bad last IP adress. In this function is at line 4 (starts: $range[1]...) changed $cidr[0] to $range[0] - now its return last IP address good for every IP in range.

    function cidrToRange($cidr) {
      $range = array();
      $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;
    }
    var_dump(cidrToRange("127.0.0.15/26"));
    

    Before fix:

    array(2) {
      [0]=>
      string(9) "127.0.0.0"
      [1]=>
      string(10) "127.0.0.78"
    }
    string(41) "127.0.0.15/26 >> 2130706432 -> 2130706510"
    

    After fix:

    array(2) {
      [0]=>
      string(9) "127.0.0.0"
      [1]=>
      string(10) "127.0.0.63"
    }
    string(41) "127.0.0.15/26 >> 2130706432 -> 2130706495"
    

提交回复
热议问题