如何使用內建函數確定 IP 位址是否在 CIDR 子網路內?

Susan Sarandon
發布: 2024-10-18 19:33:29
原創
240 人瀏覽過

How to Determine If an IP Address is Within a CIDR Subnet Using Built-in Functions?

將IP 位址與CIDR 子網路配對

判斷IP 位址是否屬於特定CIDR 子網路是網路管理中的一項常見任務。它允許有效映射和管理 IP 範圍。

為了滿足這一需求,讓我們探索函數 cidr_match() 的實現,該函數僅使用內建函數或常用函數執行此匹配。

實作概述

演算法涉及使用 ip2long() 函數將 IP 位址和子網路範圍轉換為長整數。接下來,透過將子網路範圍的尾隨數字(例如“/16”)轉換為按位遮罩來獲得子網路遮罩。此遮罩有效地將 IP 位址拆分為網路前綴和主機後綴。

最後,我們在 IP 位址和子網路遮罩之間執行位元 AND 運算。如果結果與子網路範圍匹配,則 IP 位址在指定的 CIDR 子網路內。

函數定義

以下是cidr_match() 函數的實作:

<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 &amp;= $mask; // Ensure subnet is aligned
    return ($ip &amp; $mask) == $subnet;
}</code>
登入後複製

用法

用法
<code class="php">$ips = ['10.2.1.100', '10.2.1.101', '10.5.1.100', '1.2.3.4'];</code>
登入後複製

<code class="php">foreach ($ips as $IP) {
    if (cidr_match($IP, '10.2.0.0/16') == true) {
        print "{$IP} is in the 10.2 subnet\n";
    }
}</code>
登入後複製
用法例如🎜>在提供的範例中,假設我們有一個IP 位址陣列要檢查:

10.2.1.100 is in the 10.2 subnet
10.2.1.101 is in the 10.2 subnet
登入後複製
我們想要驗證哪些IP 屬於子網路「10.2.0.0/16」:

輸出:這示範了cidr_match() 函數的用法確定IP 位址是否屬於指定的CIDR 子網路。

以上是如何使用內建函數確定 IP 位址是否在 CIDR 子網路內?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!