0

例如,这里是一个 ISP 分配的 IP 范围。

91.105.0.0/17
46.109.0.0/16
194.8.16.0/21
194.8.24.0/22
194.8.40.0/23
194.8.43.0/24
195.122.0.0/19
195.13.128.0/17
80.232.128.0/17
81.198.0.0/16
84.237.128.0/17
87.110.0.0/16
194.8.9.0/24
194.8.12.0/23
195.114.32.0/19
195.2.96.0/19
62.85.0.0/17
87.246.144.0/20
87.246.160.0/19
78.84.0.0/16
193.200.224.0/24
95.68.0.0/17

如果我是正确的,对于这个范围 193.200.224.0/24 有从 193.200.224.1 到 193.200.224.255 的 IP

和 87.110.0.0/16 从 87.110.1.1 到 87.110.255.255

但是 0/17、0/19 怎么样,如何计算呢?

我需要帮助来编写 php 函数来自动生成所有 ip

我会将所有范围放入数据库,然后运行 ​​php 脚本并为每个范围生成 ip 列表。

目的是为了这一切?我希望我的国家/地区都有 IP 地址,这样我就可以更多地分析我的网站访问者。

谢谢

4

3 回答 3

10

这就是我想出的:

$range  = "194.8.42.0/24";
function ipListFromRange($range){
    $parts = explode('/',$range);
    $exponent = 32-$parts[1].'-';
    $count = pow(2,$exponent);
    $start = ip2long($parts[0]);
    $end = $start+$count;
    return array_map('long2ip', range($start, $end) );
}

在我的情况下,返回包含所有 IP 地址的数组,我使用它从 180 个 isp 获取 200 万个 IP 地址。

于 2013-03-25T11:27:28.223 回答
2

您可以使用某种在线计算器,例如 http://www.aboutmyip.com/AboutMyXApp/SubnetCalculator.jsp?ipAddress=91.105.0.0&cidr=17

在那里,您可以看到二进制代码中的地址和掩码。您应该获取第一个地址并使用掩码对其进行异或。第一个数字(/17 掩码上的左 17)对于子网中的所有地址都是通用的(这些是掩码上的 1),最后一个数字(掩码上的 0)在子网中是“免费使用”的。

于 2013-03-20T11:14:57.547 回答
1

对于 193.200.224.0/24,IP 地址的范围是 193.200.224.0 到 193.200.224.255。即 256 个 IP 地址的范围 - 2^(32-24) = 2^8 = 256

对于 91.105.0.0/17,计算相同 - 2^(32-17) = 2 ^ 15 = 32768 个 IP 地址,从 91.105.0.0 开始。

您可以使用某种嵌套循环来生成范围内的所有 IP 地址。

于 2013-03-20T11:21:25.230 回答