多くのネットワーク アプリケーションでは、IP アドレスが特定の CIDR サブネットに属しているかどうかを確認する必要があります。この質問では、そのような比較を行うための迅速かつ効率的な方法を検討します。
これを実現するために、関数 cidr_match() が使用されます。ドット区切りの 4 つの形式の IP アドレスと CIDR 表記マスクの 2 つのパラメーターを受け入れます。
最初のステップでは、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 中国語 Web サイトの他の関連記事を参照してください。