首页  >  文章  >  后端开发  >  如何高效判断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()。它接受两个参数:点分四组格式的 IP 地址和 CIDR 表示法掩码。

实现

第一步涉及使用 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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn