IP在CIDR范围内
IP falls in CIDR range
我有一个这样的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
。
相关文章:
- 为什么在全局范围内使用"extern int a"似乎不行?
- 错误:未在此范围内声明'reverse'
- 并行用于C++17中数组索引范围内的循环
- 求出有多少个数字是完美平方,而sqrt()是L,R范围内的素数
- 不计算一个范围内的完美数
- 错误:"imread"未在此范围内声明
- 我在范围内未声明的错误类有问题
- 如何在cpp中使用地图显示给定日期范围内(在下面的问题中)的费率?
- 我有一个数组,我想输入一个范围,然后找到范围内所有偶数的总和?
- 未在此范围内声明错误 'xy'
- 在C++中使用变量而不是"#define"来指定数组大小是不是一种糟糕的做法?(C错误:在文件范围内
- 命名空间范围内的外部 - GCC vs clang vs msvc
- 如何改进一堆在已知值范围内评估变量的 else-if 条件?
- 如何仅使用 While 循环在给定范围内找到可被 7 整除的计数整数
- Socklen_t未在此范围内声明
- 错误:'[' 之前预期的非限定 id 和错误:'users'未在此范围内声明
- 查找给定范围内最长连续 1 的频率
- "Main"已在当前范围内声明
- IP 地址重叠/在 CIDR 范围内
- IP在CIDR范围内