GeoLite2でサクッとできるIPアドレスの国判定
システムがどのような国からアクセスされているのか確認したいことがあります。
不審なアクセスがあったときにアクセス元の国を確認するケース、GeoIPによるフィルターを検討する材料にするといったケースです。
MAXMIND社は、GeoLite2という無償で利用できるGeoロケーションデータベースを提供しています。
より正確で情報量が多いデータベースは有償版として提供されます。
GeoLite2とPythonを使って、IPアドレスの国をサクッと判定してみました。
GeoLite2データベースのダウンロード
GeoLite2 Free Downloadable DatabasesからGeoLite2をダウンロードします。
"GeoLite2 City"の"MaxMind DB binary, gzipped"をダウンロードしました。
ファイルを解凍して、適当なディレクトリに配置します。
Python APIを実行する
手順やAPIの使い方はGithubの通りです。
Python APIをインストールします。
$ pip install geoip2
以下のコードをgeoip.pyとして保存しました。
同じディレクトリに解凍したファイル(GeoLite2-City_20180403/GeoLite2-City.mmdb)を配置します。
import sys import geoip2.database ipaddress=sys.argv[1] reader = geoip2.database.Reader('GeoLite2-City_20180403/GeoLite2-City.mmdb') response = reader.city(ipaddress) print(response.country) print(response.country.names["en"]) print(response.country.iso_code)
会社のIPアドレスを引数に実行してみました。
正しく、日本のIPアドレスと判断されました。
$ python3 geoip.py xx.xx.xx.xx geoip2.records.Country(names={'es': 'Japón', 'de': 'Japan', 'ru': 'Япония', 'en': 'Japan', 'ja': '日本', 'fr': 'Japon', 'zh-CN': '日本', 'pt-BR': 'Japão'}, iso_code='JP', confidence=None, is_in_european_union=False, geoname_id=1861060, _locales=['en']) Japan JP $
おわりに
GeoLite2とPythonを使って、IPアドレスの国を判定してみました。
IPアドレスを簡易的に確認するには、これで充分かもしれません
より正確でより詳細な情報を確認するには、有償版を検討すると良さそうです。
参考
検証環境
- macOS High Sierra