IP属于CIDR范围

时间:2011-09-26 18:50:13

标签: c++ c ip

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

2 个答案:

答案 0 :(得分:8)

试试是否:

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

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

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

答案 1 :(得分:2)

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

澄清: 假设您拥有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中。