在许多网络应用中,需要验证 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 &= $mask; # nb: in case the supplied subnet wasn't correctly aligned return ($ip & $mask) == $subnet; }
通过使用此函数,您可以有效地确定 IP 地址是否属于特定 CIDR 子网。这种方法的简单性和高效性使其适合广泛的网络相关应用。
以上是如何高效判断IP地址是否属于CIDR子网?的详细内容。更多信息请关注PHP中文网其他相关文章!