php通过子网、掩码、分配池获取可用ip
直接上代码
/**
* 根据子网、掩码、IP池获取可用IP
*
* 比如 子网:172.16.10.0
* 掩码:255.255.255.0
* IP池:172.16.10.1;172.16.10.5-172.16.10.50
*/
function getAvailableIPs($subnet, $mask, $pool)
{
$subnet_long = ip2long($subnet);
$mask_long = ip2long($mask);
$network = $subnet_long & $mask_long;
$broadcast = $network | (~$mask_long & 0xFFFFFFFF);
$ips = array();
foreach (explode(';', $pool) as $range) {
if (strpos($range, '-') !== false) {
list($start, $end) = explode('-', $range);
$start_long = ip2long($start);
$end_long = ip2long($end);
for ($i = $start_long; $i <= $end_long; $i++) {
if ($i >= $network && $i <= $broadcast) {
$ips[] = long2ip($i);
}
}
} else {
$ip_long = ip2long($range);
if ($ip_long >= $network && $ip_long <= $broadcast) {
$ips[] = long2ip($ip_long);
}
}
}
return $ips;
}
举个栗子:
print_r(getAvailableIPs('192.168.10.0','255.255.255.0','192.168.10.1;192.168.10.5-192.168.10.20'))