GeoIP:どこの国からアクセスしているか、IPアドレスから逆算する方法
どこの国からアクセスしているか、IPアドレスから逆算する方法
IPアドレスの割当は、ある程度まとまって行われており、どのIPアドレスがどこの国に割り当てられているか分かっています。
アクセスしてきた国によって、言語やサービスを変えたり、アクセスをシャットアウトすることができます。
Linux
インストール
sudo yum install GeoIP
使い方
geoiplookup 8.8.8.8
上記のコマンドで以下のような結果が返ります。
国コードだけを取得したい場合は、正規表現で取り出す必要があります。
GeoIP Country Edition: US, United States
データベース
ここでいうデータベースとは、MySQLなどのリレーショナル・データベースのことではありません。単一のバイナリファイルです。
昔はライセンスの関係でデータベースはインストールされなかったのですが、CentOS 8 Streamではインストールされています。
データベースの場所
/usr/share/GeoIP/GeoIP.dat
データベースの更新
IPアドレスの割当はたまに変わります。最新の情報に定期的にアップデートしましょう。
sudo yum install geoipupdate
sudo geoipupdate
ただし、ライセンスを購入していないとエラーになります。CentOS 8 Streamの場合は、パッケージ管理で自動的にアップデートされるようです。
PHP
PHPからGeoIPを呼び出して使うことができます。
インストール
sudo yum install php-geoip
通常はパッケージシステムが適切に設定してくれると思いますが、動かない場合は確認しましょう。
phpinfo()
GeoIPが有効になっていない場合は、php.ini
を編集し、 extension=geoip.so
を追加します。
使い方
echo geoip_country_code_by_name('8.8.8.8'); // USが返る
echo geoip_country_name_by_name('8.8.8.8'); // United Statesが返る
国コードの一覧
PHP公式のGeoIPのマニュアル
データベースの指定
ChatGPTによると、、、
PHP 5.3以前では、geoip_open
で指定できたようです。
PHP 5.4以降では、geoip_db_open
で指定できたようです。
PHP 7.3以前までは、上記で指定できたようです。
ところが、PHP公式サイトのリファレンスにはそのような記述はありません。
実際に上記のバージョンでテストしてみましたが、そのような関数はありません。
おそらく、ChatGPTは下記を学習したのではないかと思います。
Mac
GeoIPはライセンス料を支払わなければ使用することができません。[1]
MacPortsでは、GeoIP
がインストールできないのはライセンスの関係かもしれません。分かりません。 GeoLiteCity
をインストールすると使用することができるようになります。
インストール
sudo port install GeoLiteCity
使い方
geoiplookup 8.8.8.8
GeoLiteCityの場合は、以下のように住所や緯度経度も返ってきます。[2]
GeoIP City Edition, Rev 1: US, CA, California, Mountain View, 94043, 37.419201, -122.057404, 807, 650
データベースの場所
/opt/local/share/GeoIP/GeoIPCity.dat
PHP
Macでは、ライセンスを購入しないとGeoIPライブラリーを使うことができません。2020年くらい(PHP 7.2くらい?)までは、Macのローカル開発環境で構築できていました。昔は、Lite版のGeoIPデータベースが、MixMind社からダウンロードできてたような気がします。ひょっとしたら、以下のURLからGeoIPデータベースがダウンロードできるかもしれません。
https://dev.maxmind.com/geoip/geolite2-free-geolocation-data?
解決策
実行演算子を使って、シェルコマンドとして実行しちゃう荒業もあります。ただし国コードだけが欲しい場合は、正規表現で抽出する必要があります。
echo `/opt/local/bin/geoiplookup 8.8.8.8 2>&1`;
ライセンス違反
CentOS 8 StreamにインストールされたGeoIPデータベースをローカルのMacにコピーしても動くはずですが、それはライセンス違反になるはずなので、やってはいけません❗
Windows
Windowsは使ってないので分かりませんが、WSLを利用すれば、Ubuntuと同じなんだと思います。知らんけど。
GeoIP と GeoLiteCity の違い
GeoIPとGeoLiteCityは、MaxMind社が提供するIPアドレスから位置情報を検索するためのデータベースです。どちらもIPアドレスを使用して、そのIPアドレスが属する国や地域を検索することができます。
ただし、GeoIPとGeoLiteCityには次のような違いがあります。
- データの精度: GeoIPのデータは、より精度が高く、IPアドレスからより詳細な位置情報を検索することができます。一方、GeoLiteCityのデータは、精度が低いものの、無料で使用することができるという特徴があります。
- 使用条件: GeoIPは、商用利用を前提としています。そのため、商用で使用する場合には、ライセンス料を支払う必要があります。一方、GeoLiteCityは、商用利用や非商用利用を問わず、無料で使用することができます。
- データの更新頻度: GeoIPのデータは、より頻繁に更新されます。一方、GeoLiteCityのデータは、更新頻度が低いものの、無料で使用することができるという特徴があります。
どちらのデータベースを使用するかは、利用目的や予算などによって異なります。商用で使用する場合や、より精度の高いデータが必要な場合には、GeoIPを使用することをおすすめします。一方、非商用で使用する場合や、無料で使用できるデータが求められる場合には、GeoLiteCityを使用することをおすすめします。
Discussion