老谢博客

  • 首页
  • WordPress
  • 网络技术
  • 乱七八糟
  • 运维技术
  • 给我留言
  • 关于老谢

IP归属地分析Shell脚本

分类:linux日期:2014-06-07 - 10:18:54作者:老谢

看到一个结合Python转码的IP归属地分析Shell脚本的脚本,对这个脚本挺感兴趣,于是就拿过来测试一下,但是发现脚本执行后无法执行输出ip的信息:

[root@xj123 ip]# ./ip.sh
IP地址                  国家    运营商  区域    省份    城市    县/区
======================================================================
114.216.229.147

[root@xj123 ip]# ./ip.sh IP地址 国家 运营商 区域 省份 城市 县/区 ====================================================================== 114.216.229.147

由于不懂脚本就请教了D大,在此再次非常感谢D大不吝赐教(大晚上的打扰休息实在是不好意思的哈。。。),下面继续回到正题:

在D大的指导下,直接执行命令,看看能不能获取到数据:

[root@xj123 ip]curl -s http://ip.taobao.com/service/getIpInfo.php?ip=114.216.229.147 | sed 's/,/\n/g' | ./TransCoding.py | tr -d "{}\""
code:0
data:country:中国
countrŽä¸œ:CN
area_id:300000
region:江è‹çœ
region_id:320000
city:è‹å·žå¸‚
city_id:320500
county:
county_id:-1
isp:电信
isp_id:100017

[root@xj123 ip]curl -s http://ip.taobao.com/service/getIpInfo.php?ip=114.216.229.147 | sed 's/,/\n/g' | ./TransCoding.py | tr -d "{}\"" code:0 data:country:中国 countrŽä¸œ:CN area_id:300000 region:江è‹çœ region_id:320000 city:è‹å·žå¸‚ city_id:320500 county: county_id:-1 isp:电信 isp_id:100017

可以看到实际上获取到的数据,但是乱码,乱码先不管,先让脚本跑起来再说,目前脚本抓取信息是正常了,经过D大对脚本的检查,发现脚本的每局结尾少了一个`符号,补上之后ip.sh的脚本如下:

#!/bin/bash
 
ipInfo() {
  for i in `cat list`
  do
    TransCoding="/usr/bin/python TransCoding.py"
    JsonDate="curl -s http://ip.taobao.com/service/getIpInfo.php?ip=$i"
    country=`$JsonDate | sed 's/,/\n/g' | $TransCoding | tr -d "{}\"" | awk -F ":" 'NR==2{print $3}'`
    area=`$JsonDate | sed 's/,/\n/g' | $TransCoding | tr -d "{}\"" | awk -F ":" 'NR==4{print $2}'`
    region=`$JsonDate | sed 's/,/\n/g' | $TransCoding | tr -d "{}\"" | awk -F ":" 'NR==6{print $2}'`
    city=`$JsonDate | sed 's/,/\n/g' | $TransCoding | tr -d "{}\"" | awk -F ":" 'NR==8{print $2}'`
    county=`$JsonDate | sed 's/,/\n/g' | $TransCoding | tr -d "{}\"" | awk -F ":" 'NR==10{print $2}'`
    isp=`$JsonDate | sed 's/,/\n/g' | $TransCoding | tr -d "{}\"" | awk -F ":" 'NR==12{print $2}'`
    printf "%-18s\t%-8s\t%-8s\t%-8s\t%-8s\t%-8s\t%-8s\n" $i $country $isp $area $region $city $county
  done
}
 
printf "%-18s\t%-8s\t%-8s\t%-8s\t%-8s\t%-8s\t%-8s\n" IP地址 国家 运营商 区域 省份 城市 县/区
echo -e "\e[1;33m======================================================================\e[0m"
ipInfo;

#!/bin/bash ipInfo() { for i in `cat list` do TransCoding="/usr/bin/python TransCoding.py" JsonDate="curl -s http://ip.taobao.com/service/getIpInfo.php?ip=$i" country=`$JsonDate | sed 's/,/\n/g' | $TransCoding | tr -d "{}\"" | awk -F ":" 'NR==2{print $3}'` area=`$JsonDate | sed 's/,/\n/g' | $TransCoding | tr -d "{}\"" | awk -F ":" 'NR==4{print $2}'` region=`$JsonDate | sed 's/,/\n/g' | $TransCoding | tr -d "{}\"" | awk -F ":" 'NR==6{print $2}'` city=`$JsonDate | sed 's/,/\n/g' | $TransCoding | tr -d "{}\"" | awk -F ":" 'NR==8{print $2}'` county=`$JsonDate | sed 's/,/\n/g' | $TransCoding | tr -d "{}\"" | awk -F ":" 'NR==10{print $2}'` isp=`$JsonDate | sed 's/,/\n/g' | $TransCoding | tr -d "{}\"" | awk -F ":" 'NR==12{print $2}'` printf "%-18s\t%-8s\t%-8s\t%-8s\t%-8s\t%-8s\t%-8s\n" $i $country $isp $area $region $city $county done } printf "%-18s\t%-8s\t%-8s\t%-8s\t%-8s\t%-8s\t%-8s\n" IP地址 国家 运营商 区域 省份 城市 县/区 echo -e "\e[1;33m======================================================================\e[0m" ipInfo;

TransCoding.py的脚本如下:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
 
import re
import sys
 
def main():
    for line in sys.stdin:
        sys.stdout.write(re.sub(r'\\u\w{4}',
            lambda e: unichr(int(e.group(0)[2:], 16)).encode('utf-8'),
            line))
 
if __name__ == '__main__':
    main()

#!/usr/bin/env python # -*- coding: utf-8 -*- import re import sys def main(): for line in sys.stdin: sys.stdout.write(re.sub(r'\\u\w{4}', lambda e: unichr(int(e.group(0)[2:], 16)).encode('utf-8'), line)) if __name__ == '__main__': main()

执行脚本,检查输出情况:

IP归属地分析Shell脚本

在windows系统下使用putty,脚本中的中文输出正常,远程抓取的数据输出乱码,同时发现一个奇怪的问题,OS X下面脚本输出乱码,但是远程数据的中文输出正常:

IP归属地分析Shell脚本

乱码一般是由于编码导致的,下面开始检查编码是否一致,经D大的提醒一定要统一编码,下面先检查服务器的编码是否正确:

[root@xj123 ip]# echo $LANG
en_US.UTF-8

[root@xj123 ip]# echo $LANG en_US.UTF-8

远程服务器的编码为UTF-8没问题,接着检查终端的编码格式,发现putty的编码格式使用了Use font encoding,远程服务器使用UTF-8的编码,应该没问题,先改成UTF-8试试,然后再执行脚本,发现输出跟OS X一样,脚本本身的中文乱码,远程抓取输出的中文输出正常,继续检查脚本的编码,发现使用了ANSI的编码,修改为UTF-8编码后再执行,终于没问题了,正常输出如下:

[root@xj123 ip]# ./ip.sh
IP地址                  国家    运营商  区域    省份    城市    县/区
======================================================================
114.216.229.147         中国    电信    华东    江苏省  苏州市  常熟市

[root@xj123 ip]# ./ip.sh IP地址 国家 运营商 区域 省份 城市 县/区 ====================================================================== 114.216.229.147 中国 电信 华东 江苏省 苏州市 常熟市

实例演示(分析最近暴力破解服务器密码的IP归属地),顺便吐槽下,为毛这么多天朝的ip:

cat /var/log/secure | awk '/Failed/ {print $(NF-3)}' | sort -u > list && ./ip.sh

cat /var/log/secure | awk '/Failed/ {print $(NF-3)}' | sort -u > list && ./ip.sh

[root@xj123 ip]# ./ip.sh
IP地址                  国家    运营商  区域    省份    城市    县/区
======================================================================
1.93.30.197             中国    鹏博士  华北    北京市  北京市
116.10.191.170          中国    电信    华南    广西壮族自治区  南宁市
122.226.95.219          中国    电信    华东    浙江省  金华市
123.131.134.18          中国    联通    华东    山东省  临沂市
123.199.130.91          中国    城市网络        华北    北京市  北京市
148.243.138.109         墨西哥
161.53.212.119          克罗地亚
162.13.89.226           英国
180.96.63.124           中国    电信    华东    江苏省  南京市
183.56.129.146          中国    电信    华南    广东省  潮州市
188.143.232.103         俄罗斯
198.100.147.60          加拿大
200.75.141.74           委内瑞拉
211.154.20.42           中国    华北    北京市  北京市
218.55.64.202           韩国
60.173.26.134           中国    电信    华东    安徽省  铜陵市
61.147.103.152          中国    电信    华东    江苏省  扬州市
61.147.103.162          中国    电信    华东    江苏省  扬州市
61.147.107.117          中国    电信    华东    江苏省  扬州市
61.172.238.226          中国    电信    华东    上海市  上海市  青浦区
61.174.50.163           中国    电信    华东    浙江省  湖州市
61.36.11.69             韩国
61.60.10.77             台湾    台湾省
82.112.1.38             俄罗斯
82.221.102.185          冰岛

[root@xj123 ip]# ./ip.sh IP地址 国家 运营商 区域 省份 城市 县/区 ====================================================================== 1.93.30.197 中国 鹏博士 华北 北京市 北京市 116.10.191.170 中国 电信 华南 广西壮族自治区 南宁市 122.226.95.219 中国 电信 华东 浙江省 金华市 123.131.134.18 中国 联通 华东 山东省 临沂市 123.199.130.91 中国 城市网络 华北 北京市 北京市 148.243.138.109 墨西哥 161.53.212.119 克罗地亚 162.13.89.226 英国 180.96.63.124 中国 电信 华东 江苏省 南京市 183.56.129.146 中国 电信 华南 广东省 潮州市 188.143.232.103 俄罗斯 198.100.147.60 加拿大 200.75.141.74 委内瑞拉 211.154.20.42 中国 华北 北京市 北京市 218.55.64.202 韩国 60.173.26.134 中国 电信 华东 安徽省 铜陵市 61.147.103.152 中国 电信 华东 江苏省 扬州市 61.147.103.162 中国 电信 华东 江苏省 扬州市 61.147.107.117 中国 电信 华东 江苏省 扬州市 61.172.238.226 中国 电信 华东 上海市 上海市 青浦区 61.174.50.163 中国 电信 华东 浙江省 湖州市 61.36.11.69 韩国 61.60.10.77 台湾 台湾省 82.112.1.38 俄罗斯 82.221.102.185 冰岛

原文地址 : https://www.xj123.info/4875.html

本站遵循 : 署名-非商业性使用-相同方式共享 2.5 中国大陆 (CC BY-NC-SA 2.5)

版权声明 : 原创文章转载时,请务必以超链接形式标明文章原始出处

  • 上一篇:LNMP安装配置Zabbix搭建企业级监控平台
  • 下一篇:移除了失效的友情链接
5条评论
  1. kn007 说:

    沙发,好久没来了

    POST:2014-06-07 11:26 回复
  2. 大D 说:

    路过

    POST:2014-06-12 20:43 回复
  3. frankiez 说:

    正好用上,甚好,淘宝竟然有这接口好方便

    POST:2014-07-14 08:43 回复
  4. jlone 说:

    楼主解析有点慢啊 两三秒才解析出一条

    POST:2016-07-25 14:59 回复
  5. 谢文育 说:

    允许脚本之后归属地没变

    POST:2016-10-10 18:24 回复
发表评论 点击取消评论.

*必填

*必填

  • 文章归档
  • 子网计算
  • 我的共享
  • 锻炼计划
  • 给我留言
  • 关于老谢
2025 年 6 月
一 二 三 四 五 六 日
 1
2345678
9101112131415
16171819202122
23242526272829
30  
« 5 月    

最新文章

  • 认知,是否是一座大山?当架构决策变成配置清单比价
  • 重装博客服务器环境
  • 特斯拉24款标续 Model Y 2万公里使用体验
  • 接盘的傻子
  • 小牛us电瓶指示灯闪三次不上电
  • 一次还不错的小米售后体验
  • 装台1600元办公主机
  • 2021好久没更新博客
  • Zabbix监控oxidized备份状态
  • Zabbix 5.0 LTS版本MySQL表分区及编译安装随记

最新评论

  • zwwooooo:类似以前做网站开发时,一开始有自...
  • 老陳网志:有点高端,像我们整点nas玩玩就够...
  • springwood:自从 CentOS 不维护之后,我换 U...
  • 大D:难都搞下来了,那就更得YM了
  • 大D:只能是YM了,谢总牛啊
  • 灰常记忆:经济不好 今年我也换了机器 一...
  • 大峰:这是海外服务器嘛?速度挺快的。
  • 大D:只能单走一个6了哈哈哈
  • zwwooooo:买特斯拉和买iPhone的人群其实相似...
  • 平安家属子痕:一直坚持油车,看你写的心里有...

日志存档

  • 2025 年 5 月
  • 2025 年 4 月
  • 2025 年 3 月
  • 2024 年 9 月
  • 2024 年 5 月
  • 2024 年 1 月
  • 2023 年 4 月
  • 2021 年 10 月
  • 2021 年 4 月
  • 2021 年 3 月
  • 2021 年 2 月
  • 2020 年 11 月
  • 2020 年 9 月
  • 2020 年 5 月
  • 2020 年 4 月
  • 2020 年 3 月
  • 2020 年 1 月
  • 2019 年 12 月
  • 2019 年 10 月
  • 2019 年 7 月
  • 2019 年 6 月
  • 2019 年 5 月
  • 2019 年 3 月
  • 2019 年 1 月
  • 2018 年 12 月
  • 2018 年 11 月
  • 2018 年 10 月
  • 2018 年 7 月
  • 2018 年 6 月
  • 2018 年 5 月
  • 2018 年 4 月
  • 2018 年 3 月
  • 2018 年 1 月
  • 2017 年 10 月
  • 2017 年 9 月
  • 2017 年 8 月
  • 2017 年 7 月
  • 2017 年 2 月
  • 2017 年 1 月
  • 2016 年 12 月
  • 2016 年 11 月
  • 2016 年 10 月
  • 2016 年 7 月
  • 2016 年 6 月
  • 2016 年 4 月
  • 2016 年 2 月
  • 2016 年 1 月
  • 2015 年 12 月
  • 2015 年 10 月
  • 2015 年 9 月
  • 2015 年 7 月
  • 2015 年 5 月
  • 2015 年 4 月
  • 2015 年 3 月
  • 2015 年 2 月
  • 2015 年 1 月
  • 2014 年 12 月
  • 2014 年 10 月
  • 2014 年 9 月
  • 2014 年 8 月
  • 2014 年 7 月
  • 2014 年 6 月
  • 2014 年 5 月
  • 2014 年 4 月
  • 2014 年 3 月
  • 2014 年 2 月
  • 2014 年 1 月
  • 2013 年 12 月
  • 2013 年 11 月
  • 2013 年 10 月
  • 2013 年 9 月
  • 2013 年 8 月
  • 2013 年 7 月
  • 2013 年 6 月
  • 2013 年 5 月
  • 2013 年 4 月
  • 2013 年 3 月
  • 2013 年 2 月
  • 2013 年 1 月
  • 2012 年 12 月
  • 2012 年 11 月
  • 2012 年 9 月
  • 2012 年 8 月
  • 2012 年 7 月
  • 2012 年 6 月
  • 2012 年 5 月
  • 2012 年 4 月
  • 2012 年 3 月
  • 2012 年 2 月
  • 2012 年 1 月
  • 2011 年 12 月
  • 2011 年 11 月
  • 2011 年 10 月
  • 2011 年 9 月
  • 2011 年 8 月
  • 2011 年 7 月
  • 2011 年 6 月
  • 2011 年 5 月
  • 2011 年 4 月
  • 2011 年 3 月
  • 2011 年 2 月
  • 2011 年 1 月
  • 2010 年 12 月
  • 2010 年 11 月
  • 2010 年 10 月
  • 2010 年 9 月
  • 2010 年 8 月
  • 2010 年 7 月

W3C

  • XHTML 1.0 Transitional
  • CSS level 3
  • Google+
Copyright © 2010-2025 老谢博客 All rights reserved.
Gzipped 76.5% | Optimized loading 50 queries in 0.882 seconds | Memory 38.97 MB | 尼玛的备案
Powered by WordPress. | Hosted By LAOXUEHOST | Theme by WordPress主题巴士 | 站点地图 | SiteMap | uptime查询