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 &= $mask; // Ensure subnet is aligned return ($ip & $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 サイトの他の関連記事を参照してください。