• IP所属地查询 - [tips]2009-06-30

    版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明
    http://opendream.blogbus.com/logs/41695355.html

    最近骨干网络问题不断,没事找事,就给自己提个需求,从日志中获得客户的IP后,查询统计受影响客户所属地,之前发过查询的方法: 【推荐】IP查询接口 ,懒人办懒事,写个shell,以后方便使用

    受影响客户IP存放在:ip.txt中

    #cat ip.txt

    202.108.22.101

    202.108.22.102

    ........

    脚本check_states_pengyao.sh内容如下:

    #cat check_states_pengyao.sh

    #/bin/bash
    LANG=zh_CN
    State="北京 天津 黑龙江 河南 西藏 陕西 山西 内蒙古 安徽 上海 重庆 新疆 宁夏 广西 香港 澳门 黑龙江 吉林 辽宁 河北 青海 山东 江苏 浙江 福建 江西 湖南 湖北 广东 台湾 海南 甘肃 陕西 四川 贵州 云南 美国"

    IP_FILE=$1
    ADD_FILE=add.txt
    STATE_TMP=states_tmp.txt
    STATE_FILE=states.txt
    usage(){
            echo "Usage: $0 ip.txt"
            exit 1
    }
    check(){
            > ${ADD_FILE};
            > ${STATE_FILE}
            > ${STATE_TMP}
    }
    query_main(){
    while read ip
    do
             curl -silent http://www.youdao.com/smartresult-xml/search.s\?type\=ip\&q\=$ip|awk 'BEGIN{FS="[<>]"}/location/{print $3}' >> ${ADD_FILE}
    done < $IP_FILE
    }
    state_stat(){
    for i in ${State}
    do
            awk 'BEGIN{sum=0}/'$i'/{sum=sum+1}END{print "'$i'""\t"sum}' ${ADD_FILE} >> ${STATE_TMP}
    done
    sort -k 2 -n -r ${STATE_TMP} |tee ${STATE_FILE}
    }
    if [ $# -eq 1 ]
    then
            check && query_main && state_stat
    else
            usage
    fi

    执行方法:

    #bash check_states_pengyao.sh ip.txt

    生成的统计信息会在屏幕上输出,并存放在当前目录的states.txt中

    PS:由于海外用户数量较少,但发现有美国客户,暂且将其当成中国的一个省做处理了吧(没准这个客户就是个华侨),O(∩_∩)O~,看谁还敢说“外国的月亮比中国圆”

     


    历史上的今天:


    收藏到:Del.icio.us