[PHP] IPアドレスから地域を判定するNet_GeoIPとGeoIP

最近は、ニュースのどうでもいい個人的感想が続いてたので、久々にコードのサンプルを。

Package Information: Net_GeoIP
PECL :: Package :: geoip

pear か pecl で入れるかの違いだけで、データとしては同じMaxMindのものを使えるようです。
pearの場合は、Net_GeoIP。
peclの場合は、geoip。

MaxMindは下記から。国レベルで、99.5%の精度とのことですが、運用しているとそこまで高くないような気がします。
MaxMind - GeoLite Databases | Free IP Geolocation Database

この辺りはレンタルサーバによって、デフォルトで入れてくれるものもあるかもしれません。私の環境には入ってなかったので、Net_GeoIPを$HOME下に展開して使っています。

ということで、Net_GeoIPでテスト。GeoIPはPHP: GeoIP - Manualを。

net_geoip.php
#!/usr/local/bin/php
<?php
set_include_path (".:/usr/local/php5/lib/php:/home/user01/pear/pear/php");

include "Net/GeoIP/GeoIP.php";

$ip = @$argv[1];
if (strlen($ip) == 0) {
exit(0);
}

$geoip = Net_GeoIP::getInstance(
"/home/user01/pear/pear/data/Net_GeoIP/GeoIP.dat"
, Net_GeoIP::MEMORY_CACHE
);

$cname = $geoip->lookupCountryName($ip);
$ccode = $geoip->lookupCountryCode($ip);

print "*** IP=$ip\n";
print "*** $ccode::$cname\n";


いつものYahoo!さんで確認。IPは下記を使用。
PING www.g.yahoo.co.jp (203.216.227.245)
PING ds-any-fp3-real.wa1.b.yahoo.com (72.30.2.43)
PING www.visitlondon.com (31.222.175.205)

$ ./net_geoip.php 203.216.227.245
*** IP=203.216.227.245
*** JP::Japan

$ ./net_geoip.php 72.30.2.43
*** IP=72.30.2.43
*** US::United States

$ ./net_geoip.php 31.222.175.205
*** IP=31.222.175.205
*** GB::United Kingdom


www.standard.co.uk や www.london2012.com はUnited Statesと判定されました。
どうもアカマイのようなCDN経由で返されるところはみんなUSか自国にあれば自国のIPかもしれません。
私のレンタルサーバはアメリカにあるので、United Statesと判定してるのかと推測。
$ ping www.london2012.com
PING a1479.w7.akamai.net (107.14.42.26)
$ ./net_geoip.php 107.14.42.26
*** IP=107.14.42.26
*** US::United States

$ ping www.standard.co.uk
PING a1165.g1.akamai.net (107.14.42.59)
$ ./net_geoip.php 107.14.42.59
*** IP=107.14.42.59
*** US::United States

関連記事

Comment

(編集・削除用)
管理者にだけ表示を許可

Trackback

URL
https://nosource.blog.fc2.com/tb.php/80-4c32ff78
この記事にトラックバック(FC2Blog User)

カテゴリ

Amazon

アクセスランキング

[ジャンルランキング]
コンピュータ
249位
アクセスランキングを見る>>

[サブジャンルランキング]
プログラミング
38位
アクセスランキングを見る>>

RSSリンクの表示

ブロとも申請フォーム

Copyright © nopgm