验证IP和CIDR组合

时间:2011-07-25 13:30:27

标签: php networking ip

我有一个用户提交的带网络掩码的IP地址,我需要确保它是有效的。例如,如果用户提交:10.113.0.0/14,我需要将其标记为无效,因为该IP范围的/ 14块以10.112.0.0开头。

我如何在PHP中执行此操作?

3 个答案:

答案 0 :(得分:2)

我有同样的问题,所以将结果发布给googlers:

$ipLong = ip2long($ip);
if ( ( ($ipLong << $prefix) ^ 0) == true ) {
    //IP and prefix pair is not valid
}

解释

让我们评估255.255.0.0/16

对于ip 255.255.0.0,long的二进制表示为10000000000000000

  1. $ipLong << $prefix向左移16位以删除所有网络ID位。
  2. ^ 0评估上一次操作后是否设置了任何位。
  3. 对于有效的IP和前缀,必须取消设置所有位,因此如果结果为true,则表示无效对。

答案 1 :(得分:0)

答案 2 :(得分:0)

工具'sipcalc'将帮助您验证网络掩码和cidr。

http://www.routemeister.net/