從APNIC查IP所屬地BASH版

#!/usr/bin/env bash
#! Encoding UTF-8
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin:/home/coremail/bin
export PATH

MY_IP=$1
READ_APNIC_IPFILE="delegated-afrinic-latest delegated-apnic-latest delegated-arin-latest delegated-iana-latest delegated-lacnic-latest delegated-ripencc-latest"

for TMP_FILE in ${READ_APNIC_IPFILE}; do
	wget -N http://ftp.apnic.net/pub/stats/afrinic/${TMP_FILE} -O /tmp/${TMP_FILE}
done

PROCESS_NUMS=20
TMP_FIFO_FOR_PROCESS="/tmp/$$_06.fifo" && mkfifo "${TMP_FIFO_FOR_PROCESS}" && exec 6<>"${TMP_FIFO_FOR_PROCESS}" && rm "${TMP_FIFO_FOR_PROCESS}"

for ((i=0;i<${PROCESS_NUMS};i++));do
    echo
done >&6

SUBNET_MASK(){
	TMP_CNT=$1
	TMP_MASK=$(echo "obase=2;${TMP_CNT}-1"|bc)
	echo "32-${#TMP_MASK}"|bc
}

IP_CHANGE_TO_NUM(){
	IP_ADDR=$1
	IP_NUM=$(echo ${IP_ADDR}|awk -F. '$1<=255&&$2<=255&&$3<=255&&$4<=255;BEGIN{OFMT="%.f"}{print $1*256*256*256+$2*256*256+$3*256+$4}'|tail -1)
	echo ${IP_NUM}
}
MY_IP_NUM=$(IP_CHANGE_TO_NUM ${MY_IP})
cd /tmp/
cat ${READ_APNIC_IPFILE}|grep 'apnic|.*|ipv4|' | cut -f 2,4,5 -d'|' | sed -e 's/|/ /g'| while read area ip cnt
do
	read -u6
	{
		TMP_IP_NUM=$(IP_CHANGE_TO_NUM ${ip})
		TMP_IP_NUM_MAX=$(echo ${TMP_IP_NUM}+${cnt}|bc)
		if [ ${MY_IP_NUM} -ge ${TMP_IP_NUM} -a ${MY_IP_NUM} -le ${TMP_IP_NUM_MAX} ]; then
			echo "${MY_IP} is in \"$area $ip/$(SUBNET_MASK $cnt)\""
		fi
		echo >&6
	} &

done
wait
exec 6>&-
相關文章
相關標籤/搜索