首頁  >  文章  >  後端開發  >  如何有效率判斷IP位址是否屬於CIDR子網路?

如何有效率判斷IP位址是否屬於CIDR子網路?

Susan Sarandon
Susan Sarandon原創
2024-10-18 19:27:29474瀏覽

How to Determine if an IP Address Belongs to a CIDR Subnet Efficiently?

確定 IP 位址的 CIDR 子網路包含

在許多網路應用中,需要驗證 IP 位址是否屬於給定的 CIDR 子網路。本問題探討了一種快速有效的方法來進行此類比較。

為了實現此目的,使用了函數 cidr_match()。它接受兩個參數:點分四組格式的 IP 位址和 CIDR 表示法遮罩。

實作

第一步涉及使用 ip2long( 將 IP 位址和子網路轉換為長整數)。然後解析 CIDR 子網,根據指定的位數確定子網路遮罩。

接下來,在 IP 位址和子網路遮罩之間執行位元 AND 運算。如果結果與子網路匹配,則表示該 IP 位址屬於指定的子網路。

以下是 cidr_match() 函數的程式碼片段:

function cidr_match($ip, $range)
{
    list ($subnet, $bits) = explode('/', $range);
    if ($bits === null) {
        $bits = 32;
    }
    $ip = ip2long($ip);
    $subnet = ip2long($subnet);
    $mask = -1 << (32 - $bits);
    $subnet &amp;= $mask; # nb: in case the supplied subnet wasn't correctly aligned
    return ($ip &amp; $mask) == $subnet;
}

透過使用此函數,您可以有效地確定 IP 位址是否屬於特定 CIDR 子網路。這種方法的簡單性和高效性使其適合廣泛的網路相關應用。

以上是如何有效率判斷IP位址是否屬於CIDR子網路?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn