在linuxtone网站上偶尔看到一篇文章, http://bbs.linuxtone.org/viewthread.php?tid=6319 贴下地址,通过ip138查找ip归属地,用脚本写的,很方便了,省的打开网站查,于是就拓展了下,可以用来查看nginx或apache日志中的访问IP,在工作中,查看日志中Ip的归属地是很常见的事,于是以下列为例,做个实验:
1.假如apache的日志为***.log,里面的日志格式为LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
2.从日志中提取ip地址,可使用命令:
  cat ***.log  | awk '{print $1}' | sort -nu > ip.txt
3.用脚本来查看Ip归属
 vi  138.sh
#!/bin/bash
while read line
do
echo -en "$line \x20"
wget -q " http://www.ip138.com/ips.asp?ip=${line}&action=2" -O - | awk -F'[<>]' '/ul class="ul1"/{print $7}' | awk -F'[:]' '{print $2}'
done < ip.txt
4.sh 138.sh 执行便能看到效果,大家可以试试
 
注:在第3步里面,做的有原文章稍有区别,在我测试的时候,secureCRT的字符已调成utf-8,可以显示中文,如不能显示的话,可以加管道,添加:iconv -f gbk -t utf-8,最后我又用了一次awk,以:分隔,这里的:是有在ip138中的,所以输入时要调一下输入法,输入中文的:。