Python通過GeoIP獲取IP信息(國家、城市、經緯度等)

IP地址信息是非常重要的情報信息,通過IP可以定位到該IP所在的國家、城市、經緯度等。
獲取IP信息的方式有很多,很多服務商都提供了相應的地址庫或API接口服務。
如國內的ipip.net,國外的ip-api.com、maxmind.com等。
很多公司都是使用Maxmind網站的IP信息庫,裏面包含着IP的詳細信息,有付費的也有免費的,收費與免費的區別就是精準度和覆蓋率。

本文介紹下載及定時更新Maxmind的離線庫用python通過GeoIP來獲取IP信息

一、下載GeoLite2離線地址庫

1、註冊及申請License Key

下載地址庫之前先要在Maxmind網站註冊同意相應的協議並登陸。

1)註冊

訪問 https://dev.maxmind.com/geoip/geolite2-free-geolocation-data
Maxmiand註冊導航
點擊"Sign Up for GeoLite2" 根據輸入框進行註冊
Maxmiand註冊表單
注意郵箱一定要正確,註冊後會發郵件進行確認及修改密碼。
根據註冊的用戶名和修改後的密碼登陸就可以直接下載離線包了。
Maxmind賬號信息
點擊"Download Databases"進入到下載頁面,可以看到提供了CSV及mmdb兩種格式的離線庫包,最近的更新時間爲2021年11月02日。
MaxmiandGeoLite2地址庫下載
由於IP地址信息是經常有變化的,Maxmind提供了geoipupdate工具來更新離線地址包。該工具使用需要申請賬號和License Key

2)申請License Key

還是通過剛註冊的引導頁面,點擊“Generate a License Key”
Maxmind生成License導航頁
進如到頁面後,點擊“Generate new license key”
Generate new license key
License Key生成確定頁
點擊確定以後就會生成賬號及License key
License key生成

2、下載並配置geoipupdate

https://github.com/maxmind/geoipupdate
這裏有詳細的安安裝及配置說明

發行版本下載地址 https://github.com/maxmind/geoipupdate/releases
在這裏插入圖片描述

可以看到提供了各種平臺的版本的下載鏈接,這裏我們下載安裝的是linux版本,點擊下載“geoipupdate_4.8.0_linux_amd64.tar.gz”
在home目錄下執行wget https://github.com/maxmind/geoipupdate/releases/download/v4.8.0/geoipupdate_4.8.0_linux_amd64.tar.gz 下載至home目錄
tar -zxvf geoipupdate_4.8.0_linux_amd64.tar.gz 進行解壓
cd geoipupdate_4.8.0_linux_amd64 目錄執行ls -alh查看目錄內容,發現有兩個關鍵文件,一個是getipupdate命令執行文件,一個是GeoIP.conf配置文件
geoipupdate目錄
將執行命令拷貝到命令文件夾

cp geoipupdate /usr/local/bin/

geoipupdate命令讀配置文件默認爲/usr/local/etc/GeoIP.conf將配置文件拷貝到/usr/local/etc/下

cp GeoIP.conf /usr/local/etc/
vi /usr/local/etc/GeoIP.conf

修改GeoIP.conf
如上圖修改離線庫文件目錄及賬號、LicenseKey,AccountID和LicenseKey就是開始在Maxmind網站上申請的。

3、運行geoipupdate命令並加入定時任務

執行geoipupdate命令,在目錄下面產生了GeoLite2-City.mmdb、GeoLite2-Country.mmdb兩個離線庫文件。
GeoLite2離線庫文件
創建Linux定時任務,每週自動更新一下離線庫文件

crontab -e
0 0 * * 0 /usr/local/bin/geoipupdate

二、通過Python調用GeoIP獲取IP信息

默認已經安裝好了Flask環境,並激活了python虛擬環境。激活python虛擬環境安裝Flask教程見http://xiejava.ishareread.com/posts/7f405b25/

1、安裝geoip2

pip install geoip2

2、編寫hello.py調用geoip2

vi hello.py

複製以下代碼到hello.py

from flask import Flask
import geoip2.database

app = Flask(__name__)
reader=geoip2.database.Reader('/home/geoipupdate_4.8.0_linux_amd64/GeoLite2-City.mmdb')
@app.route("/")
def hello():
    return "Hello World!"

@app.route("/getip/<ip>")
def getip(ip):
    ipinfo=reader.city(ip)
    ipinfo_json={'country':ipinfo.country.name,'city':ipinfo.city.name,'location':[ipinfo.location.longitude,ipinfo.location.latitude]}
    return ipinfo_json

if __name__ == "__main__":
    app.run(host='0.0.0.0',port=8080)

3、運行hello.py

(flask_web) [root@localhost flask_web]# python hello.py
 * Serving Flask app 'hello' (lazy loading)
 * Environment: production
   WARNING: This is a development server. Do not use it in a production deployment.
   Use a production WSGI server instead.
 * Debug mode: off
 * Running on all addresses.
   WARNING: This is a development server. Do not use it in a production deployment.
 * Running on http://192.168.1.18:8080/ (Press CTRL+C to quit)

注意:如果linux開啓了防火牆請關閉防火牆,或放開192.168.1.18

4、驗證

通過瀏覽器訪問 http://192.168.1.18:8080/getip/128.101.101.101
驗證IP信息
可以看到返回IP的國家、城市、經緯度等信息。

至此,本文介紹瞭如何註冊並下載GeoIP離線數據包,並通過官方提供的geoipupdate進行定期更新數據。還介紹瞭如何通過Python調用GeoIP獲取IP信息。

作者博客:http://xiejava.ishareread.com/

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章