ホームページ  >  記事  >  バックエンド開発  >  IP アドレスが CIDR サブネットに属しているかどうかを効率的に判断するにはどうすればよいですか?

IP アドレスが CIDR サブネットに属しているかどうかを効率的に判断するにはどうすればよいですか?

Susan Sarandon
Susan Sarandonオリジナル
2024-10-18 19:27:29476ブラウズ

How to Determine if an IP Address Belongs to a CIDR Subnet Efficiently?

IP アドレスの CIDR サブネットの包含の決定

多くのネットワーク アプリケーションでは、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 &amp;= $mask; # nb: in case the supplied subnet wasn't correctly aligned
    return ($ip &amp; $mask) == $subnet;
}

この関数を使用すると、 IP アドレスが特定の CIDR サブネットに属しているかどうかを効率的に判断できます。このアプローチのシンプルさと効率性により、ネットワーク関連の幅広いアプリケーションに適しています。

以上がIP アドレスが CIDR サブネットに属しているかどうかを効率的に判断するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。