中国地理区域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划分成不同的区域
  区域划分参考:
http://baike.baidu.com/view/2304312.htm
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

#!/bin/sh

FILE=./ip_apnic

rm -f $FILE

#rm -f  cn.net UNICOM  CHINANET CMNET CRTC CERNET OTHER

for ipfile in cn.net cnc   ctt  cmn ctt cer other

do

mv $ipfile  $ipfile-$(date "+%F-%H:%M")

done

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

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

do

echo $ip:$cnt

mask=$(cat << EOF | bc | tail -1

pow=32;

define log2(x) {

if (x<=1) return (pow);

pow--;

return(log2(x/2));

}

log2($cnt)

EOF)

echo $ip/$mask>> cn.net

#zone=`whois $ip@whois.apnic.net | sed -e '/./{H;$!d;}' -e 'x;/netnum/!d' |grep ^netname | sed -e 's/.*:\(.*\)/\1/g'`

NETNAME=`whois $ip@whois.apnic.net | sed -e '/./{H;$!d;}' -e 'x;/netnum/!d' |grep ^netname | sed -e 's/.*:      \(.*\)/\1/g'| sed -e 's/-.*//g'|sed 's: ::g'`

echo "$NETNAME" >> netname

case $NETNAME in

CNC|CNCGROUP|UNICOM|Chinaunicom)

echo "$ip/$mask " >> cnc

#echo "$ip/$mask $zone" >> cnc-zone

;;

CHINANET|CHINATELECOM)

echo "$ip/$mask" >>  ctc

#echo "$ip/$mask $zone" >> ctc-zone

;;

CMNET)

echo "$ip/$mask " >> cmn

#echo "$ip/$mask $zone" >> cmn-zone

;;

CRTC)

echo "$ip/$mask " >> ctt

#echo "$ip/$mask $zone" >> ctt-zone

;;

*CERNET*)

echo "$ip/$mask " >> cer

#echo "$ip/$mask $zone" >> cer-zone

;;

*)

echo "$ip/$mask" >> other

#echo "$ip/$mask $zone" >> other-zone

;;

esac

done




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

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

53

#!/bin/sh

#update date:20130307

#QQ:335623998

#generate china area ip

gen_cnc(){

FILE=$PWD/cnc

#rm -f  $FILE.address

while read LINE;do

echo "$LINE"

echo -n "$LINE @ " >> $FILE.address

whois  $LINE @whois.apnic.net |egrep "address|descr"|xargs  echo >> $FILE.address

echo  "-----------------"  >> $FILE.address

sleep 1

done < $FILE

egrep -i "Hunan|Changsha|Hubei|Wuhan|Henan|Zhenzhou|Jiangxi|Nanchang" $FILE.address > cnc_zhz

egrep -i -v "Hunan|Changsha|Hubei|Wuhan|Henan|Zhenzhou|Jiangxi|Nanchang" $FILE.address > addtmp

mv addtmp $FILE.address

egrep -i "Sichuan|Chengdu|Yunnan|Kunming|Guizhou|Guiyang|Xizang|Lasa|Chongqing" $FILE.address > cnc_zxn

egrep -i -v "Sichuan|Chengdu|Yunnan|Kunming|Guizhou|Guiyang|Xizang|Lasa|Chongqing" $FILE.address > addtmp

mv addtmp $FILE.address

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

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

mv addtmp $FILE.address

egrep -i "Guangxi|Nanning|Guangzhou|Guangdong|Shenzhen|Hainan|Haikou" $FILE.address > cnc_zhn

egrep -i -v "Guangxi|Nanning|Guangzhou|Guangdong|Shenzhen|Hainan|Haikou" $FILE.address > addtmp

mv addtmp $FILE.address

egrep -i "Heilongjiang|Harbin|Jilin|ChangChun|Liaoning|Shenyang" $FILE.address > cnc_zdb

egrep -i -v "Heilongjiang|Harbin|Jilin|ChangChun|Liaoning|Shenyang" $FILE.address > addtmp

mv addtmp $FILE.address

egrep -i "Ningxia|Yichuan|Xinjiang|Urumqi|Qinghai|Shaanxi|Xining|Xian|Gansu|Lanzhou" $FILE.address > cnc_zxb

egrep -i -v "Ningxia|Yichuan|Xinjiang|Urumqi|Qinghai|Shaanxi|Xining|Xian|Gansu|Lanzhou" $FILE.address > addtmp

mv addtmp $FILE.address

egrep -i "Mongolia|Cordelia|Beijing|Hebei|Shijiazhuang|Tianjin|Taiyuan|Shanxi|GuangDe" $FILE.address > cnc_zhb

egrep -i -v "Mongolia|Cordelia|Beijing|Hebei|Shijiazhuang|Tianjin|Taiyuan|Shanxi|GuangDe" $FILE.address > addtmp

mv addtmp $FILE.address

sed -r -i '/-----/d' $FILE.address

#cat $FILE.address >>  cnc_zhb

sed -r -i 's#@.*##g' cnc_*

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

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

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

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

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

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

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

}

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

gen_cnc

gen_cmn

gen_ctt

gen_ctc

gen_cer

gen_other

3、whois_mb.sh 获取mnt-by关键字,为第二步处理做准备
4、主要主要根据中共区域划分生成的acl ip库文件,如果你根据运营商划分直接对筛选的ISP IP库文件(cnc ctt cer……)进行处理生成acl ip库文件即可,一般小企业DNS定义三个view(cnc,ctt,other)即可。

 自动生成的acl ip文件内容

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

cat acl_cnc_zdb

acl acl_cnc_zdb {

1.56.0.0/13;

1.188.0.0/14;

42.4.0.0/14;

42.52.0.0/14;

42.56.0.0/14;

42.84.0.0/14;

42.176.0.0/13;

58.21.0.0/16;

58.244.0.0/15;

…略…

……

221.207.128.0/17;

221.208.0.0/14;

221.212.0.0/16;

222.160.0.0/15;

222.162.0.0/16;

222.163.0.0/19;

222.163.32.0/19;

222.163.64.0/18;

};

 

 

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


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


相关文章
|
Prometheus 监控 安全
SpringBoot Actuator未授权访问漏洞的解决方法
SpringBoot Actuator未授权访问漏洞的解决方法Actuator 是 SpringBoot 提供的用来对应用系统进行自省和监控的功能模块,借助于 Actuator 开发者可以很方便地对应用系统某些监控指标进行查看、统计等。
32937 0
获取中国某省份的ip地址,随机IP
该代码使用Python爬取福建省的IP段数据,通过requests和lxml库获取网页内容并解析,提取省、市、区及IP段信息,保存到Pandas DataFrame中。接着根据IP段随机生成IP地址,并将结果写入Excel文件。
|
4月前
|
数据采集 弹性计算 API
阿里云最便宜服务器38元1年轻量和99元ECS云服务器,3M和200M带宽的区别对比
阿里云38元轻量与99元ECS云服务器对比:前者200Mbps峰值带宽、开箱即用,适合博客/官网等展示场景;后者3Mbps固定带宽但CPU更强、弹性可升级,适配API/数据库等后台服务。选对不踩坑!
365 4
JeecgBoot 短信验证码接口,如何实现防刷机制?
短信接口防刷,主要通过两个方面来实现:一个是短信接口加签和时间戳;另外针对短信接口,增加防刷 check 机制
600 1
|
数据处理 虚拟化 图形学
ESXi 8.0U3e 免费版发布,含官方免费许可证 (序列号 SN Key)
ESXi 8.0U3e 免费版发布,含官方免费许可证 (序列号 SN Key)
7537 5
|
关系型数据库 MySQL 开发者
Mysql COUNT() 函数详解
【6月更文挑战第19天】Mysql COUNT() 函数详解,包括 COUNT() 的用法及 COUNT() 带条件查询的操作
|
存储 Java 定位技术
【Java】根据IP地址获取省市
【Java】根据IP地址获取省市
1620 1
|
存储 弹性计算 运维
生成自签名私钥和证书
【4月更文挑战第29天】
296 1
|
监控 前端开发 Java
函数计算操作报错合集之报错CAExited,该如何处理
在使用函数计算服务(如阿里云函数计算)时,用户可能会遇到多种错误场景。以下是一些常见的操作报错及其可能的原因和解决方法,包括但不限于:1. 函数部署失败、2. 函数执行超时、3. 资源不足错误、4. 权限与访问错误、5. 依赖问题、6. 网络配置错误、7. 触发器配置错误、8. 日志与监控问题。
413 0