微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用PHP和CIDR计算IP范围

在这个网站上看到了各种各样的问题和答案,我仍然很难解决这个问题(可能是因为我感冒了).无论如何,我正试图想出一个小型的网络应用程序,它将为我们的每个办公室创建IP地址表.

就像说如果我为10.1.10.0/4创建一个新的范围,它将创建一个数组(我可以打印到表中):

 10.1.10.0 network ID
 10.1.10.1 gateway
 10.1.10.2 usable
 10.1.10.3 broadcast

(并不是说它会自动插入描述,但这就是我们要做的事情).

我很确定我将使用ip2long / long2ip将地址存储为整数但仍然如此.

解决方法:

正如您已经指出的那样,所有IPv4地址都可以使用ip2long()转换为数字,并使用long2ip()进行转换.我不确定你注意到的关键额外位是顺序IP与序号对应,所以你可以操纵这些数字!

给定CIDR前缀(例如,您的范围为$prefix = 30),您可以使用bit shift operator计算该范围内的IP数:

$ip_count = 1 << (32 - $prefix);

然后使用以下方法遍历该范围内的所有IP:

$start = ip2long($start_ip);
for ($i = 0; $i < $ip_count; $i++) {
    $ip = long2ip($start + $i);
    // do stuff with $ip...
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐