开发者

How to create a range of IP addresses?

Suppose the input is:

222开发者_如何学运维.123.34.45 and 222.123.34.55

then I need to output the ip address in between them:

222.123.34.45 222.123.34.46 ... 222.123.34.55


Use ip2long() and long2ip():

function ip_range($from, $to) {
  $start = ip2long($from);
  $end = ip2long($to);
  $range = range($start, $end);
  return array_map('long2ip', $range);
}

The above turns the two IP addresses into numbers (using PHP core functions), creates a range of numbers and then turns that number range into IP addresses.

If you want them separated by spaces just implode() the result.


Leveraging PHP's type flexibility

Leveraging the fact that IP Addresses are actually numbers (may do weird things on

$ip2 = '222.123.34.55';

$ips = array();
for($i=ip2long($ip);$i<=ip2long($ip2);$i++)
{
    $ips[] = long2ip($i);
}

print_r($ips);


You can use the function; $ipStr = "192.168.1.0/255";

 function getIpsArrayFromStrRange($ipStr) {
    $ipsArray = array();
    //validate ip and check range existing
    $regexp = '/^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})(\/(\d{1,3}))?$/';
    $matches = array();
    if(preg_match($regexp,$ipStr,$matches)){


        //if it is a range
        if(isset($matches[6])){
            $min_ip = min($matches[4],$matches[6]);
            $max_ip = max($matches[4], $matches[6]);
            for($i=$min_ip; $i<=$max_ip; $i++){
                $ipsArray[] = "$matches[1].$matches[2].$matches[3].$i";
            }   
        }else{
            $ipsArray[] = $ipStr;
        }
        return $ipsArray;
    }else{
        return false;
    }
}
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜