在許多網路應用中,需要驗證 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 &= $mask; # nb: in case the supplied subnet wasn't correctly aligned return ($ip & $mask) == $subnet; }
透過使用此函數,您可以有效地確定 IP 位址是否屬於特定 CIDR 子網路。這種方法的簡單性和高效性使其適合廣泛的網路相關應用。
以上是如何有效率判斷IP位址是否屬於CIDR子網路?的詳細內容。更多資訊請關注PHP中文網其他相關文章!