检查IP地址是否在网络中

4

我正在寻找一个函数,用于确定给定的IPv4地址是否在给定的网络中。

这个函数类似于this,但如果不必要的话,我不想安装完整的框架或重复造轮子。

以下是大致的思路:

function IsInNetwork($givenIP, $networkIP, $netmask) {
   // ???
}

$valid = IsInNetwork("10.0.9.35", "10.0.8.0", "255.255.254.0");

-- 编辑 --

在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;
    }
}
1个回答

4

这个应该能够工作,

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

谢谢,那指引了我正确的方向。我不得不进行了一些更改,但它能工作了。 - jinanwow

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接