如何使用PHP判断两个IP CIDR是否处于同一子网?
判断两个IP CIDR是否属于同一子网的方法
核心逻辑
判断两个CIDR是否同子网,本质是计算每个CIDR对应的网络地址,若网络地址完全相同则属于同一子网。注意:如果两个CIDR的前缀长度(/后面的数字)不同,即便IP范围有重叠,也不属于同一子网——因为二者的子网划分粒度不一样。
具体操作步骤(以示例:192.168.1.10/24 和 192.168.10.130/24 为例)
1. 确定子网掩码
前缀长度/24对应的IPv4子网掩码是255.255.255.0,这表示前24位是网络位,后8位是主机位。
2. 计算每个CIDR的网络地址
网络地址的计算规则是:IP地址 与 子网掩码 进行按位与运算。
计算192.168.1.10/24的网络地址:
- 把IP转二进制:
11000000.10101000.00000001.00001010 - 把掩码转二进制:
11111111.11111111.11111111.00000000 - 按位与运算结果:
11000000.10101000.00000001.00000000→ 转十进制为192.168.1.0
计算192.168.10.130/24的网络地址:
- IP转二进制:
11000000.10101000.00001010.10000010 - 和掩码按位与结果:
11000000.10101000.00001010.00000000→ 转十进制为192.168.10.0
3. 对比网络地址
两个网络地址192.168.1.0和192.168.10.0不相同,因此这两个CIDR不属于同一子网。
快速验证的命令(Linux/macOS)
可以用ipcalc工具一键计算网络地址,省去手动转二进制的麻烦:
- 执行
ipcalc 192.168.1.10/24,查看输出中的Network字段 - 执行
ipcalc 192.168.10.130/24,对比两个Network字段是否一致即可
内容的提问来源于stack exchange,提问作者Abhishek Prajapati
相关产品推荐
相关产品推荐

