如何通过命令行查找一个IP的地理位置信息
如果你想查找一个IP地址在地球上的实际地理位置,现在已经有好多在线的GeoIp查找服务你可以利用(例如geoiptool.com)。这些在线服务大多数都是由免费的像MaxMind这样的GeoIP数据库提供支持。在使用这些基于网页的服务同时,这里也有一些不同的方法来查询GeoIP数据库,尤其是Linux命令行。
在这篇教程里,我想展示一下如何通过Linux命令行获取IP地址的实际地理位置。
方法一
第一种方法是使用geoiplookup工具,它是一个用于查询MaxMind的GeoIP数据库的命令行客户端。geoiplookup允许你查询一个IP地址(或域名)的地理信息或者网络信息。你可以通过以下命令安装它(它自带了免费的GeoIP数据库)。
在Debian,Ubuntu或Linux Mint上安装geoiplookup:
sudo apt-get install geoip-bin
在Fedora上安装:
sudo yum install geoip
要在CentOS上安装,需要先打开EPEL源,然后使用yum命令:
sudo yum install geoip
默认情况下安装的geoiplookup以及GeoIP.dat数据库文件位于/usr/share/GeoIP。这个数据库只能查询到国家信息。
geoiplookup 23.66.166.151
GeoIP Country Edition: US, United States
你可以从MaxMind上下载额外的GeoIP数据库,它将会告诉你更详细的信息而不仅仅是国家。你也可以从这个网站上下载到许多最新的GeoIP.dat数据库。我推荐你这么做因为从Linux源上安装的GeoIP.dat可能已经过时了。MaxMind上的GeoIP数据库每月更新一次。
要从MaxMind上安装GeoIP数据库,按照下面的方法。你可能想添加一个cronjob(crontab任务,crontab是Unix和类Unix系统中用于周期性执行任务的指令,译注)来使这个过程自动化。
wget http://geolite.maxmind.com/download/geoip/database/GeoLiteCountry/GeoIP.dat.gz
wget http://geolite.maxmind.com/download/geoip/database/GeoLiteCity.dat.gz
wget http://download.maxmind.com/download/geoip/database/asnum/GeoIPASNum.dat.gz
gunzip GeoIP.dat.gz
gunzip GeoIPASNum.dat.gz
gunzip GeoLiteCity.dat.gz
sudo cp GeoIP.dat GeoIPASNum.dat GeoLiteCity.dat /usr/share/GeoIP/
现在如果你重新执行geoiplookup,你将会看到额外的自治系统编号(AS Number)信息。这将会让你大致了解这个IP地址是属于哪个管理域(administrative domain)。
geoiplookup 128.112.119.209
GeoIP Country Edition: US, United States
GeoIP ASNum Edition: AS88 Princeton University
如果在运行命令时不带任何参数,geoiplookup工具将只自动的使用GeoIP.dat和GeoIPASNum.dat,而不会用GeoLiteCity.dat。后面将教你查看城市一级的信息。
要获取城市一级的地理位置信息,需要显式的告诉geoiplookup使用GeoLiteCity.dat数据库。
geoiplookup -f /usr/share/GeoIP/GeoLiteCity.dat 23.66.166.151
GeoIP City Edition, Rev 1: US, MA, Cambridge, 02142, 42.362598, -71.084297, 506, 617
输出包括州,城市,邮政编码,纬度和经度。所指示不同国家和网络地址的准确性因地而异。例如,宽带IP地址的地理位置信息要比移动网络准确。
方法二
如果你想免去安装和升级GeoIP数据库的烦恼,你可以试试ipinfo.io在线服务。和其他的服务不同,ipinfo.io提供了基于JSON的地理信息API,所以你可以很容易的在命令行使用像curl之类的工具获取地理信息。
curl ipinfo.io/23.66.166.151
需要注意的是它们的API限制每天最高1,000次请求。