ホームページ > バックエンド開発 > PHPチュートリアル > 組み込み関数を使用して IP アドレスが CIDR サブネット内にあるかどうかを確認する方法

組み込み関数を使用して IP アドレスが CIDR サブネット内にあるかどうかを確認する方法

Susan Sarandon
リリース: 2024-10-18 19:33:29
オリジナル
325 人が閲覧しました

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>
ログイン後にコピー

使用例

この例では、チェックする IP アドレスの配列があると仮定します。

<code class="php">$ips = ['10.2.1.100', '10.2.1.101', '10.5.1.100', '1.2.3.4'];</code>
ログイン後にコピー

Weこれらの IP のどれがサブネット「10.2.0.0/16」に属しているかを確認したい:

<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>
ログイン後にコピー

出力:

10.2.1.100 is in the 10.2 subnet
10.2.1.101 is in the 10.2 subnet
ログイン後にコピー

これは、 cidr_match() 関数の使用法を示しています。 IP アドレスが指定された CIDR サブネット内にあるかどうかを判断します。

以上が組み込み関数を使用して IP アドレスが CIDR サブネット内にあるかどうかを確認する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート