hexasoft icon

Converting IP address ranges into CIDR format

hexasoft | PRO | 05/16/18 08:53:40 AM UTC | 0 ⭐ | 252 👁️ | Never ⏰ | []
PHP |

1.72 KB

|

None

|

0 👍

/

0 👎

/****************************************************************************************************************/
/* Description: This snippet is provide simple way to help user Converting IP address ranges into CIDR format   */
/*              suggestions for different city locations across the country.                                    */
/*              There are 1 steps in this snippet. For information, please visit IP2Location tutorial page at:  */
/*https://www.ip2location.com/tutorials/how-to-convert-ip-address-range-into-cidr                               */          
/****************************************************************************************************************/
 
<?php
    function iprange2cidr($ipStart, $ipEnd){
        if (is_string($ipStart) || is_string($ipEnd)){
            $start = ip2long($ipStart);
            $end = ip2long($ipEnd);
        }
        else{
            $start = $ipStart;
            $end = $ipEnd;
        }
 
        $result = array();
 
        while($end >= $start){
            $maxSize = 32;
            while ($maxSize > 0){
                $mask = hexdec(iMask($maxSize - 1));
                $maskBase = $start & $mask;
                if($maskBase != $start) break;
                $maxSize--;
            }
            $x = log($end - $start + 1)/log(2);
            $maxDiff = floor(32 - floor($x));
 
            if($maxSize < $maxDiff){
                $maxSize = $maxDiff;
            }
 
            $ip = long2ip($start);
            array_push($result, "$ip/$maxSize");
            $start += pow(2, (32-$maxSize));
        }
        return $result;
    }
 
    function iMask($s){
        return base_convert((pow(2, 32) - pow(2, (32-$s))), 10, 16);
    }
 
?>

Comments