有时搞一些跨网段的工程和应用,需要尽量准确的知道电信、网通、铁通等电信运营商的IP地址段分配情况,可网上的资料不但很少,而且经常都是N个月前的过期资料……
APNIC是管理亚太地区IP地址分配的机构,它有着丰富准确的IP地址分配库,同时这些信息也是对外公开的!下面就让我们看看如何在Linux下获得一些电信运营商的IP地址分配情况:
代码:
shell> wget http://ftp.apnic.net/apnic/dbase/tools/ripe-dbase-client-v3.tar.gz
shell> tar xzvf ripe-dbase-client-v3.tar.gz
shell> cd whois-3.1
shell> ./configure
shell> make
完成上述编译安装工作后,我们开始获取IP地址段;
代码:
中国网通:shell> ./whois3 -h whois.apnic.net -l -i mb MAINT-CNCGROUP > /var/cnc
中国电信:shell> ./whois3 -h whois.apnic.net -l -i mb MAINT-CHINANET > /var/chinanet
中国铁通:shell> ./whois3 -h whois.apnic.net -l -i mb MAINT-CN-CRTC > /var/crtc
中国移动:shell> ./whois3 -h whois.apnic.net -l -i mb MAINT-CN-CMCC > /var/CMCC
打开获取后的文件可以看到里面的信息非常详细,甚至可以看到各个分公司的负责人、电话、电子邮件等等信息。如果想得到一份整齐干净的IP地址段文件,只要用grep和awk简单过滤就可以了。
代码:
#自动生成IP段脚本
#自动生成IP段脚本
vi apnic
贴入以下的内容是一个相当优秀的脚本)
#自动生成IP段脚本
vi apnic
贴入以下的内容是一个相当优秀的脚本)
#!/bin/sh
FILE=./ip_apnic
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)
echo $ip/$mask>> cn.net
NETNAME=`whois
[email protected] | sed -e '/./{H;$!d;}' -e 'x;/netnum/!d' |grep ^netname | sed -e 's/.*: \(.*\)/\1/g' | sed -e 's/-.*//g'`
NETNAME=`echo $NETNAME | sed -e 's/cJ/ /g' | awk -F' ' '{ printf $1; }'`
case $NETNAME in
CNC)
echo $ip/$mask >> CNCGROUP
;;
CHINANET|CNCGROUP)
echo $ip/$mask >> $NETNAME
;;
CHINATELECOM)
echo $ip/$mask >> CHINANET
;;
*)
echo $ip/$mask >> OTHER
;;
esac
done
chmod 744 apnic
./apnic
#注:红色部分为网络名可通过WHOIS查询该网段的网络名是什么,即查询是电信还是网通或移动或其它网络的标式,因此我们可以简单地修改这个脚本就可以得到中国其它运营商的网络IP段分配列表,
在当目前目录就会成以下三个文件
CHINANET CNCGROUP OTHER
#命令行获得IP地址段并生成DNS需要ACL.CONF文件方法,以获得移动IP段为例
/path/whois3 -h whois.apnic.net -l -i mb MAINT-CN-CMCC | grep "descr" | grep "Reverse" | awk -F "for" '{if ($2!="") print $2}'| sort -n | awk 'BEGIN{print "acl \"MOBILE\" '{'"}{print $1";"}END{print "'}';"}' > /var/mobile_acl.conf
#红色部分很重要,这个值是代表哪个网络的如"MAINT-CN-CMCC"是移动,"MAINT-CHINANET"是电信,以此类推