如果你想尋找一個IP地址在地球上的實際地理位置,現在已經有好多線上的GeoIp尋找服務你可以利用(例如geoiptool.com)。這些線上服務大多數都是由免費的像MaxMind這樣的GeoIP資料庫提供支援。在使用這些基於網頁的服務同時,這裡也有一些不同的方法來查詢GeoIP資料庫,尤其是Linux命令列。
在這篇教程裡,我想展示一下如何通過Linux命令列擷取IP地址的實際地理位置。
方法一第一種方法是使用geoiplookup工具,它是一個用於查詢MaxMind的GeoIP資料庫的命令列用戶端。geoiplookup允許你查詢一個IP地址(或網域名稱)的地理資訊或者網路資訊。你可以通過以下命令安裝它(它內建了免費的GeoIP資料庫)。
在Debian,Ubuntu或Linux Mint上安裝geoiplookup:
1sudo apt-get install geoip-bin在Fedora上安裝:
1sudo yum install geoip要在CentOS上安裝,需要先開啟EPEL源,然後使用yum命令:
1sudo yum install geoip預設情況下安裝的geoiplookup以及GeoIP.dat資料庫檔案位於/usr/share/GeoIP。這個資料庫只能查詢到國家資訊。
1geoiplookup 23.66.166.1511GeoIP Country Edition: US, United States你可以從MaxMind上下載額外的GeoIP資料庫,它將會告訴你更詳細的資訊而不僅僅是國家。你也可以從這個網站上下載到許多最新的GeoIP.dat資料庫。我推薦你這麼做因為從Linux源上安裝的GeoIP.dat可能已經過時了。MaxMind上的GeoIP資料庫每月更新一次。
要從MaxMind上安裝GeoIP資料庫,按照下面的方法。你可能想添加一個cronjob(crontab任務,crontab是Unix和類Unix系統中用於周期性執行任務的指令,譯註)來使這個過程自動化。
1234567wget http://geolite.maxmind.com/download/geoip/database/GeoLiteCountry/GeoIP.dat.gzwget http://geolite.maxmind.com/download/geoip/database/GeoLiteCity.dat.gzwget http://download.maxmind.com/download/geoip/database/asnum/GeoIPASNum.dat.gzgunzip GeoIP.dat.gzgunzip GeoIPASNum.dat.gzgunzip GeoLiteCity.dat.gzsudo cp GeoIP.dat GeoIPASNum.dat GeoLiteCity.dat /usr/share/GeoIP/現在如果你重新執行geoiplookup,你將會看到額外的自治系統編號(AS Number)資訊。這將會讓你大致瞭解這個IP地址是屬於哪個管理域(administrative domain)。
1geoiplookup 128.112.119.20912GeoIP Country Edition: US, United StatesGeoIP ASNum Edition: AS88 Princeton University如果在運行命令時不帶任何參數,geoiplookup工具將只自動的使用GeoIP.dat和GeoIPASNum.dat,而不會用GeoLiteCity.dat。後面將教你查看城市一級的資訊。
要擷取城市一級的地理位置資訊,需要顯式的告訴geoiplookup使用GeoLiteCity.dat資料庫。
1geoiplookup -f /usr/share/GeoIP/GeoLiteCity.dat 23.66.166.1511GeoIP City Edition, Rev 1: US, MA, Cambridge, 02142, 42.362598, -71.084297, 506, 617輸出包括州,城市,郵遞區號,緯度和經度。所指示不同國家和網路地址的準確性因地而異。例如,寬頻IP地址的地理位置資訊要比移動網路準確。
方法二如果你想免去安裝和升級GeoIP資料庫的煩惱,你可以試試ipinfo.io線上服務。和其他的服務不同,ipinfo.io提供了基於JSON的地理資訊API,所以你可以很容易的在命令列使用像curl之類的工具擷取地理資訊。
1curl ipinfo.io/23.66.166.151需要注意的是它們的API限制每天最高1,000次請求。