日本手机开发之一——运营商判别和手机种类名获取

目前日本的手机运营商主要是三大运营商:docomo、au和softbank。在手机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.运营商判别的示例代码

 (1)perl 

#只通过user-agent判断
$agent = $ENV{'HTTP_USER_AGENT'};
if($agent =~ /^DoCoMo/){

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

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

}


#同时通过host判断
$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$/){

}

 (2)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)){

}

 (3)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){

}

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

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

   au(两种type都能取得,但是如上所述,取到的是device id,需要自己去找对照的机器类型名)     
$agent = $ENV{'HTTP_USER_AGENT'};
$device = substr($agent, (index($agent, "-") + 1), (index($agent, " ") - index($agent, "-") - 1));

     softbank(只有通过x-jphone-msname的机器类型名才能取得)       
$device = $ENV{'HTTP_X_JPHONE_MSNAME'};

  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'};

  Java
    docomo     
String agent = request.getHeader("user-agent");
String device = "";
if(agent.indexOf("DoCoMo/1.0") >= 0 && agent.indexOf("/", 11) >= 0){
	device = agent.substring(11, agent.indexOf("/", 11));
}else if(agent.indexOf("DoCoMo/2.0") >= 0 && agent.indexOf("(", 11) >= 0){
	device = agent.substring(11, agent.indexOf("(", 11));
}else{
	device = agent.substring(11);
}

    au(两种type都能取得)       
String agent = request.getHeader("user-agent");
String device = agent.substring(agent.indexOf("-") + 1, agent.indexOf(" "));

    softbank(只有通过x-jphone-msname的才能取得)       
String device = request.getHeader("x-jphone-msname"); 


转自:http://memorva.jp/memo/mobile/http_user_agent.php


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值