IP属于CIDR范围

我有这样的IP:12.12.12.12
我循环遍历不同的IP范围(12.12.12.0/24(示例))格式,并尝试查看IP是否在范围内。
我尝试了各种方法,如inet_addr和比较,但我似乎无法得到它。
是否有捷径可寻? 我正在使用Windows。

只测试是否:

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

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

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

采用二进制表示并将与网络掩码不匹配的内容归零。

澄清:假设你有IP abcd并希望将它与efgh/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 “是否在” rangeip & mask == range & mask