我正在寻找一个函数来确定给定的IPv4地址是否在给定的网络中。
它将类似于这个;但是,如果没有必要,我不想安装一个完整的框架或重新发明轮子。
思路类似如下:
function IsInNetwork($givenIP, $networkIP, $netmask) {
// ???
}
$valid = IsInNetwork("10.0.9.35", "10.0.8.0", "255.255.254.0");
—EDIT—
在Rich Adams的帮助下,他为我指出了正确的方向,并提出了以下建议:
function IsInNetwork2($givenIP, $networkIP, $netmask)
{
$ipaddr = ip2long($givenIP);
$netip = ip2long($networkIP);
$netmask = (ip2long($netmask) * -1) + $netip;
if ($ipaddr >= $netip && $ipaddr <= $netmask){
return true;
} else {
return false;
}
}
这样就可以了,
function IsInNetwork($givenIP, $networkIP, $netmask)
{
return ((ip2long($givenIP) & ip2long($networkIP)) == ip2long($network));
}
$valid = IsInNetwork("10.0.9.35", "10.0.8.0", "255.255.254.0"); // true