linux国内ip,Linux Shell获取APNIC中国区的IP地址

脚本如下

#!/bin/sh

###############################################################################################

#FILE NAME: DNS_IP.sh

#Author: IamOkay

#Create Time:2017年01月05日 星期四 14时23分35秒

##############################################################################################

DIR=/usr/apnic

FILE=${DIR}/ip_apnic

if [ ! -d "$DIR" ]; then

mkdir $DIR

fi

if [ ! -f "$FILE" ]; then

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

fi

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

do

echo $ip:$cnt

mask=$(cat<

pow=32;

define log2(x){

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

pow--;

return (log2(x/2));

}

log2($cnt);

EOF

)

echo $ip/$mask >>cn.net

if whois $ip |grep -i "*.chinanet.*\|.*telecom.*" >/dev/null;then

echo $ip/$mask >> chinanet

elif whois $ip |grep -i ".*unicom.*" >/dev/null;then

echo $ip/$mask >> unicom

else

echo $ip/$mask >> others

fi

done

其中ip地址的计算部分如下

mask=$(cat<

pow=32;

define log2(x){

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

pow--;

return (log2(x/2));

}

log2($cnt);

EOF

)

这段代码理解有些难,我们可以理解为C语言中的宏定义【字符串程序】

mask=$(cat<

pow=32;

define log2(x){

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

pow--;

return (log2(x/2));

}

log2($cnt);

EOF

)

然后,我们通过bc命令计算,计算改字符串程序,注意,每次得到的是pow的值,然后获得最后一次tail 的值 tail -1

mask=$(cat<

pow=32;

define log2(x){

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

pow--;

return (log2(x/2));

}

log2($cnt);

EOF

)

当然,如果你还是觉得上述代码不能理解,可以使用如下代码

#!/bin/sh

###############################################################################################

#FILE NAME: DNS_IP.sh

#Author: IamOkay

#Create Time:2017年01月05日 星期四 14时23分35秒

##############################################################################################

function log2()

{

x=$1;

echo '计算' $x;

for i in {32..1}

do

if(($x<=1));then

return $i;

else

x=$(($x/2));

fi

done

return 1;

}

DIR=/usr/apnic

FILE=${DIR}/ip_apnic

if [ ! -d "$DIR" ]; then

mkdir $DIR

fi

if [ ! -f "$FILE" ]; then

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

fi

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

do

echo $ip:$cnt

log2 $cnt

mask=$?

echo $ip/$mask >>cn.net

if whois $ip |grep -i "*.chinanet.*\|.*telecom.*" >/dev/null;then

echo $ip/$mask >> chinanet

elif whois $ip |grep -i ".*unicom.*" >/dev/null;then

echo $ip/$mask >> unicom

else

echo $ip/$mask >> others

fi

done

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值