2011-12-21 98 views
4

我正在查找一个函数来确定给定的IPv4地址是否在给定的网络中。检查IP地址是否在网络中

它将类似于this;然而,如果没有必要,我不想安装一个完整的框架或重新发明轮子。

的想法是类似以下内容:

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

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

- 编辑 -

凭借丰富的亚当斯的帮助,他指出我在正确的方向,并与下面上来:

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; 
    } 
} 

回答

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 
+0

谢谢,这表明我正确的方向。我不得不改变它,但它的工作原理。 – jinanwow 2011-12-21 19:28:54

+0

你好,$ nework值在哪里? – MCurbelo 2017-12-13 17:30:55