IP アドレスからアクセス元の国を判定する
はじめに
IP アドレスの仕組みから考えて100%完全に判定できる方法はないはず。
どうしても判定したいという要望があったので調査してみた。
商用サービス
NetAcuity / Digital Element
SurfPoint / Geolocation Technology
GeoIP2 / MaxMind
無償サービス
MAXMIND社は、GeoLite2という無償で利用できるGeoロケーションデータベースを提供しています。 より正確で情報量が多いデータベースは有償版として提供されます。 GeoLite2とPythonを使って、IPアドレスの国をサクッと判定してみました。
GeoLite2 databases are free IP geolocation databases comparable to, but less accurate than, MaxMind’s GeoIP2 databases. The GeoLite2 Country, City, and ASN databases are updated twice weekly, every Tuesday and Friday. GeoLite2 data is also available as a web service in the GeoLite2 Country and GeoLite2 City web services. Users of the GeoLite2 web services are limited to 1000 IP address lookups per service per day.
GeoLite2 データベースは、MaxMind の GeoIP2 データベースに匹敵するが、精度は劣る無料の IP 地理位置情報データベースである。GeoLite2 の国、都市、および ASN データベースは、毎週火曜日と金曜日の週 2 回更新されます。GeoLite2 データは、GeoLite2 Country および GeoLite2 City ウェブサービスでもウェブサービスとして利用できます。GeoLite2 ウェブサービスのユーザーは、1 サービスにつき 1 日 1000 IP アドレス検索に制限されています。
RIR の利用
RIR (Regional Internet Registry、地域インターネットレジストリ)は、それぞれの地域でIPアドレスの割り当て管理を行う組織です。 各 RIR は、それぞれの国へ割り当てるIPアドレスの情報をWebサイトで公開しています。RIR の一つである APNIC のデータは下記URLが最新になります。 各 RIR は、それぞれの国へ割り当てるIPアドレスの情報をWebサイトで公開しています。APNIC であれば、最新版は下記になります。 https://ftp.apnic.net/stats/apnic/delegated-apnic-latest 各RIR でも同様に公開していますが、さらに自組織のみならず他組織のデータも相互に公開しています。これにより特定RIRの Webサイトのダウンなどで参照できなくなることを防いでいるのです。
Webツール
資料として以下のRIRのIPアドレスリストを使用しています。 現在、1日1回自動でこのリストを取得してデータベースを更新しています。 また、まれに一度割り当てられたIPアドレスが他の地域へと変更されることや、そもそもリストに誤りがあり、後日修正されることがある点にご注意ください。 APNIC(アジア・オセアニア) ARIN(北米) RIPE NCC(欧州・中東) LACNIC(中南米) AFRINIC(アフリカ)
世界の国別に割り当てられている IPv4 アドレスは、地域インターネット レジストリ(RIR: Regional Internet Registry)が管理しています(IP アドレスの管理についての詳細はこちら)。現在、ARIN、RIPE NCC、APNIC、LACNIC、AfriNIC の五つの RIR があり、それぞれが管轄する地域の国に IP アドレスを配分しています。 「どの国にどの IP アドレスを割り当てているか」という情報は、各 RIR がデータベース化しており、それぞれ以下の URL から参照することができます。
ftp://ftp.arin.net/pub/stats/arin/delegated-arin-extended-latest ftp://ftp.ripe.net/pub/stats/ripencc/delegated-ripencc-extended-latest ftp://ftp.apnic.net/pub/stats/apnic/delegated-apnic-extended-latest ftp://ftp.lacnic.net/pub/stats/lacnic/delegated-lacnic-extended-latest ftp://ftp.afrinic.net/pub/stats/afrinic/delegated-afrinic-extended-latest
そこでこのページでは、上記五つの RIR のデータを一つにした上で、上記例の修正を加えたリストを公開しています。さらにその修正に加え、IP アドレスの範囲が連続していて、まとめられる部分についてはまとめてあります。
参考
【テックコラム】RIR | IPアドレスから国の特定を自前でしてみる
【Python】IPアドレスから国を確認する(pandas編)
【Python】GeoLite2でIPアドレスから国を確認する
また、GeoLite2はデータをダウンロードして使用する方法と、APIへアクセスして使う方法があります。APIを使う場合は1日1,000回が上限のようなので、今回はデータをダウンロードして使用します。