PEARライブラリ「Net_IPv4」を利用して、IPアドレスによるキャリアの判別を行う。
まず、キャリアを判別するスクリプトを用意する。
(PCではいいけれど、モバイルの実機ではこのスクリプトをそのまま実行できないため外部スクリプトとしてincludeして利用する)
主要3キャリアの IP アドレス情報は以下より
キャリアごとのIPアドレス情報
mobile_ip_carrier.php
<?php
// Net_IPv4を読み込む
require_once 'Net/IPv4.php';
// IPアドレスからキャリアを判別する
function mobile_ip_carrier()
{
// IPを設定する配列を準備する
$ip_table = array();
// DoCoMoのIP帯域を配列に格納
$ip_table['docomo'] = array();
$ip_table['docomo'][] = '210.153.84.0/24';
$ip_table['docomo'][] = '210.136.161.0/24';
$ip_table['docomo'][] = '210.153.86.0/24';
$ip_table['docomo'][] = '210.153.84.0/24';
// 以下略
// auのIP帯域を配列に格納
$ip_table['au'] = array();
$ip_table['au'][] = '210.230.128.224/28';
$ip_table['au'][] = '121.111.227.160/27';
$ip_table['au'][] = '61.117.1.0/28';
$ip_table['au'][] = '219.108.158.0/27';
$ip_table['au'][] = '219.125.146.0/28';
$ip_table['au'][] = '61.117.2.32/29';
$ip_table['au'][] = '61.117.2.40/29';
$ip_table['au'][] = '219.108.158.40/29';
$ip_table['au'][] = '219.125.148.0/25';
$ip_table['au'][] = '222.5.63.0/25';
$ip_table['au'][] = '222.5.63.128/25';
$ip_table['au'][] = '222.5.62.128/25';
$ip_table['au'][] = '59.135.38.128/25';
$ip_table['au'][] = '219.108.157.0/25';
$ip_table['au'][] = '219.125.145.0/25';
$ip_table['au'][] = '121.111.231.0/25';
$ip_table['au'][] = '121.111.227.0/25';
$ip_table['au'][] = '118.152.214.192/25';
$ip_table['au'][] = '118.159.131.0/25';
$ip_table['au'][] = '118.159.133.0/25';
// SoftBankのIP帯域を配列に格納
$ip_table['softbank'] = array();
$ip_table['softbank'][] = '123.108.236.0/24';
$ip_table['softbank'][] = '123.108.237.0/27';
$ip_table['softbank'][] = '202.179.204.0/24';
$ip_table['softbank'][] = '202.253.96.224/27';
// 以下略
// IPのキャリアを決定する
$ip_carrier = '';
// IPアドレスからキャリアを判断する
if (empty($ip_carrier)) {
foreach ($ip_table as $ip_table_carrier => $ip_table_value) {
foreach ($ip_table_value as $value) {
$value = trim($value);
if (strcmp($_SERVER["REMOTE_ADDR"], $value) == 0 || Net_IPv4::ipInNetwork($_SERVER["REMOTE_ADDR"], $value)) {
$ip_carrier = $ip_table_carrier;
break 2;
}
}
}
}
// 携帯のキャリアIPアドレスでない場合はPCからのアクセスとみなす
if (empty($ip_carrier)) {
$ip_carrier = 'pc';
}
return $ip_carrier;
}
echo mobile_ip_carrier();
?>
つづいて、携帯の実機でアクセスする(キャリア判別の結果を表示する)ページを作成する。
test.php
先に作成した判別用のスクリプトをrequireでincludeして利用。
判別結果を変数$ip_carrier(外部スクリプト内で設定した)を使用して出力。
<?php
// IPアドレスからキャリアを判別する外部スクリプトを読み込む
require_once 'mobile_ip_carrier.php';
?>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset='Shift_JIS'" />
<meta http-equiv="Pragma" content="no-cache" />
<meta http-equiv="Cache-Control" content="no-cache" />
<meta http-equiv="Expires" content="-1" />
<title>キャリア判別</title>
</head>
<body>
<?php echo $ip_carrier ?>
</body>
</html>
コメント:0
トラックバック:0
- この記事のトラックバック URL
- http://showzine.info/blog/2009/04/net_ipv4%e3%82%92%e5%88%a9%e7%94%a8%e3%81%97%e3%81%9f%e3%82%ad%e3%83%a3%e3%83%aa%e3%82%a2%e5%88%a4%e5%88%a5.html/trackback
- トラックバックの送信元リスト
- PEAR::Net_IPv4を利用したIPアドレスによるキャリア判別 - SHOWJIN*BLOG より