MaxMind GeoIP2 服務能識別互聯網用戶的地點位置與其餘特徵,應用普遍,包括個性化定製內容、詐欺檢測、廣告定向、網站流量分析、執行規定、地理目標定位、地理圍欄定位 (geo-fencing)以及數字版權管理。目前使用 GeoIP 更可能是配合Nginx或Apache服務器進行日誌分析獲取網站訪問量地域分佈情況。git
GeoIP 分爲商業版和免費版,免費版比商業版精度差了許多,經測試對於城市定位確實有差距,可否接受看你的精度要求!github
1、免費版本介紹:數據庫
一、GeoLite 版本,網上流傳較廣,數據庫類型爲 dat 格式文件,庫文件較小未進行精準度測試。數組
二、GeoLite2版本,目前最新版本,數據庫文件爲 mmdb 格式文件,有興趣瞭解 mmdb 格式的點這裏 。服務器
二者數據庫文件大小比對,GeoLite2 特性點擊這裏網絡
[plain] view plain copyapp
City 文件爲包含城市信息數據庫,Country 文件爲國家信息數據庫。curl
2、下載 GeoLite2 數據庫
下載方式分爲兩種,第一種經過下載 gz 壓縮包,第二種經過使用官方提供的下載更新程序,建議使用第二種,官方稱數據庫在每月的第一個星期二更新,若是想作成計劃任務每個月都更新建議選擇第二種!GeoIP2詳細更新日誌點這裏。ide
兩種方式這裏都囉嗦一下,本階段只是講如何下載數據庫,調用方式須要參考第三階段 API 調用部分!測試
一、第一種方式,下載 gz 文件並解壓縮。
GeoLite2 只提供 City 數據庫和 Country 數據庫下載 查看詳情點擊裏,數據庫文件分爲 Binary 和 CVS 兩種,這裏使用 Binary 文件。
[plain] view plain copy
二、第二種方式,需安裝官方下載更新程序 geoipupdate 。
a、到 GitHub下載地址 下載 geoipupdate,目前最新版爲 2.1.0,GitHub 鏈接速度要有耐心,確定能夠下載滴!編譯文件須要 libcurl-devel 包支持,需提早下載安裝。
[plain] view plain copy
編譯完畢只須要關注兩個文件
更新執行文件 /usr/local/bin/geoipupdate
帳戶信息文件 /usr/local/etc/GeoIP.conf
b、配置帳戶信息 GeoIP.conf,修改配置文件以下便可,本配置文件默認下載 mmdb 文件,若想下載 dat 文件取消註釋便可!
[plain] view plain copy
c、執行更新
查看geoipupdate幫助文件,瞭解有哪些參數可使用! -d 參數將文件下載到指定目錄,-v 參數就是顯示下載過程明細信息。
[plain] view plain copy
執行更新命令,下載速度看網絡狀況,本文將文件下載到 /mnt/data/geolite2/目錄 。
[plain] view plain copy
如何配置計劃任務定時更新 GeoLite2 數據庫請自行解決。
3、安裝 GeoLite2 API 調用程序
官方提供 .NET (C#)、C、Java、Perl、Python、Apache API調用。其餘第三方接口也有,但官方不提供技術支持,詳情點擊這裏。
本文使用 C 語言API接口進行調用測試,爲下篇文章Nginx與GeoIP2配合作鋪墊。其餘語言請參考官方指導自行解決!C語言API GitHub 下載地址
[plain] view plain copy
查看幫助文檔
[plain] view plain copy
4、測試
一、獲取國家信息,國家信息是正確滴,看着像亂碼的地方是顯示的俄語!
[plain] view plain copy
二、獲取城市信息,這個數據就有點糾結了,省份沒有問題,城市是有問題的! 官方演示地址 很是精準,也許這就是免費和收費的差異 :)
[plain] view plain copy
測試IP1:112.225.35.70 山東省青島市,定位錯誤。
測試IP2:115.29.113.101 浙江省杭州市,定位正確。
測試IP3:112.124.127.64 浙江省杭州市,定位正確。
測試IP4:180.153.214.152 上海市,定位正確。
由於獲取的數據是 Json 格式,因此根據幫助文檔提示能夠對內容進行格式化輸出,如輸出城市數據庫中 city->names->zh-CN 內容
[plain] view plain copy
獲取省份要注意一點,省份是個數組,無心中發現每一個版本的獲取方式還不同,注意版本區別!
[plain] view plain copy
雖然 GeoIP2 免費數據庫在城市定位分析的不是很理想,但對我來講精度能夠接受,聊勝於無嘛!