IPチェックの方法と注意点
携帯からのアクセスである事の確認を、IPチェックで行う際の、方法と注意点のまとめです。
一部、前の記事からの続きです。
実装方法例
まず、IPチェックの方法は、PEARのNet_IPv4というライブラリを使って行う方法が紹介されています。
http://d.hatena.ne.jp/p4life/20070329/1175152855
OpenPNE2.x系の方法は、もっとシンプルで判りやすいんじゃないかと思います。
function is_ktai_ip() { require_once 'Net/IPv4.php'; require_once 'ktaiIP.php'; $is_valid_ip = false; foreach ($GLOBALS['_OPENPNE_KTAI_IP_LIST'] as $ktai_ip) { if (Net_IPv4::ipInNetwork($_SERVER[SERVER_IP_KEY], $ktai_ip)) { $is_valid_ip = true; break; } } return $is_valid_ip; }
http://trac.openpne.jp/browser/OpenPNE/trunk/webapp/lib/ktaiIP.php
http://trac.openpne.jp/browser/OpenPNE/trunk/webapp/lib/ktaiIP.php
SERVER_IP_KEYは、プロキシ入ってるなどREMOTE_ADDRで正しいIPが取れない場合に、HTTP_X_FORWARDED_FOR から取得させるため、定数に設定します。
http://trac.openpne.jp/browser/OpenPNE/trunk/config.php.sample
MVCの構成が云々、というのは気にしないならば、
IP帯域リスト $GLOBALS['_OPENPNE_KTAI_IP_LIST'] が含まれるktaiIP.phpとIPv4.phpを読み込める状態にして、
$isIP = is_ktai_ip();
と書くだけで、携帯IPかどうかtrue/false で返ってきます。
IP帯域リストの取得方法
上記紹介した2つの方法とも、
「これが携帯の全IPアドレス帯域である」というリスト(配列)が必要になります。
IPアドレス帯域は、各携帯電話会社のホームページ上で公開されています。
その情報からIP一覧のリストを作り、アクセス元のIPと照合すればいいだけ
・・・なのですが。
問題は、この提供IPアドレス帯域。
時々、変わったり追加されるのです。
アプリ側で全IPを網羅していないと、一部ユーザさんが「エラーでアクセスできない」状況が発生してしまいます。
これをどうやって更新していくか。
案1)「ホームページからリアルタイムでIP帯域リスト抽出して、随時リスト作成」
例:[Utility.php] 携帯電話を判別する。IPアドレスから。【確定版】 | 株式会社オルタ
「ホームページが落ちてたらどうなるの?」
「たまにチェックするだけならいいけど、頻繁だと負荷が・・・」
案2)「定期的にホームページから情報を自動抽出して、リストを自動更新する」
「ホームページの内容やパターン、公開ページが変わりました、とかでノイズが入ったりしないか?」
「自動更新だと、そういう不具合を見落とし易くなる」
案3)「ホームページから自動抽出した情報を受け取って、チェックして手動でリスト更新」
「でもそれだと、情報更新遅くなるよね。少なくとも自動更新(リアルタイム)よりは」
「あと、入力ミスとかで反映間違いするかも」
「それに、今までの方法って全部、
ホームページ更新とかで、情報全部取れなくなった場合、巡回アプリ直さなきゃダメなんだよね」
案4)「サイト巡回ソフトでIP帯域情報ページを監視しておいて、更新されたら確認しに行って手動で直す?」
「アナログだなおいっ!!(笑)」
で、結論申し上げますと、
案1〜4のどれにするかは、みなさん各々の、方針と好みで決めて下さい ^^;
ちなみに、案3)が一般的っぽいです。ホームページ確認&抽出用のソースが、公開されています。
DSAS開発者の部屋:携帯ゲートウェイのIPアドレス帯更新を効率的に確認する方法 perl
http://d.hatena.ne.jp/tomisima/20070903/1188836400 Python