php - 使用 PHP 和 CIDR 计算 IP 范围

标签 php cidr

<分区>

我在这个网站上看到了各种各样的问题和答案,但我仍然难以解决这个问题(可能是因为我感冒了)。不管怎样,我正在尝试开发一个小型 Web 应用程序,为我们的每个办公室创建 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...
}

关于php - 使用 PHP 和 CIDR 计算 IP 范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15961557/

相关文章:

java - 如何在 Java 中将 IP 地址范围转换为 CIDR?

Cidr 阻止 AWS 解释

algorithm - 如何对 trie 表中的 IP 地址进行排序?

php - 从多个表中删除不起作用

php - PHPUnit 的数据库扩展发生了什么?

php - 在 PHP(或任何语言)中,可以合并 2 个位掩码,同时保留 "identity"的原始位吗?

网络掩码的 php cidr 前缀

php - 确定两个名称是否彼此接近

php - 无法在我的 debian 404 Not Found 上访问 symfony 应用程序

c# - CIDR 子网是否有原生 .NET 类型?