2011-12-21 65 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