shell命令--获取IP地址归属信息

在日志分析的时候,我们会看到很很多的IP地址,怎么统计哪个地区的访问最为频繁,我们的应用在哪里受欢迎,面对海量的ip地址,对于运维人员来说是非常挠头的,这个时候我们就需要,一个能批量查下ip地址的工具。

下面我在这里介绍4中查下IP地址归属的方法:

1.使用系统命令geoiplookup 


geoiplookup查询

使用方法:

在命令后面直接跟IP地址,输出的信息如上图所示,显示的比较粗糙,并不能满足我们的需求,同时一般只能输入一个ip,同时我们需要每个月,去同步免费的国家位置的数据库,来保证数据的准确行(可以使用脚本+crontab来代替,周期性执行)。

2.使用在线查寻的方法,直接使用专业的网页查询,这里推荐两个网址:

    1)淘宝在线查询ip:http://ip.taobao.com/ipSearch.html 

    2)   IP查询工具:https://ip.cn 

这两种都是在线的查询方法,准确性都是比较高,但是淘宝的在线查询是有qos限制,即单位时间内访问的次数限制。

3.使用python编写一个脚本

代码如下:


#!/usr/bin/python

#--*--coding=utf-8--*--                                                     


import pygeoip                                                               

import sys                                                                   

import os                                                                   

gi = pygeoip.GeoIP('/opt/GeoLiteCity.dat')                                   


def printRecord(tgt):                                                       

      try:                                                                   

        rec = gi.record_by_addr(tgt)                                         

        city = rec['city']                                                   

        region = rec['region_code']                                         

        country = rec['country_name']                                       

        long = rec['longitude']                                             

        lat = rec['latitude']                                               

        print  '[*] 主机: ' + tgt + ' Geo-located.'                         

        print  '[+] ' + str(city) + ', ' +str(region)+', '+str(country)     

        print  '[+] 经度: '+str(lat)+', 维度: '+ str(long)                   

      except TypeError:                                                     

        exit(' not found!')                                                 

        #print '%s is not found!' %tgt                                       

        #exit()                                                             

#itgt = '183.141.110.74'                                                     

#printRecord(tgt)                                                           


def ipList(m):                                                               

    with open(m) as fd:                                                     

      for line in fd:                                                       

          m = printRecord(line)                                             

          print m                                                           

ipList('/opt/ip.list')           

这种方法,需要运维有一定的python基础,同时需要下载相关依赖的python第三方库来支持。

4.现在我推荐的方法来了:我们通过第二种方法,进行简单的改变就能实现,今天我们的主题任务了拉,下面我简单的介绍一下:

    1) 使用系统自带的curl命令测试一下,如下图:


curl调用接口在线验证

    2)我们通过系统命令curl能在线查询,那我们就能生成一个简单的for脚本,我们把要查询的IP整理成每一行只有一个IP的文件如下图:


shell命令--获取IP地址归属信息_第1张图片
每个IP独立成行

     然后我么可以编写一个简单的脚本,内容如下:

        #!/usr/bin/bash

         for i in `cat a.log`

        do 

                curl https://ip.cn/index.php?ip=$i

        done

        具体实现的效果如下:

    

shell命令--获取IP地址归属信息_第2张图片
调用接口查询结果

        如果想要保存结果,只要在 curl https://ip.cn/index.php?ip=$i >file.log 这样我们就能把文件保存下来为后续的日志IP分析提供数据。这是的脚本显示的结果如下图所示:


shell命令--获取IP地址归属信息_第3张图片
执行脚本输出结果

你可能感兴趣的:(shell命令--获取IP地址归属信息)