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