本文共 6731 字,大约阅读时间需要 22 分钟。
一、前言
此文应朋友需求进行整理,内容为中国行政地理区域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库相对比较完整、精确。有兴趣的同学可以一起进行研究,完善,交流,今天将第一步实现的脚本及简要说明。
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 ; }; |
相关参考资料:
中国行政区域IP库整理脚本及文件下载地址:
此文思路基本可以满足中小企业使用,还请大家指点、沟通,一起学习。
本文转自pandazhai 51CTO博客,原文链接:http://blog.51cto.com/dreamway/1250774
转载地址:http://lxkfl.baihongyu.com/