ウェブ、ショウジン

PEAR::Net_IPv4を利用したIPアドレスによるキャリア判別

2009-4-18
Category
PHP

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>

Categories

Tag Cloud

AdMob Android Apache centos CodeIgniter EC-CUBE facebookアプリ facebookページ feed Firefox Flash google googleanalytics htaccess iPad iPhone JavaScript lamp mobile nginx ogp pear php plugin rollover rss sendmail setting smarty ssh Titanium Mobile Titanium Studio tutorial ubuntu vim VirtualBox vmware vps Windows WordPress xampp youtube さくらインターネット アクセス解析 カスタム投稿