天天看点

中国地理区域IP库整理

一、前言

    此文应朋友需求进行整理,内容为中国行政地理区域IP库整理第一步:根据apnic分配给中国的IPv4地址,进行whois信息筛选划分出ISP、及地域IP库,以及生成脚本。网上之前也有类似处理IP库的脚本,思路差不多,本文较深入根据IP划分成行政区域、运营商IP库及生成bind view 所需的acl ip库文件,第一步实现基础IP库还不算很准确,大家可以根据需求在修改定制。

  第二步:使用whois3根据mnt-by关键字反向查询运营商IP段及运营商路由表,将第一步与第二步的IP库进行对比将差异的IP段加入完善IP库

  第三步:利用生产中的DNS查询日志获取IP及view定义,使用第三方IP库查询校验结果与分配的view进行对比,如果匹配不做调整,如果不匹配,再进行人工使用多个第三方IP库查询核对,如果的确不匹配调整对应acl ip库文件。

   一点整理思路,如此IP库相对比较完整、精确。有兴趣的同学可以一起进行研究,完善,交流,今天将第一步实现的脚本及简要说明。

二、ISP英文简称说明

1、cnc   联通

2、ctc   电信

3、cmn   移动

4、ctt   铁通

5、cer   教育网

6、other 其他ISP

三、脚本修改完善说明

1、对ISP及涉及文件按照规范命名

2、增加中国地理区域划分脚本,并自动生成view所需acl ip库文件

2、对whois出的netname进行筛选并找出主要ISP的名称,详见netname_isp文件

3、根据中国地理区域划分,将ISP划分成不同的区域

4、202.97.128.0/18这个IP段是划分给中国后的掩码,whois时得到的adress是“address:        6 Cordelia Street”,划区域时取关键字Cordelia,这个网段大部分在山西太原联通,所以划入华北联通

5、因为whois信息筛选的address一般有三段,大多数分配给地方的IP,第一段地址都含有Beijing,所以进行区域IP筛选时,先筛选地方,最后在筛选含有北京的华北地区。

四、文件说明

1、ip_apnic:为Apanic提供的亚太地区IPv4,IPv6,AS号分配的信息表

2、cn.net:apnic分配给中国的IPv4 IP段

3、ISP IP库文件为ISP名称,例如“ctc”即为为联通的IP库文件

4、ISP IP库及所属地址描述文件,例如“cnc.address ”

5、筛选后的ISP区域IP库文件,例如“cnc_zhb”即运营商_地理区域

6、acl IP库文件,  acl_cnc_zdb格式为acl_运营商_区域命名(网通_中国_东北地区)

五、脚本说明

1、whois_ip.sh 为获取中国IPv4地址段及筛选ISP脚本,这个网上有,我根据需求稍微修改了一下,内容如下

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

<code>#!/bin/sh</code>

<code>FILE=.</code><code>/ip_apnic</code>

<code>rm</code> <code>-f $FILE</code>

<code>#rm -f  cn.net UNICOM  CHINANET CMNET CRTC CERNET OTHER</code>

<code>for</code> <code>ipfile </code><code>in</code> <code>cn.net cnc   ctt  cmn ctt cer other</code>

<code>do</code>

<code>mv</code> <code>$ipfile  $ipfile-$(</code><code>date</code> <code>"+%F-%H:%M"</code><code>)</code>

<code>done</code>

<code>wget http:</code><code>//ftp</code><code>.apnic.net</code><code>/apnic/stats/apnic/delegated-apnic-latest</code> <code>-O $FILE</code>

<code>grep</code> <code>'apnic|CN|ipv4|'</code> <code>$FILE | </code><code>cut</code> <code>-f 4,5 -d</code><code>'|'</code><code>|</code><code>sed</code> <code>-e </code><code>'s/|/ /g'</code> <code>| </code><code>while</code> <code>read</code> <code>ip cnt</code>

<code>echo</code> <code>$ip:$cnt</code>

<code>mask=$(</code><code>cat</code> <code>&lt;&lt; EOF | </code><code>bc</code> <code>| </code><code>tail</code> <code>-1</code>

<code>pow=32;</code>

<code>define log2(x) {</code>

<code>if</code> <code>(x&lt;=1) </code><code>return</code> <code>(pow);</code>

<code>pow--;</code>

<code>return</code><code>(log2(x</code><code>/2</code><code>));</code>

<code>}</code>

<code>log2($cnt)</code>

<code>EOF)</code>

<code>echo</code> <code>$ip/$mask&gt;&gt; cn.net</code>

<code>#zone=`whois [email protected] | sed -e '/./{H;$!d;}' -e 'x;/netnum/!d' |grep ^netname | sed -e 's/.*:\(.*\)/\1/g'`</code>

<code>NETNAME=`whois [email protected] | </code><code>sed</code> <code>-e </code><code>'/./{H;$!d;}'</code> <code>-e </code><code>'x;/netnum/!d'</code> <code>|</code><code>grep</code> <code>^netname | </code><code>sed</code> <code>-e </code><code>'s/.*:      \(.*\)/\1/g'</code><code>| </code><code>sed</code> <code>-e </code><code>'s/-.*//g'</code><code>|</code><code>sed</code> <code>'s: ::g'</code><code>`</code>

<code>echo</code> <code>"$NETNAME"</code> <code>&gt;&gt; netname</code>

<code>case</code> <code>$NETNAME </code><code>in</code>

<code>CNC|CNCGROUP|UNICOM|Chinaunicom)</code>

<code>echo</code> <code>"$ip/$mask "</code> <code>&gt;&gt; cnc</code>

<code>#echo "$ip/$mask $zone" &gt;&gt; cnc-zone</code>

<code>;;</code>

<code>CHINANET|CHINATELECOM)</code>

<code>echo</code> <code>"$ip/$mask"</code> <code>&gt;&gt;  ctc</code>

<code>#echo "$ip/$mask $zone" &gt;&gt; ctc-zone</code>

<code>CMNET)</code>

<code>echo</code> <code>"$ip/$mask "</code> <code>&gt;&gt; cmn</code>

<code>#echo "$ip/$mask $zone" &gt;&gt; cmn-zone</code>

<code>CRTC)</code>

<code>echo</code> <code>"$ip/$mask "</code> <code>&gt;&gt; ctt</code>

<code>#echo "$ip/$mask $zone" &gt;&gt; ctt-zone</code>

<code>*CERNET*)</code>

<code>echo</code> <code>"$ip/$mask "</code> <code>&gt;&gt; cer</code>

<code>#echo "$ip/$mask $zone" &gt;&gt; cer-zone</code>

<code>*)</code>

<code>echo</code> <code>"$ip/$mask"</code> <code>&gt;&gt; other</code>

<code>#echo "$ip/$mask $zone" &gt;&gt; other-zone</code>

<code>esac</code>

2、gen_china_area.sh 根据中国地理区域划分生成的区域IP库,并生成view所需的acl ip库文件

53

<code>#update date:20130307</code>

<code>#QQ:335623998</code>

<code>#generate china area ip</code>

<code>gen_cnc(){</code>

<code>FILE=$PWD</code><code>/cnc</code>

<code>#rm -f  $FILE.address</code>

<code>while</code> <code>read</code> <code>LINE;</code><code>do</code>

<code>echo</code> <code>"$LINE"</code>

<code>echo</code> <code>-n </code><code>"$LINE @ "</code> <code>&gt;&gt; $FILE.address</code>

<code>whois  $LINE @whois.apnic.net |</code><code>egrep</code> <code>"address|descr"</code><code>|</code><code>xargs</code>  <code>echo</code> <code>&gt;&gt; $FILE.address</code>

<code>echo</code>  <code>"-----------------"</code>  <code>&gt;&gt; $FILE.address</code>

<code>sleep</code> <code>1</code>

<code>done</code> <code>&lt; $FILE</code>

<code>egrep</code> <code>-i </code><code>"Hunan|Changsha|Hubei|Wuhan|Henan|Zhenzhou|Jiangxi|Nanchang"</code> <code>$FILE.address &gt; cnc_zhz</code>

<code>egrep</code> <code>-i -</code><code>v</code> <code>"Hunan|Changsha|Hubei|Wuhan|Henan|Zhenzhou|Jiangxi|Nanchang"</code> <code>$FILE.address &gt; addtmp</code>

<code>mv</code> <code>addtmp $FILE.address</code>

<code>egrep</code> <code>-i </code><code>"Sichuan|Chengdu|Yunnan|Kunming|Guizhou|Guiyang|Xizang|Lasa|Chongqing"</code> <code>$FILE.address &gt; cnc_zxn</code>

<code>egrep</code> <code>-i -</code><code>v</code> <code>"Sichuan|Chengdu|Yunnan|Kunming|Guizhou|Guiyang|Xizang|Lasa|Chongqing"</code> <code>$FILE.address &gt; addtmp</code>

<code>egrep</code> <code>-i </code><code>"Shandong|Jinan|Jiangsu|Suzhou|Nanjing|Anhui|hefei|Zhejiang|Ningbo|Hangzhou|Fujian|Futian|Pudong|Shanghai"</code> <code>$FILE.address &gt; cnc_zhd</code>

<code>egrep</code> <code>-i -</code><code>v</code> <code>"Shandong|Jinan|Jiangsu|Suzhou|Nanjing|Anhui|hefei|Zhejiang|Ningbo|Hangzhou|Fujian|Futian|Pudong|Shanghai"</code> <code>$FILE.address &gt; addtmp</code>

<code>egrep</code> <code>-i </code><code>"Guangxi|Nanning|Guangzhou|Guangdong|Shenzhen|Hainan|Haikou"</code> <code>$FILE.address &gt; cnc_zhn</code>

<code>egrep</code> <code>-i -</code><code>v</code> <code>"Guangxi|Nanning|Guangzhou|Guangdong|Shenzhen|Hainan|Haikou"</code> <code>$FILE.address &gt; addtmp</code>

<code>egrep</code> <code>-i </code><code>"Heilongjiang|Harbin|Jilin|ChangChun|Liaoning|Shenyang"</code> <code>$FILE.address &gt; cnc_zdb</code>

<code>egrep</code> <code>-i -</code><code>v</code> <code>"Heilongjiang|Harbin|Jilin|ChangChun|Liaoning|Shenyang"</code> <code>$FILE.address &gt; addtmp</code>

<code>egrep</code> <code>-i </code><code>"Ningxia|Yichuan|Xinjiang|Urumqi|Qinghai|Shaanxi|Xining|Xian|Gansu|Lanzhou"</code> <code>$FILE.address &gt; cnc_zxb</code>

<code>egrep</code> <code>-i -</code><code>v</code> <code>"Ningxia|Yichuan|Xinjiang|Urumqi|Qinghai|Shaanxi|Xining|Xian|Gansu|Lanzhou"</code> <code>$FILE.address &gt; addtmp</code>

<code>egrep</code> <code>-i </code><code>"Mongolia|Cordelia|Beijing|Hebei|Shijiazhuang|Tianjin|Taiyuan|Shanxi|GuangDe"</code> <code>$FILE.address &gt; cnc_zhb</code>

<code>egrep</code> <code>-i -</code><code>v</code> <code>"Mongolia|Cordelia|Beijing|Hebei|Shijiazhuang|Tianjin|Taiyuan|Shanxi|GuangDe"</code> <code>$FILE.address &gt; addtmp</code>

<code>sed</code> <code>-r -i </code><code>'/-----/d'</code> <code>$FILE.address</code>

<code>#cat $FILE.address &gt;&gt;  cnc_zhb</code>

<code>sed</code> <code>-r -i </code><code>'s#@.*##g'</code> <code>cnc_*</code>

<code>sort</code> <code>-n -t.  -k 1,1 -k 2,2 -k 3,3 -k 4,4 cnc_zhz | </code><code>awk</code> <code>'BEGIN{print "acl acl_cnc_zhz '</code><code>{</code><code>' "}{print $1";"}END{print "'</code><code>}</code><code>';"}'</code> <code>&gt; acl_cnc_zhz</code>

<code>sort</code> <code>-n -t.  -k 1,1 -k 2,2 -k 3,3 -k 4,4  cnc_zxn| </code><code>awk</code> <code>'BEGIN{print "acl acl_cnc_zxn '</code><code>{</code><code>' "}{print $1";"}END{print "'</code><code>}</code><code>';"}'</code>  <code>&gt;acl_cnc_zxn</code>

<code>sort</code> <code>-n -t.  -k 1,1 -k 2,2 -k 3,3 -k 4,4 cnc_zhd | </code><code>awk</code> <code>'BEGIN{print "acl acl_cnc_zhd '</code><code>{</code><code>' "}{print $1";"}END{print "'</code><code>}</code><code>';"}'</code>  <code>&gt;acl_cnc_zhd</code>

<code>sort</code> <code>-n -t.  -k 1,1 -k 2,2 -k 3,3 -k 4,4 cnc_zhn | </code><code>awk</code> <code>'BEGIN{print "acl acl_cnc_zhn '</code><code>{</code><code>' "}{print $1";"}END{print "'</code><code>}</code><code>';"}'</code>  <code>&gt;acl_cnc_zhn</code>

<code>sort</code> <code>-n -t.  -k 1,1 -k 2,2 -k 3,3 -k 4,4 cnc_zdb | </code><code>awk</code> <code>'BEGIN{print "acl acl_cnc_zdb '</code><code>{</code><code>' "}{print $1";"}END{print "'</code><code>}</code><code>';"}'</code>  <code>&gt;acl_cnc_zdb</code>

<code>sort</code> <code>-n -t.  -k 1,1 -k 2,2 -k 3,3 -k 4,4 cnc_zxb | </code><code>awk</code> <code>'BEGIN{print "acl acl_cnc_zxb '</code><code>{</code><code>' "}{print $1";"}END{print "'</code><code>}</code><code>';"}'</code>  <code>&gt;acl_cnc_zxb</code>

<code>sort</code> <code>-n -t.  -k 1,1 -k 2,2 -k 3,3 -k 4,4 cnc_zhb | </code><code>awk</code> <code>'BEGIN{print "acl acl_cnc_zhb '</code><code>{</code><code>' "}{print $1";"}END{print "'</code><code>}</code><code>';"}'</code>  <code>&gt;acl_cnc_zhb</code>

<code>#其他五个运营商函数定义类似,详见脚本内容,脚本请下载http://down.51cto.com/data/873530</code>

<code>gen_cnc</code>

<code>gen_cmn</code>

<code>gen_ctt</code>

<code>gen_ctc</code>

<code>gen_cer</code>

<code>gen_other</code>

3、whois_mb.sh 获取mnt-by关键字,为第二步处理做准备

4、主要主要根据中共区域划分生成的acl ip库文件,如果你根据运营商划分直接对筛选的ISP IP库文件(cnc ctt cer……)进行处理生成acl ip库文件即可,一般小企业DNS定义三个view(cnc,ctt,other)即可。

  自动生成的acl ip文件内容

<code>cat</code> <code>acl_cnc_zdb</code>

<code>acl acl_cnc_zdb {</code>

<code>1.56.0.0</code><code>/13</code><code>;</code>

<code>1.188.0.0</code><code>/14</code><code>;</code>

<code>42.4.0.0</code><code>/14</code><code>;</code>

<code>42.52.0.0</code><code>/14</code><code>;</code>

<code>42.56.0.0</code><code>/14</code><code>;</code>

<code>42.84.0.0</code><code>/14</code><code>;</code>

<code>42.176.0.0</code><code>/13</code><code>;</code>

<code>58.21.0.0</code><code>/16</code><code>;</code>

<code>58.244.0.0</code><code>/15</code><code>;</code>

<code>…略…</code>

<code>……</code>

<code>221.207.128.0</code><code>/17</code><code>;</code>

<code>221.208.0.0</code><code>/14</code><code>;</code>

<code>221.212.0.0</code><code>/16</code><code>;</code>

<code>222.160.0.0</code><code>/15</code><code>;</code>

<code>222.162.0.0</code><code>/16</code><code>;</code>

<code>222.163.0.0</code><code>/19</code><code>;</code>

<code>222.163.32.0</code><code>/19</code><code>;</code>

<code>222.163.64.0</code><code>/18</code><code>;</code>

<code>};</code>

 此文思路基本可以满足中小企业使用,还请大家指点、沟通,一起学习。

本文转自pandazhai 51CTO博客,原文链接:http://blog.51cto.com/dreamway/1250774

继续阅读