技术 · 2013 年 4 月 20 日

[转]访问网站的日本手机种类名&&运营商判别

目前日本的手机运营商主要是三大运营商:docomo、au和softbank。
其实这篇文章是2011年发布的,现在(2013年)网站浏览数据显示,移动客户端占据了将近40%的流量,而早期的非智能机访问仅有5%左右(这其中基本上只见过docomo了),剩下将近55%是普通PC。

在手机web开发中,获取和判定客户终端的类型都是通过分析”user-agent“里的信息来实现的。各运营商在user-agent里包含了的对应文字列如下:
docomo:「DoCoMo」
au・TU-KA:「UP.Browser」
softbank:「J-PHONE」、「Vodafone」、「SoftBank」

通过上面这些,可以判断手机的运营商类型。

注意:有一部分的Vodafone手机的user-agent里耶包含了「UP.Browser」,所以判断字符的时候,应该是判断user-agent是什么开头的。

1.日本各大运营商的user-agent格式

(1)i-mode [NTT DoCoMo(R)]

i-mode对应HTML1.0

DoCoMo/1.0/机器类型名

i-mode对应HTML2.0

DoCoMo/1.0/机器类型名/运营商

i-mode对应HTML3.0

DoCoMo/1.0/机器类型名运营商/机器个体识别

FOMA

DoCoMo/2.0<SP>机器类型名(运营商;机器个体识别)

i-mode对应カーナビシリーズ

DoCoMo/1.0/机器类型名

(2)J-PHONE [J-PHONE(R)]

J-スカイ对应机器类型:

J-PHONE/浏览器版本/机器类型名

ステーション对应机器类型

J-PHONE/浏览器版本/机器类型名

J-スカイ パケット对应机器类型

J-PHONE/浏览器版本/机器类型名/机器个体识别 制造编号/user-agent版本号 Java情报(Profile/ Configuration) Java扩展版本(Ext-Profile)

(3)au [KDDI(R)]

cdmaOne3000,5000 Series

KDDI-机器种类名 浏览器名/浏览器版本 服务器名

cdmaOne200,300,400,1000Series,Digital,TU-KA

浏览器名-机器种类名 服务器名

2.一些user-agent的例子

(1)docomo

type1 (MOVA)

DoCoMo/1.0/N503i/c10

设定了唯一ID时

DoCoMo/1.0/N503i/c10/ser12345678901

type2 (FORM)

DoCoMo/2.0 N901iS(c100;TB;W24H12)

设定了唯一ID时

DoCoMo/2.0 N901iS(c100;TB;W24H12;ser123456789012345;icc12345678901234567890)

P-07A

DoCoMo/2.0 P07A3(c500;TB;W24H15)

也有些是没有/c10或(c100),而直接以机器类型名结束的。

(2)au

旧type

UP.Browser/3.04-SN12 UP.Link/3.4.4

新type

KDDI-HI21 UP.Browser/6.0.2.254 (GUI) MMP/1.1

在user-agent里没有直接包含机器种类名,而是包含了device id,可以在运营商的网站上找到device id和机器种类名的对照。上面的例子中,SN12和HI21就是device id。网上应该有通过device id获取机器种类名的library。

(3)softbank

SoftBank 4-2 Series(JPHONE时代的)

J-PHONE/3.0/J-SH07

SoftBank 6-5 Series(JPHONE时代的)

J-PHONE/4.0/J-SH51/SN12345678901 SH/0001a Profile/MIDP-1.0 Configuration/CLDC-1.0

SoftBank 3G Series(vodafone时代的)

Vodafone/1.0/V904SH/SHJ001/SN123456789012345 Browser/VF-NetFront/3.3 Profile/MIDP-2.0 Configuration/CLDC-1.1

SoftBank 3G Series(softbank时代的)

SoftBank/1.0/910T/TJ001/SN123456789012345 Browser/NetFront/3.3 Profile/MIDP-2.0 Configuration/CLDC-1.1

基本上、user-agent的构成是:J-PHONE(or Vodafone or SoftBank)/浏览器版本/机器种类名/其它

3.限制手机以外(普通电脑)等访问的方法

一是,可以通过user-agent内容来判断,但是http访问的头信息是可以人为模拟的。
二是,通过IP判断(即在服务器上的.htaccess里或者代码里过滤),跟大运营商的IP都有自己的范围,同时,这些范围信息是对外开放的。

各大运营商的IP范围信息参考:http://memorva.jp/memo/mobile/allow_ip.php
伪装手机访问的方法参考:http://memorva.jp/memo/mobile/ua_uid_test.php

4.host名

在判断运营商时,如果加上host的判断,会更加精确。(但是DNS的正确性不能保证)

docomo

docomo.ne.jp

au

ezweb.ne.jp

softbank

jp-d.ne.jp
jp-h.ne.jp
jp-t.ne.jp
jp-c.ne.jp
jp-k.ne.jp
jp-r.ne.jp
jp-n.ne.jp
jp-s.ne.jp
jp-q.ne.jp

5.运营商判别的PHP示例代码(其他java prel等代码可以参考底部原文链接)

$agent = $_SERVER['HTTP_USER_AGENT']; 
if(ereg("^DoCoMo", $agent)){
}else if(ereg("^J-PHONE|^Vodafone|^SoftBank", $agent)){
}else if(ereg("^UP.Browser|^KDDI", $agent)){
}

6.机器类型判别PHP示例代码(取得机器类型名)

docomo

$agent = $_SERVER{'HTTP_USER_AGENT'};
if(strpos($agent, "DoCoMo/1.0") >= 0 && strpos($agent, "/", 11) >= 0){
	$device = substr($agent, 11, (strpos($agent, "/", 11) - 11));
}elsif(strpos($agent, "DoCoMo/2.0") >= 0 && strpos($agent, "(", 11) >= 0){
	$device = substr($agent, 11, (strpos($agent, "(", 11) - 11));
}else{
	$device = substr($agent, 11);
}

au(两种type都能取得)

$agent = $_SERVER{'HTTP_USER_AGENT'};
$device = substr($agent, (strpos($agent, "-") + 1), (strpos($agent, " ") - strpos($agent, "-") - 1));

softbank(只有通过x-jphone-msname的才能取得)

$device = $_SERVER{'HTTP_X_JPHONE_MSNAME'};

转自:http://blog.csdn.net/lian_zhihui1984/article/details/6828510
转自:http://memorva.jp/memo/mobile/http_user_agent.php