InfoQ 读一篇安全关于CDN的文章时看到这个脚本,作者是杭州的shaohaiyang。
优势:
1.思路非常好。从apnic拿最准的IP分配库,取出中国的部分;然后whois通过注册地址获取地域。
劣势:
1.whois查询效率。
2.地域注册信息的准确性。国内有借IP的情况。cnnic直接申请的ip段,不好归类。
脚本基本能解决90%的问题。(sinuo同学评估)
https://github.com/shaohaiyang
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 FILE=`pwd`/ip_apnic TMP=/dev/shm/ip.tmp CNC_FILE=`pwd`/CNC CTC_FILE=`pwd`/CTC rm -f $FILE 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 ) whois $ip@whois.apnic.net > $TMP.tmp sed -n '/^inetnum/,/source/p' $TMP.tmp | awk '(/mnt-/ || /netname/)' > $TMP NETNAME=`grep ^netname $TMP | sed -e 's/.*: \(.*\)/\1/g' | sed -e 's/-.*//g'|sed 's: ::g'` egrep -qi "(CNC|UNICOM|WASU|NBIP|CERNET|CHINAGBN|CHINACOMM|FibrLINK|BGCTVNET|DXTNET|CRTC)" $TMP if [ $? = 0 ];then echo $ip/$mask >> $CNC_FILE else egrep -qi "(CHINATELECOM|CHINANET)" $TMP if [ $? = 0 ];then echo $ip/$mask >> $CTC_FILE else sed -n '/^route/,/source/p' $TMP.tmp | awk '(/mnt-/ || /netname/)' > $TMP egrep -qi "(CNC|UNICOM|WASU|NBIP|CERNET|CHINAGBN|CHINACOMM|FibrLINK|BGCTVNET|DXTNET|CRTC)" $TMP if [ $? = 0 ];then echo $ip/$mask >> $CNC_FILE else egrep -qi "(CHINATELECOM|CHINANET)" $TMP if [ $? = 0 ];then echo $ip/$mask >> $CTC_FILE else echo "$ip/$mask $NETNAME" >> `pwd`/OTHER fi fi fi fi done rm -rf $TMP $TMP.tmp |
4 Comments
wow!
is it a little slow using shell script?
as the apnic file is a little larage
以前给一个网段做流量分发策略(多出口),通过纯真ip库查询。(例如某个cdn厂商网段,纯真ip库中会有一些模糊的统计)
后来出现了一些问题,大部分网上的ip库都是网友收集的,不准确。同一个应用错误分流后,源身份有两个。数据出差。
现在用apnic的网段做分流策略,还真没出过问题。毕竟是官方的。
生成的电信与联通的IP地址文件在哪里?没有找到…