列出中国全部的IP地址

我不会告诉你我为什么要整理出这份IP列表的…

今天准备收集出中国的全部IP地址,网上并没有现成的,然后脚本整出一份巨大无比的文件,4.6G,一共335786604个,确实符合网上的数据,没错,中国有3.3亿个ip,数量全球第二。

提取中国IP网段

中国的IP地址是由APNIC(亚太网络信息中心)分配的,APNIC专门负责亚洲和太平洋地区的IP地址和AS号分配,受到 IANA(互联网地址分配机构) 的管理。

所以在APNIC的官网我们可以查询到分配给中国(或者亚太地区的其他国家)的网段,然而只有网段且混杂了各个国家的:

通过访问http://ftp.apnic.net/apnic/stats/apnic/delegated-apnic-latest,我们可以得到亚太地区的AS号和网段分配情况,形如:

1
2
3
4
5
6
7
8
9
10
11
12
13
apnic|IN|ipv4|103.27.84.0|1024|20130701|assigned
apnic|NZ|ipv4|103.27.88.0|1024|20130702|assigned
apnic|AU|ipv4|103.27.92.0|1024|20130702|assigned
apnic|CN|ipv4|103.27.96.0|1024|20130702|allocated
apnic|TH|ipv4|103.27.100.0|1024|20130702|allocated
apnic|MY|ipv4|103.27.104.0|1024|20130702|allocated
apnic|HK|ipv4|103.27.108.0|1024|20130702|allocated
apnic|MY|ipv4|103.27.112.0|1024|20130702|assigned
apnic|MM|ipv4|103.27.116.0|1024|20130702|allocated
apnic|IN|ipv4|103.27.120.0|256|20130703|allocated
apnic|NZ|ipv4|103.27.121.0|256|20130705|assigned
apnic|PH|ipv4|103.27.122.0|512|20130704|assigned
apnic|HK|ipv4|103.27.124.0|1024|20130703|allocated

上述条目由如下字段构成:

分配机构 | 国家代码|ip版本| 网段 | 包含ip地址数量 | 分配时间 | 状态

于是我们需要再处理一下,首先提取网段且加上掩码,掩码通过计算32-log2(包含ip地址数量) 得到:

1
wget -O- 'http://ftp.apnic.net/apnic/stats/apnic/delegated-apnic-latest' | awk -F\| '/CN\|ipv4/ { printf("%s/%d\n", $4, 32-log($5)/log(2)) }' > ./ip.list

这样获得的列表形如:

1
2
3
4
5
6
7
8
223.27.184.0/22
223.64.0.0/11
223.96.0.0/12
223.112.0.0/14
223.116.0.0/15
223.120.0.0/13
223.128.0.0/15
223.144.0.0/12

然后需要根据网段信息生成相应的ip地址,本想自己写一个,后来找了一下,在github上面找到ipgen这个项目,可以方便的满足我的需求。

安装ipgen

1
2
3
4
5
6
7
git clone https://github.com/royhills/ipgen.git
cd ipgen
autoreconf --install
./configure
make
make check
make install

需要安装automake和autoconf

最后使用如下脚本来生成所有的IP(友情提醒需要数个小时哦)

脚本

1
2
3
4
5
6
7
#!/bin/bash
while read line
do
echo -e "=================>$line<==============="
ipgen $line | tee -a ./cn.ip.list
done < ./ip.list

最后你们感受一下:

如果您觉得这篇文章对您有帮助,不妨支持我一下!