MEMORVA
ウェブサイト制作 HTML/JavaScript モバイル Linux 開発 サイト運営

携帯ブラウザのユーザーエージェント(User-Agent)による機種判別、キャリア判別

更新:

ドコモ、au、ソフトバンクの携帯ブラウザのユーザーエージェントによる機種判別、キャリア判別。

携帯ブラウザのユーザーエージェント

ドコモ、au、ソフトバンクの各携帯電話のブラウザのユーザーエージェントは、パソコンのブラウザと同様にプログラムで取得することができる。
ユーザーエージェントを利用してキャリアの判別や機種判別を行うことができる。
ユーザーエージェントには、ドコモなら「DoCoMo」、au・TU-KAなら「UP.Browser」、ソフトバンクなら「J-PHONE」、「Vodafone」、「SoftBank」という文字列が含まれている。
これらの文字列を調べることで携帯電話のキャリアを判別することができる。
ただし、Vodafoneの一部の機種は、「UP.Browser」という文字列がユーザーエージェントの途中に含まれている。
キャリアを判別する場合は、「ユーザーエージェントの先頭の文字が何で始まるか」で判別した方が良いと思われる。

また、ユーザーエージェントには機種名の文字列が含まれているので、機種の判別を行うことができ、それを用いてページの表示やダウンロードさせるものを機種ごとに分けることができる。


ユーザーエージェントのサンプル

ユーザーエージェントは機種ごとにたくさんあるが、書き方のパターンは以下のどれかに当てはまる。
詳細は各キャリア公式サイトを参照。

ドコモ


/c10や(c100)が付かず、機種名で終わる場合もある。
iモードブラウザ2.0 かどうかを見分けるには、キャッシュが500(c500)であるかを調べるしか方法がない。

au


機種の名称は、デバイスID(デバイスタイプ)と呼ばれる名称で表記されている。
上の例だとSN12やHI21がデバイスID。
デバイスIDと製品名の対応表はキャリアのサイトにある。
デバイスIDを機種名に直したい場合は、変換処理を自作するかライブラリを探す。
機種名をデバイスIDで表現するのは au の仕様。
機種名を直接取得する方法はない。

ソフトバンク

SoftBank 4-2 Series(Jフォン時代のもの)
J-PHONE/3.0/J-SH07
SoftBank 6-5 Series(Jフォン時代のもの)
J-PHONE/4.0/J-SH51/SN12345678901 SH/0001a Profile/MIDP-1.0 Configuration/CLDC-1.0
SoftBank 3G Series(ボーダフォン時代のもの)
Vodafone/1.0/V904SH/SHJ001/SN123456789012345 Browser/VF-NetFront/3.3 Profile/MIDP-2.0 Configuration/CLDC-1.1
SoftBank 3G Series(ソフトバンク時代のもの)
SoftBank/1.0/910T/TJ001/SN123456789012345 Browser/NetFront/3.3 Profile/MIDP-2.0 Configuration/CLDC-1.1

基本的に、J-PHONE(or Vodafone or SoftBank)/ブラウザバージョン/機種名/その他、という構成になっている。


IP帯域とホスト名

パソコンのブラウザには任意のユーザーエージェントを設定できるものがある。
ユーザーエージェントを偽装できるブラウザを使わなくても、telnetを利用したり、アプリケーションを自作することで任意のヘッダ情報を持たせて通信を行うことができる。
ユーザーエージェントを携帯電話と同じものにして携帯サイトへアクセスするユーザーがいることも予想される。
パソコンからのアクセスを防ぐには、ネットワーク機器や.htaccessなどで携帯電話で使用されているIPアドレス帯域からのアクセスのみ許可する設定を行う。
各キャリアが使用しているIPの帯域は、キャリアのサイトで公開されている。

ユーザーエージェントの他にホスト名もキャリアの判別に入れれば、より判別の精度が高くなる。
ただし、DNSの情報が正しいとは限らない。


jp-t などのアドレスは、Jフォン東京(J-PHONE TOKYO)などの名残り。
地域ごとに、Jフォン関西、Jフォン九州などがあった。


キャリア判別のサンプルソース

Perlの例
#ユーザーエージェントのみで判別する場合
$agent = $ENV{'HTTP_USER_AGENT'};
if($agent =~ /^DoCoMo/){

}elsif($agent =~ /^J-PHONE|^Vodafone|^SoftBank/){

}elsif($agent =~ /^UP.Browser|^KDDI/){

}


#ホスト名も判別する場合
$agent = $ENV{'HTTP_USER_AGENT'};
$host = $ENV{'REMOTE_HOST'};
if($agent =~ /^DoCoMo/ && $host =~ /.+docomo\.ne\.jp$/){

}elsif($agent =~ /^J-PHONE|^Vodafone|^SoftBank/ && $host =~ /.+jp-.\.ne\.jp$/){

}elsif($agent =~ /^UP.Browser|^KDDI/ && $host =~ /.+ezweb\.ne\.jp$/){

}

PHPの例
$agent = $_SERVER['HTTP_USER_AGENT']; 
if(ereg("^DoCoMo", $agent)){

}else if(ereg("^J-PHONE|^Vodafone|^SoftBank", $agent)){

}else if(ereg("^UP.Browser|^KDDI", $agent)){

}

Javaの例
String agent = request.getHeader("user-agent"); 
if(agent.indexOf("DoCoMo") == 0){

}else if(agent.indexOf("J-PHONE") == 0 || agent.indexOf("Vodafone") == 0 || agent.indexOf("SoftBank") == 0){

}else if(agent.indexOf("UP.Browser") == 0 || agent.indexOf("KDDI") == 0){

}


機種判別のサンプルソース(機種名を取得する)

Perlの例


PHPの例


Javaの例


はてなブックマーク X Bluesky