如果你想查找一個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次請求。