碳基体

奋斗在产品安全第一线的安全妹子

获得IP的地理位置信IP Geolocation及IP位置可视化

一、IP Geolocation API

淘宝提供的IP查询API,用来查询境外IP时,效果不太好(ip-api.com)

curl ip.taobao.com/service/getIpInfo.php?ip=8.35.201.48
{"code":0,"data":{"country":"\u7f8e\u56fd","country_id":"US","area":"","area_id":"","region":"","region_id":"","city":"","city_id":"","county":"","county_id":"","isp":"","isp_id":"","ip":"8.35.201.48"}}

(xxxx,\u7f8e\u56fd是有多不友好)

国内的还有ip138TOOL站长工具纯真,但都不提供API

而ip-api.com的IP Geolocation API 则提供更为准确友好的信息

curl ip-api.com/json/8.35.201.48
{"status":"success","country":"United States","countryCode":"US","region":"","regionName":"","city":"","zip":"","lat":"38","lon":"-97","timezone":"","isp":"Level 3 Communications","org":"Google Translate","as":"AS15169 Google Inc.","query":"8.35.201.48"}


而除了以JSON格式提供,还同时支持CSV格式,NEW LINE格式

curl ip-api.com/csv/8.35.201.48     
success,"United States",US,,,,,38,-97,,"Level 3 Communications","Google Translate","AS15169 Google Inc.",8.35.201.48

curl ip-api.com/line/8.35.201.48   
success  (1.是否成功)
United States (2.国家名称)
US (3.国家编号)
    (4. 区域名称)
(5.区域编号)
(6.城市)
(7.城市编号)
38(8.纬度)
-97(9.经度)
(10.时区)
Level 3 Communications(11. ISP运营商名字)
Google Translate(12. 公司名字)
AS15169 Google Inc.(13. AS编号与名字)

8.35.201.48 (查询的IP)

当我们需要批量查询IP的归属地时(其实只要查询到ISP,基本就知道IP的的信息了),可以很方便的写个脚本调用该接口,以下有个例子ipISP.pl

#!/usr/bin/perl -w
$file = shift;
$fileout = $file.'_out_isp';

open IN, "<$file" or die "cannot open $file for reading :  $! ";
open OUT,">$fileout" or die "cannot open $fileout for writing : $!";

while(<IN>){
   chomp;
   if ($_ =~ /(\S+)/){
   $ip = $1;
      }
   $result = `wget -qO- ip-api.com/line/$ip | awk 'NR==11 {print "ISP: "\$0} '`;
   chomp($result);
   print OUT $ip."\t".$result."\n";
   sleep(1);#一定要等待,否则会被封ip
}

close IN;
close OUT;

perl ipISP.pl ip

ip文件如下

61.55.186.22    
61.55.186.21    
61.55.186.20    
61.55.186.18    


运行结果如下ip_out_isp

61.55.186.22    ISP: China Unicom Hebei
61.55.186.21    ISP: China Unicom Hebei
61.55.186.20    ISP: China Unicom Hebei
61.55.186.18    ISP: China Unicom Hebei



ip-api.com 的API对调用的频率限制实在是太小了,官方说调用频率需小于2qps(怀疑有点过小,但我就被封过IP,但官方给出的解释就是如此)


 


二、IP位置可视化(用地图来显示当前IP的位置)——iplookup

github上paulshi大牛就分享了个IP地址可视化的工具iplookup(感谢喜欢做有趣的东西并爱分享的程序猿门)


1. 效果展示

(1)查询当前IP的地理位置

   (2)查询指定IP的地理位置

   (3)查询指定域名的ip地理信息

 

2.iplookup安装

该工具的安装也很简单

第一步:到 https://www.mapbox.com/ 注册帐号,创建一个map,点击Share->Developer,获得mapid

第二步:下载并安装iplookup

git clone https://github.com/paulshi/iplookup.git

cd iplookup/

vim config.py

将第一步中获得的mapid填写进去


创建virtual env

pip install virtualenv

virtualenv ev

source ev/bin/activate


安装依赖包

pip install -r requirements.txt

依赖包有

Flask==0.10.1
Jinja2==2.7.1
MarkupSafe==0.18
Werkzeug==0.9.4
gunicorn==18.0
itsdangerous==0.23
requests==2.0.1
wsgiref==0.1.2


运行就可以了

python main.py

当然有人会说,这样定位地地址不准确,我明明在张江,为啥说我在闵行,拜托,又不是GPS。

来源:碳基体