在網路設定領域,決定 IP 位址是否屬於特定 CIDR 子網路是一項常見任務。本文介紹了一種使用基本內建函數來完成此操作的簡單方法。
演算法依賴使用 ip2long( 將 IP 位址和 CIDR 子網路範圍轉換為長整數) ) 功能。隨後,計算與 CIDR 範圍中的 /xx 表示法對應的子網路遮罩。
最後一步涉及在 IP 與子網路遮罩之間執行位元「與」運算。如果結果與子網路匹配,則可以確認所提供的 IP 位址位於指定的子網路內。
下面的代碼提供了上述算法的實現:
<code class="php">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; // Adjust subnet alignment if necessary return ($ip & $mask) == $subnet; }</code>
此函數可以按如下方式使用:
<code class="php">$ips = array('10.2.1.100', '10.2.1.101', '10.5.1.100', '1.2.3.4'); foreach ($ips as $IP) { if (cidr_match($IP, '10.2.0.0/16') == true) { print "You're in the 10.2 subnet\n"; } }</code>
此程式碼將輸出:
You're in the 10.2 subnet You're in the 10.2 subnet
以上是如何驗證IP位址是否屬於CIDR子網路?的詳細內容。更多資訊請關注PHP中文網其他相關文章!