【问题标题】:Check whether an IP address is in a network检查IP地址是否在网络中
【发布时间】:2012-01-25 13:32:47
【问题描述】:

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

【问题讨论】:

    标签: php function networking frameworks ipv4


    【解决方案1】:

    这样的东西应该可以工作,

    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
    

    【讨论】:

    • 谢谢,这为我指明了正确的方向。我不得不对其进行一些更改,但它确实有效。
    猜你喜欢
    • 2017-09-02
    • 2017-05-05
    • 2018-11-16
    • 2010-10-09
    • 2013-08-22
    • 1970-01-01
    • 1970-01-01
    • 2016-12-24
    • 1970-01-01
    相关资源
    最近更新 更多