IP在CIDR范围内

IP falls in CIDR range

本文关键字:范围内 CIDR IP      更新时间:2023-10-16

我有一个这样的IP:12.12.12.12
我正在循环浏览不同的IP范围(12.12.12.0/24(示例((格式,并试图查看IP是否在该范围内
我尝试了各种方法,如inet_addr和comparating,但似乎都无法获得。
有简单的方法吗?我正在使用Windows。

只需测试是否:

(ip & netmask) == (range & netmask)

您可以根据CIDR参数range/netbits确定网络掩码,如下所示:

uint32_t netmask = ~(~uint32_t(0) >> netbits);

取二进制表示,并将与网络掩码不匹配的内容清零。

澄清:假设您有IP a.b.c.d,并希望将其与e.f.g.h/i匹配,那么您可以将IP放入一个无符号整数uint32_t ip = a<<24 + b<<16 + c<<8 + d中,并对uint32_t range = e<<24 + f<<16 + g<<8 + h执行同样的操作。现在您可以使用您的网络掩码:uint32_t mask = (~0u) << (32-i)。现在,您可以简单地通过比较它们来检查ip是否"在"range中:ip & mask == range & mask