在日志分析的时候,我们会看到很很多的IP地址,怎么统计哪个地区的访问最为频繁,我们的应用在哪里受欢迎,面对海量的ip地址,对于运维人员来说是非常挠头的,这个时候我们就需要,一个能批量查下ip地址的工具。
下面我在这里介绍4中查下IP地址归属的方法:
1.使用系统命令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命令测试一下,如下图:

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

然后我么可以编写一个简单的脚本,内容如下:
#!/usr/bin/bash
for i in `cat a.log`
do
curl https://ip.cn/index.php?ip=$i
done
具体实现的效果如下:

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