PHP从ip范围生成IP列表

时间:2013-03-20 11:03:45

标签: php networking geolocation ip network-protocols

例如,这是一个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,有ip's     从     193.200.224.1     至     193.200.224.255

和87.110.0.0/16      从      87.110.1.1      至      87.110.255.255

但0/17,0 / 19如何计算呢?

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

我将所有范围都放到数据库中然后运行php脚本并为每个范围生成ip列表。

关闭所有这些目的?我希望我的国家/地区都有ip adreses,所以我可以更加分析我的网站访问者。

感谢名单

3 个答案:

答案 0 :(得分:6)

这就是我提出的:

$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 addreses的数组 在我的情况下,我使用它来从180个isp获得200万个ip addreses。

答案 1 :(得分:2)

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

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

答案 2 :(得分: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地址。

相关问题