目的
和地理位置相关的应用、和智能调度相关的应用、都离开一个准确的IP库,如果是单个ip库查询,我们可以去ip138或者ip.taobao.com或者ipip.net或者其他站长工具查询,但是需要我们需要一个完整的ip库,则可能需要自己去抓取一份、或者购买商业的ip库。 最近试着用go语言写一份抓取完整ip库的程序、数据源是ip.taobao.com。从各大州ip地址中心获取最初的ip分段、依次对各个ip段进行探测和验证、生成了一份ip库数据。对于简单的应用完全可以使用。
原理
对于原始的IP段,采用如下的思路确定ip段的具体位置信息。 1、从ip.taobao.com 获取ip段首个ip的信息 2、获取ip段最后一个ip的信息。 3、获取中间ip的信息。 4、如果第一个、最后一个、中间一个ip的在省份级别是相同的,则认为此ip段是一个完整的ip段,地理信息就是抓取的信息。 5、如果三个ip不相同,则递归探测第一个ip到中间ip这个ip段。以及中间ip的下一个到最后一个ip的ip段。 6、直到所有ip段都已经探测完毕。
代码:
https://github.com/zhiyuan2007/getiplib
以下是从抓取的数据中分析的结果
国家举例
AD
|安道尔共和国
AE
|阿拉伯联合酋长国
AF
|阿富汗
AG
|安提瓜和巴布达
AI
|安圭拉
AL
|阿尔巴尼亚
AM
|亚美尼亚
AO
|安哥拉
AQ
|南极洲
AR
|阿根廷
运营商举例
1000102|飞华领航
1000103|国研网
1000104|金桥网
1000106|神州在线
1000109|首信网
1000114|中国科技网
1000117|中信网络
1000118|京宽网络
省份举例
110000|北京市
120000|天津市
130000|河北省
140000|山西省
150000|内蒙古自治区
210000|辽宁省
220000|吉林省
230000|黑龙江省
310000|上海市
320000|江苏省
330000|浙江省
340000|安徽省
城市举例
110100|北京市
110200|北京市
120100|天津市
130100|石家庄市
130200|唐山市
130300|秦皇岛市
130400|邯郸市
130500|邢台市
130600|保定市
130700|张家口市
130900|沧州市
131000|廊坊市
抓取数据格式举例
1.2.
4.0|
1.2.
4.255|
256|中国
:CN|中国互联网信息中心
:1000189|华北
:100000|北京市
:110100|北京市
:110000
1.2.
5.0|
1.2.
5.255|
256|中国
:CN|电信
:100017|华东
:300000|福州市
:350100|福建省
:350000
1.2.
6.0|
1.2.
7.255|
512|中国
:CN|电信
:100017|华东
:300000|福州市
:350100|福建省
:350000
1.2.
8.0|
1.2.
8.255|
256|中国
:CN|中国互联网信息中心
:1000189|华北
:100000|北京市
:110100|北京市
:110000
1.2.
9.0|
1.2.
9.255|
256|中国
:CN|电信
:100017|华南
:800000|广州市
:440100|广东省
:440000
1.2.
10.0|
1.2.
11.255|
512|中国
:CN|电信
:100017|华南
:800000|广州市
:440100|广东省
:440000
1.2.
12.0|
1.2.
15.255|
1024|中国
:CN|电信
:100017|华南
:800000|广州市
:440100|广东省
:440000
1.2.
16.0|
1.2.
31.255|
4096|中国
:CN|电信
:100017|华南
:800000|广州市
:440100|广东省
:440000
1.2.
32.0|
1.2.
63.255|
8192|中国
:CN|电信
:100017|华南
:800000|广州市
:440100|广东省
:440000
1.2.
64.0|
1.2.
127.255|
16384|中国
:CN|电信
:100017|华南
:800000|广州市
:440100|广东省
:440000