GeoLite2という無料で利用できるIPアドレスと国・都市の対応関係のデータベースがあるらしいので触ってみました(有料版よりも不正確らしいです)
ファイル形式はCSVと独自形式のバイナリ(mmdb)で配布されています
ライセンスは「クリエイティブ・コモンズ 表示-継承 3.0 非移植」です
独自形式のバイナリを扱うためのライブラリが公式で配布されていてだいたいの言語には対応しているみたいです
Pythonで試しに使ってみる
以下のページにある国(Country)のデータベースをダウンロードします
curl -O http://geolite.maxmind.com/download/geoip/database/GeoLite2-Country.mmdb.gz
ダウンロードしてきたファイルを解凍します
gzip -d GeoLite2-Country.mmdb.gz
ライブラリの一覧の中からPython用のライブラリ(geoip2)をインストールします
pipなどを入れてる方であれば、以下のコマンドだけでインストールできます
pip install geoip2
使い方はこんな感じです
"United States"とか"US"という感じで国の情報が得られます
# -*- coding: utf-8 -*- import geoip2.database reader = geoip2.database.Reader('GeoLite2-Country.mmdb') #データベースへのパスを指定 r = reader.country('8.8.8.8') #IPアドレスを指定 print '{}, {}'.format(r.country.name, r.country.iso_code)