如果你想查找一个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次请求。
How to set up EPEL repository on CentOS
If you are using CentOS or RHEL, it is strongly recommended that you configure EPEL (Extra Packages for Enterprise Linux) repository on your system. EPEL is a community effort to create a repository of high-quality add-on freeware packages for RHEL-based distributions. Once you set up EPEL repository, you can use yum command to install any of close to 7,000 EPEL packages.
In order to enable EPEL repository on your CentOS system, you need to check CentOS version. To do that, run the following command.
$ cat /etc/RedHat-release
CentOS release 6.3 (Final)
Then install an EPEL repository rpm file as follows. Note that the rpm file does not depend on the underlying processor architecture (e.g., 32-bit/64-bit x86, ppc, sparc, alpha, etc), so no need to pay attention to processor architecture difference.
For CentOS 5.*:
$ sudo rpm -Uvh http://mirrors.kernel.org/Fedora-epel/5/i386/epel-release-5-4.noarch.rpm
For CentOS 6.*:
$ sudo rpm -Uvh http://mirrors.kernel.org/fedora-epel/6/i386/epel-release-6-8.noarch.rpm
To verify that EPEL yum repository has been set up successfully, run the following command to list all available repositories on your system.
$ yum repolist
repo id repo name status base CentOS-6 - Base 4,776 epel Extra Packages for Enterprise Linux 6 - i386 6,913 extras CentOS-6 - Extras 17 updates CentOS-6 - Updates 960 repolist: 12,666