Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1764654
  • 博文数量: 150
  • 博客积分: 660
  • 博客等级: 上士
  • 技术积分: 2480
  • 用 户 组: 普通用户
  • 注册时间: 2005-08-08 11:39
文章分类

全部博文(150)

文章存档

2019年(4)

2018年(36)

2017年(53)

2016年(7)

2015年(3)

2014年(3)

2013年(27)

2012年(2)

2011年(1)

2006年(1)

2005年(13)

分类: 系统运维

2013-08-14 13:53:27

前言:CDN和自做广域网负载均衡都需要各运营商的ip列表,本文介绍两种方法,并提供shell脚本供参考,本文仅获取了几大运营商的ip,如果要获取其他小运营商的可以修改shell脚本做到。

一、移动
 1、获取移动分省ip
 ./whois3 -h whois.apnic.net -l -i mb MAINT-CN-CMCC | grep -A1 inetnum | sed  '-e/--/d'| sed 'N;s/\n//g'|sed  's/inetnum://g'|sed 's/netname://g'
  
  得到所有移动ip列表所有项目
  得到inetnum(ip行)和netname(省市描述)两行
  删除grep增加的--分隔符
  合并 inetnum和netname两行为一行
  删除inetnum
  删除netname
  
  获取铁通ip段 MAINT-CN-CRTC
  ./whois3 -h whois.apnic.net -l -i mb MAINT-CN-CRTC | grep -A1 inetnum | sed  '-e/--/d'| sed 'N;s/\n//g'|sed  's/inetnum://g'|sed 's/netname://g' >CRTC.txt
  
  sed 's/-//g' CRTC.txt | awk  '{print $1,","$2,",CRTC,",$3,$4,$5}' | sed 's/ //g' >CRTC_last.txt
2、 得到cm的所有ip 
 
 ./whois3 -h whois.apnic.net -l -i mb MAINT-CN-CMCC | grep -A1 inetnum | sed  '-e/--/d'| sed 'N;s/\n//g'|sed  's/inetnum://g'|sed 's/netname://g' > CM.txt
 
3、 得到排序后分省的ip
 
 grep CMNET CM.txt | sort -k4
 
二、联通


1、获取联通分省ip


 ./whois3 -h whois.apnic.net -l -i mb MAINT-CNCGROUP | grep -A1 inetnum | sed  '-e/--/d'| sed 'N;s/\n//g'|sed  's/inetnum://g'|sed 's/netname://g'


2、形成文件CU.txt


./whois3 -h whois.apnic.net -l -i mb MAINT-CNCGROUP | grep -A1 inetnum | sed  '-e/--/d'| sed 'N;s/\n//g'|sed  's/inetnum://g'|sed 's/netname://g' >CU.txt





三、电信


1、./whois3 -h whois.apnic.net -l -i mb MAINT-CHINANET | grep -A1 inetnum | sed  '-e/--/d'| sed 'N;s/\n//g'|sed  's/inetnum://g'|sed 's/netname://g' >CT.txt


 


四、另外一种获取各运营商脚本


位置 ip4.sh


#!/bin/sh
if [ $(echo $0 | grep '^/') ]; then
        DATA_DIR=$(dirname $0)
      else          
        DATA_DIR=$(pwd)/$(dirname $0)      
fi  
FILE=$DATA_DIR/ip_apnic
#rm -f $FILE
#wget -O $FILE
grep 'apnic|CN|ipv4|' $FILE | cut -f 4,5 -d'|'|sed -e 's/|/ /g' | while read ip cnt
do
#  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'`
 
   NETNAME=`whois $ip@whois.apnic.net | grep -A1 inetnum|  sed 'N;s/\n//g'|sed  's/inetnum://g'|sed 's/netname:/,/g' |sed 's/ //g'`      
        #echo $ip,$cnt,$NETNAME 
        echo $NETNAME
case $NETNAME in
      *CNCGROUP*|*UNICOM*)
              # echo $ip,$cnt,$NETNAME >>cn_all_by_province.txt
                echo $NETNAME >>cn_all_by_province.txt
       ;;
      *CHINANET*)
              #echo $ip,$cnt,$NETNAME >>cn_all_by_province.txt
                echo $NETNAME >>cn_all_by_province.txt
        ;;
      *CMNET*)
                #echo $ip,$cnt,$NETNAME >>cn_all_by_province.txt
                echo $NETNAME >>cn_all_by_province.txt
       ;;
      *)


        #echo $ip,$cnt,$NETNAME >>cn_other.txt
        echo $NETNAME >>cn_other.txt
        ;;
esac
done


五、综合比较


发现通过whois3获取的移动ip较多,主要是分省了;
whois获取的联通电信ip较多;
综合一下,联通电信用whois的脚本获取,移动的用whois3获取

六、实际脚本如下


1、whois的脚本用以获取联通电信的所有ip


#!/bin/sh
if [ $(echo $0 | grep '^/') ]; then
        DATA_DIR=$(dirname $0)
      else          
        DATA_DIR=$(pwd)/$(dirname $0)      
fi  
FILE=$DATA_DIR/ip_apnic
#rm -f $FILE
#wget -O $FILE
grep 'apnic|CN|ipv4|' $FILE | cut -f 4,5 -d'|'|sed -e 's/|/ /g' | while read ip cnt
do
#  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'`
 
   NETNAME=`whois $ip@whois.apnic.net | grep -A1 inetnum|  sed 'N;s/\n//g'|sed  's/inetnum://g'|sed 's/netname:/,/g' |sed 's/ //g'`      
        #echo $ip,$cnt,$NETNAME 
        echo $NETNAME
case $NETNAME in
      *CNCGROUP*|*UNICOM*)
              # echo $ip,$cnt,$NETNAME >>cn_all_by_province.txt
                echo $NETNAME >>cn_all_by_province.txt
       ;;
      *CHINANET*)
              #echo $ip,$cnt,$NETNAME >>cn_all_by_province.txt
                echo $NETNAME >>cn_all_by_province.txt
        ;;
      *CMNET*)
                #echo $ip,$cnt,$NETNAME >>cn_all_by_province.txt
                echo $NETNAME >>cn_all_by_province.txt
       ;;
      *)


        #echo $ip,$cnt,$NETNAME >>cn_other.txt
        echo $NETNAME >>cn_other.txt
        ;;
esac
done


2、获取移动ip的whois3脚本


获取命令同上


-------------下面主要是制作netscaler需要的ip列表,可以略过不看--------------------


3、首先取出cn_all*.txt的移动ip


sed -e '/CMNET/d' cn_all_by_province.txt >>cn_all_no_cm.txt




4、将whois3获取的移动ip和3合并到cn_last_20120925.txt


awk '{print $1,","$3,"," $4}' CM.txt | sed 's/ //g' |sed 's/-/,/g' >CM_last.txt

grep CMNET CM_last.txt >>cn_last_20120925.txt 
5、将CM_last.txt中其他ip也导入


sed '/CMNET/d' CM_last.txt >CM_other.txt

awk -F, '{print $1,","$2,",CMNET,",$3,$4,$5}' CM_other.txt | sed 's/ //g' >>cn_last_20120925.txt

6、将whois脚本获取的 cn_all_by_province.txt 转换成cn_all_no_cm.txt


sed -e '/CMNET/d' cn_all_by_province.txt >>cn_all_no_cm.txt

7、按照第一部分的步骤生成铁通ip文件CRTC_last.txt


8、合并成  cn_last_20120925.txt 


cat cn_all_no_cm.txt CRTC_last.txt >> cn_last_20120925.txt

阅读(3147) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~