我正在寻找一个函数来确定给定的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;
    }
}

最佳答案

像这样的事情应该行得通,

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

关于php - 检查IP地址是否在网络中,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8594894/

10-09 02:16