GeoLite2でサクッとできるIPアドレスの国判定

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

システムがどのような国からアクセスされているのか確認したいことがあります。
不審なアクセスがあったときにアクセス元の国を確認するケース、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