从ip范围生成ip列表


PHP Generate IP's list from ip range

这里是一个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从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地址,所以我可以分析我的网站访问者更多。

谢谢

我是这么想的:

$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地址。

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

在那里你可以看到二进制代码的地址和掩码。你应该取第一个地址,用掩码进行异或。第一个数字(在/17掩码上留下的17)是子网中所有地址的通用数字(掩码上的1),最后一个数字(掩码上的0)是子网中"免费使用"的。

对于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个从91.105.0.0开始的ip地址。

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