#!/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>&-