TOP > スクリプト制作メモ > ユーザエージェントを検証

≫ユーザエージェントからわかること

HTTPクライアントであるブラウザは、それぞれ環境変数のHTTP_USER_AGENT(ユーザエージェント)にオリジナルの値を返します。
#----- ユーザエージェントの取得
$HTTP_USER_AGENT = $ENV{'HTTP_USER_AGENT'};
ユーザエージェントには、HTTPクライアント自身の製品や重要な付属製品を識別するためのコメントが含まれています。 ということはつまり、ユーザエージェントの値から、ブラウザが何であるか、ブラウザが動いているOSが何であるか、ブラウザはどこのメーカのものなのかといった情報を取得することができるということです。

ブラウザの代表はマイクロソフトのインターネットエクスプローラと、ネットスケープのナビゲータやコミュニケータです。ほとんどの方はこれらのクライアントソフトを利用していると思います。

しかし、世界にはもっと多くのブラウザが存在するのです。例えば、日本だけを見ても、携帯電話各社でそれぞれ違ったブラウザを搭載しています。さらに、検索エンジンのロボットや、リンクチェッカたちもHTTPクライアントとしてユーザエージェントを返してきます(至極当然なんだけどね)。当サイトで配布しているアクセスログ取得/解析系のスクリプトなどを設置してみるとわかると思いますが、どこの馬の骨だかわからないユーザエージェントが嫌になるほど引っかかってきます。いちいち何者か考えているとノイローゼになるんじゃねーかってくらいかかります。

で、それらをうまく判別できやしないだろうか、というのが当ページの目的です。

≫ユーザエージェントを解析する

ユーザエージェントを解析するには、サーバログを専用のツールを使って解析するのが一般的です。サーバログを見れない環境(ほとんどのレンタルサーバスペースでは見れない)であれば、アクセス解析CGIを設置します。

アクセス解析を設置する際に注意しなければならないのが、ロボットのアクセスはログ取得方式がSSI式でないといけません。よくあるIMGタグでCGIを呼び出す形式のものは、ロボットのアクセスを記録できません。

アクセス解析ツールのログ取得方式などについて詳しくはこちらのぺーじにあります。また、SSI式に対応したアクセス解析CGIはこちらにあります。

≫ユーザエージェントの法則

さて、多くのブラウザが、それぞれてんでバラバラのユーザエージェントを返してきては困ります。そこで、ユーザエージェントの記述には、一定のルールがRFC 2616によって定められてはいます。しかし、実際、そのルールを厳密に守っているものは少なく、また定義もややこしいのでココでは割愛します。とにかく、ユーザエージェントの値には、おおまかなルールがあるということを頭に入れておいて話を進めます。

では、実際にユーザエージェントの値を見てみましょう。

Mozilla/4.0 (compatible; MSIE 6.0; Windows 98)


これはインターネットエクスプローラ6.0のユーザエージェントで、OSはWindows98であることがわかります。

もうひとつ

Mozilla/4.7 [ja] (WinNT; I)


これはネットスケープ4.7のユーザエージェントで、OSはWindowsNT、さらに言語は日本語であることがわかります。

上の2つを比べて、何かお気づきでしょうか。そうです。先頭がどちらもMozillaとなっています。

今でこそインターネットエクスプローラのシェアはネットスケープの比ではありませんが、世に出たのはネットスケープの方が先なのです。したがって、インターネットエクスプローラは、ユーザエージェントで密かに自らをネットスケープであるかのように偽っています。
 と、表現すると言葉が悪いのですが、古くは両ブラウザの元となったMosaicというブラウザに端を発し、ネットスケープ全盛の頃はMozillaを名のらないと蹴られてしまう(閲覧を拒否される)サーバが存在したというのが、両ブラウザ共通のユーザエージェント値Mozillaの秘密です。だから、インターネットエクスプローラは「compatible(互換)」としているわけです。

現状では、インターネットエクスプローラ以外のブラウザでもMozillaを名のるものが多くあります。ここまで語ったからには、ここで止めるわけにはいかないので語り尽くすと、このMozillaの由来は、想像した人も多いと思いますが、Godzilla、怪獣ゴジラからきています。

Mosaic + Godzilla = Mozilla というわけです。

とまあ、うんちくはこれくらいにして、ユーザエージェントを解析する話題に戻します。

つまり、「それぞれのブラウザは、大まかなルール(RFC 2616)には従いつつも、一定と言える(シンプルな手順で判別できる)ほどのルールに従った値をかえすわけではない」ということです。

だから、ユーザエージェントを解析する場合、ある程度の実情把握が必要であり、実情の把握できたものをターゲットに解析していくということになります(とまあ、限ったわけじゃないと思いますが)

従いまして、ここからは作者サイトのログや資料を研究した成果を、まとめてご披露させていただきたいと思います。(まちがっていたら、是非ご指摘を!)

≫もくじ




PCブラウザ系



インターネットエクスプローラ
紹介:言わずと知れたブラウザの巨人。ウィンドウズと共に歩んでおります。
法則:Mozilla/バージョン (compatible; MSIE バージョン; OS名; オマケ)
実例:Mozilla/4.0 (compatible; MSIE 6.0; Windows 98)

備考:WindowsMEの場合、OS名が「Windows 98; Win 9x 4.90;」となるようです。




ネットスケープナビゲータ&コミュニケータ(Geckoエンジン搭載前?)
紹介:ウィンドウズを除けばシェアは高い。
法則:Mozilla/バージョン [言語] (OS名; オマケ;)
実例:Mozilla/4.7 [ja] (WinNT; I)

備考:WindowsMEの場合、OS名が「Windows 98; Win 9x 4.90;」となるようです。詳しくはココ(英語サイト)

ネットスケープ(Geckoエンジン搭載以降?)
紹介:抜本的にリストラクトされた(?)ネットスケープ。ソースも公開されている。
法則:Mozilla/バージョン (*詳細は備考) Gecko/バージョン オマケ
実例:Mozilla/5.001 (windows; U; NT4.0; en-us) Gecko/25250101

備考:(*プラットフォーム; セキュリティ; OS_CPU; 地域; コメント)。カナリ複雑。詳しくはココ




Safari
紹介:超高速動作がうたい文句のMac専用ブラウザ。バージョンアップしたらどうなるか法則は不明。
法則:Mozilla/5.0 (Macintosh; セキュリティ; PPC Mac OS X; 言語) AppleWebKit/51 (like Gecko) Safari/51
実例:
Mozilla/5.0 (Macintosh; U; PPC Mac OS X; ja-jp) AppleWebKit/51 (like Gecko) Safari/51




オペラ
紹介:ノルウェー産ブラウザ。「世界で最も速いブラウザ」らしい。
法則:Opera/バージョン (OS名; セキュリティ; オマケ) [言語]
実例:
Opera/6.0 (Windows 2000; U) [ja]




Lite
紹介:国産軽量ブラウザ。
法則:Lite/バージョン (Trial or Regist) [言語]
実例:
Lite 1.08a (Regist)




iCab
紹介:マック用ブラウザ。軽量。
法則:Mozilla/バージョン (compatible; iCab バージョン; OS名; セキュリティ; PPC)
実例:
Mozilla/4.5 (compatible; iCab 2.5.3; Macintosh; I; PPC)
備考:ここの解説がわかりやすい




OmniWeb(Ver4より前?)
紹介:マック用ブラウザ。OS Xにもいち早く対応し、かなりの高機能を誇っている。
法則:OmniWeb/バージョン コメント
実例:
OmniWeb/3.0.2 OWF/1999C

OmniWeb
(Ver4以降)
法則:
Mozilla/バージョン (compatible; OmniWeb/バージョン; プラットフォーム)
実例:
Mozilla/4.5 (compatible; OmniWeb/4.0.5; Mac_PowerPC)


HotJava
紹介:Sun Microsystemsが開発したWWWブラウザ。Javaで作られている。
法則:HotJava/バージョン/オマケ
実例:
HotJava/1.0.1/JRE1.1.3
備考:日本語化キットはここ

Lynx
紹介:テキストベースのブラウザだが多くのプラットフォームに対応し動作も軽い。
法則:Lynx/バージョン libwww-FM/バージョン オマケ
実例:
Lynx/2.8.3dev.8 libwww-FM/2.14

w3m
紹介:テキストベースのブラウザ。HTMLをテキスト形式に整形するツールとして利用することもできます。
法則:w3m/バージョン-オマケ
実例:
w3m/0.2.1
備考:どうもUA値を偽装できるらしい。

▲もくじへ




携帯電話系

i-mode(NTTDoCoMo)
紹介:言わずと知れたパケット通信によるネット接続。メールやウェブの閲覧が可能
法則:DoCoMo/バージョン/機種名/キャッシュサイズ(kb)/識別情報
実例:
DoCoMo/1.0/N503is/c10
備考:IPアドレス帯域は210.153.84.0/24、210.136.161.0/24(2001/10/1現在)

FOMA(NTTDoCoMo)
紹介:言わずと知れたパケット通信によるネット接続。メールやウェブの閲覧が可能
法則:DoCoMo/2.0 機種名キャッシュ個体識別情報
実例:
DoCoMo/2.0 P2101V(c100)
備考:IPアドレス帯域は203.138.45.0/24(2001/10/1現在)

J-sky(J-PHONE)
紹介:2003/10からはvodafoneブランドに移行予定。
法則:J-PHONE/バージョン/機種名
実例:
J-PHONE/3.0/J-SH05

EZweb(au)
紹介:国際標準モバイルインターネット接続プロトコル「WAP」に対応。i-modeコンテンツも見れる(完全じゃない)
法則:UP.Browser/バージョン-端末ID UP.Link/UP.Linkバージョン
実例:UP.Browser/3.04-TS14 UP.Link/3.4.4
備考:端末IDは、初めの2文字目がメーカーコード、3文字目がキャリアコード(DDI なら"C"、IDOなら"I"、TU-KAなら"T"、cdmaOneは数字)、4文字目がそれぞれのメーカーで順番に付けられている数字となっています。

H"(DDI POCKET)
法則:PDXGW/1.0 (端末表示能力)
実例:PDXGW/1.0 (TX=8;TY=6;GX=96;GY=64;C=G2;G=B2;GI=0)
備考:TX・TY・GX・GY=スクロールせずに表示可能な画像の画素数、C=色表示能力、G=画像ファイルの表示能力、GI=世代識別子。端末表示能力省略の場合は「TX=6;TY=3;GX=72;GY=36;C=G2;G=B2;GI=0」がデフォルト。

ドットi(ASTEL)
法則:ASTEL/バージョン/機種名バージョン/容量/対応メロディ
実例:ASTEL/1.0/J-0511.00/c10/smel

▲もくじへ




組み込み系(ゲーム機/PDA/家電など)

DreamPassport(DreamCast)
紹介:セガのドリームキャスト。
法則:Mozilla/3.0 (DreamPassport/バージョン; オマケ)
実例:Mozilla/3.0 (DreamPassport/3.2)



AVE-Front(TRON)
紹介:アクセス製のブラウザ。ワープロや携帯各社のポケットボード端末に搭載されている。
法則:Mozilla/バージョンN AVE-Front/バージョン (オマケ;)
実例:Mozilla/3.0N AVE-Front/2.5 (BrowserInfoScreen=640x480x256; InputMethod=KEYBOARD; Page=2M; HTML-Level=3.2; Language=ja.SJIS; Category=WDA; CPU=V830; Storage=NO; Product=NTT/PI-2000_1.0;)
備考:オマケ部分に情報が多い。Product=XX;というのが製品名らしい。

NetFront(TRON)

紹介:アクセス製の情報家電向けブラウザ。プレステ2をはじめこれからの家電には主にこれが搭載されるらしい。
法則:Mozilla/バージョン NF/バージョン (オマケ:)
実例:
Mozilla/3.0 NF/2.6 (BrowserInfo Screen=320x240x64K; InputMethod=KEYBOARD; Product=SII/CARA3.0; HTML-Level=HTML3.2; Language=ja.JIS;)
備考:AVE-Frontの後継かと。こちらもProduct=XX;というのが製品名らしい


シャープ製品
紹介:目のつけどころが難しいので(^.^;)、製品ごとに
実例をあげておきます。
○ザウルス
sharp pda browser/1.0[ja](MI-10/1.0)
○書院
sharp wd browser/1.0[ja](MR-1/1.0) AVE-Front/1.0 (BrowserInfo Screen=640x480x256;)
○インターネットTV
sharp tv browser/2.6[ja](PC1/1.0) AVE-Front/1.0 (BrowserInfo Screen=640x480x64K; InputMethod=REMOCON; Page=490K;)
備考:基本的にブラウザエンジンはAVE-Frontみたいですね。



▲もくじへ




ロボット系

Googlebot(google)
紹介:一番ホットなロボット型検索ロボット。被リンク数などからページをランキングする。ヒット率が高い。
法則:Googlebot/バージョン (+http://www.googlebot.com/bot.html)
実例:Googlebot/2.1 (+http://www.googlebot.com/bot.html)
備考:HOSTは「crawl数字.googlebot.com」

google(for i-mode)
紹介:i-modeページ向けコンバータ。
法則:DoCoMo/1.0/P502i/c10 (Google CHTML Proxy/バージョン)
実例:DoCoMo/1.0/P502i/c10 (Google CHTML Proxy/1.0)
備考:ロボットではなくゲートウェイ(プロクシっつーのか?用語がわからんけど)。J-skyやezweb向けもある模様。ezwebだと「オリジナルのユーザエージェント値に『(Google WAP Proxy/1.0)』がつく」らしい。


Googlebot-Image
紹介:Google画像検索のロボット
法則:Googlebot-Image/バージョン (+http://www.googlebot.com/bot.html)
実例:Googlebot-Image/1.0 (+http://www.googlebot.com/bot.html)

Googlebot
紹介:Googleのロボット
法則:Mediapartners-Google/バージョン (+http://www.googlebot.com/bot.html)
実例:Mediapartners-Google/2.1 (+http://www.googlebot.com/bot.html)

Yahoo! Slurp
紹介:Yahoo!の自前ロボ。だけどSlurp。
法則:Mozilla/5.0 (compatible; Yahoo! Slurp; http://help.yahoo.com/help/us/ysearch/slurp)
実例:法則に同じ
備考:209.131.40.132 - - [19/Feb/2004:05:22:22 +0900] "GET /st/ HTTP/1.0" 200 10170 "-" "Mozilla/5.0 (compatible; Yahoo! Slurp; http://help.yahoo.com/help/us/ysearch/slurp)"

Nutch
紹介:オープンソース・ウェブ検索エンジン
実例:NutchCVS/DoCoMo/J-PHONE/KDDI/0.03-dev (Nutch; http://www.nutch.org/docs/en/bot.html; nutch-agent@lists.sourceforge.net)

msnbot
紹介:マイクロソフト傘下の検索エンジンMSNのロボット。
法則:msnbot/バージョン (+http://search.msn.com/msnbot.htm)
実例:msnbot/0.11 (+http://search.msn.com/msnbot.htm)
備考:リクエスト回数がかなり多い。HOSTはjp-scq数字.lycos.co.jp

Lycos_Spider(ライコス)
紹介:エンターテイメント感の強い気がするポータルサイトの検索ロボット。
法則:Lycos_Spider_(T-Rex)
実例:Lycos_Spider_(T-Rex)
備考:リクエスト回数がかなり多い。HOSTはjp-scq数字.lycos.co.jp

Slurp(goo)
紹介:NTTが運営するポータルサイトの検索ロボット。
法則:Mozilla/バージョン (Slurp/cat; slurp@inktomi.com; http://www.inktomi.com/slurp.html)
実例:Mozilla/5.0 (Slurp/cat; slurp@inktomi.com; http://www.inktomi.com/slurp.html)
備考:含まれるURLによると、このエンジンを使っているのはどうやらgooだけではないらしい。バージョンによって法則ががらりと変わるようだ。HOSTが***.goo.ne.jpだったらgooからのSlurp。

moget(もぎたてgoo)
紹介:2001年12月8日に来訪確認しているが、サイト自体はなくなってるのかな?謎
法則:moget/バージョン (moget@goo.ne.jp)
実例:moget/2.1 (moget@goo.ne.jp)

eva007.goo.ne.jp - - [03/Nov/2003:09:55:48 +0900] "GET /robots.txt HTTP/1.1" 200 121 "-" "DoCoMo/1.0/N503iS/c10"
これはなんだろう?

Sidewinder(infoseek)
紹介:ポータルサイトinfoseekのロボット。
法則:InfoSeek Sidewinder/バージョン
実例:InfoSeek Sidewinder/0.9
備考:HOSTはspider数字.infoseek.co.jp

ArchitextSpider(Excite)
紹介:ポータルサイトエキサイトのロボット。サイト的には検索より出会いのイメージが強いなー。
法則:ArchitextSpider
実例:ArchitextSpider

Cowbot(Naver)
紹介:一応ポータルサイトだと思うNaverのロボット。robots.txtを読まないし拒否してもやってくると専らの噂。
法則:Cowbot-バージョン (NHN Corp. / 数字と+-の並び / nhnbot@naver.com)
実例:Cowbot-0.1 (NHN Corp. / +82-2-3011-1954 / nhnbot@naver.com)

dloader
紹介:これもNaverのロボット。Cowbot同様の振る舞い。
法則:dloader(NaverRobot)/バージョン
実例:dloader(NaverRobot)/1.5

minibot
紹介:これもNaverのロボット。
法則:minibot(NaverRobot)/バージョン
実例:minibot(NaverRobot)/1.0

DiaGem
紹介:三菱電機(株) 情報通信システム開発センターさんの研究用Web収集ロボットだそうです。
法則:DiaGem/バージョン (crawleradmin@icc.melco.co.jp)
実例:DiaGem/1.0 (crawleradmin@icc.melco.co.jp)

Voyager
紹介:女性向けポータルサイトLisaのロボット。しかしサイトは休止宣言…。
法則:Voyager/バージョン
実例:Voyager/0.0
備考:HOSTは「ixf.lisa.co.jp」

Looksmart
紹介:検索エンジンへの登録サービス(?)Looksmartのロボット。
法則:Mozilla/4.0 compatible ZyBorg/バージョン Dead Link Checker バージョン (wn.zyborg@looksmart.net; http://www.WISEnutbot.com)
実例:Mozilla/4.0 compatible ZyBorg/1.0 Dead Link Checker Beta-d01 (wn.zyborg@looksmart.net; http://www.WISEnutbot.com)

Tkensaku
紹介:まだベータ版の検索エンジンですが。よくしつけられています。
法則:Tkensaku/バージョン(http://www.tkensaku.com/q.html)
実例:Tkensaku/0.8(http://www.tkensaku.com/q.html)


*その他、ロボットはブラウジング用のエージェントと比較にならないほど数が多いので日本国内の主要なもの以外は割愛。気が向いたら増やしていきます。ちなみに、ロボットは同じ名前でも別のロボットだったりしますので、IPアドレスやHOSTとあわせて出所の確認をしたほうがいいです。

▲もくじへ




ダウンロード/リンクチェッカ系



まとめてご紹介!
紹介:ダウンローダはそのままHPの内容をローカルにダウンロードしてオフラインで閲覧できるようにするツール。リンクチェッカはブラウザのブックマークやサイトのリンク切れをチェックしてくれるツール。アンテナはサイトの更新をチェックするもの。さらにプリフェッチャというツールは、推測ですがいわゆる先読みツールのことであろうと思われます。
法則:ツール名/バージョン オマケ
実例:WWWC/0.25 (Win95)
備考:とにかく名称で列挙すると、WWWC, WWWcp, GetHTMLW, Wget, WebFetch, WebAuto, 朝日奈アンテナなど。詳細はリンクを辿ってください。

▲もくじへ




その他

L-mode
紹介:i-modeにつづけとばかりに登場したNTTのネット端末。
法則:L-mode//バージョン////
実例:L-mode//1.0////

i-modeインターネットカーナビ
紹介:車に乗ってまでアクセスしてもらえるなんて!それ相応のサイトならアレだけど。
法則:DoCoMo/バージョン/ex_navi_i-modeバージョン_ブラウザ識別子
実例:DoCoMo/1.0/ex_navi_2.0_AA5678


 

▲もくじへ

≫まとめ

どのブラウザもそうなんですが、世に登場してから開発が安定してくるまでは、ユーザエージェントの値も不安定であることが多いです。正式発表段階でいきなりそれまでと全く違ったユーザエージェントを返すようになったりすることもあります。

また、ブラウザの開発自体リアルタイムであることも多いので、バージョン名以外に項目の並び自体が変わったりと結構変更があります。もういたちごっこ状態なんですが、仕方のないことですね。

ここで紹介している情報をもとに、HTTP_USER_AGENT からクライアントを判別するライブラリ jua.pl もあります。フリーなのでこちらの利用規定内でご自由にどうぞ。結構使い勝手いいと思います(多少重いですが)。

それから、ユーザエージェント値は偽ることができます。実際はインタネットエクスプローラなのにネットスケープのユーザエージェントを返したりといったことが可能なのです。ユーザエージェントを別のものに設定することを「偽装」と言ったりします。

偽装行為を行っているのはインターネット全体ではごく一部ですので、ある一定数以上のPV(ヒット数)があるサイトにとっては誤差の範囲だと思います。あまり気にしないようにしましょう。中には気の利いた偽装で楽しませてくれるものもあります。

なにはともあれ、RFC 2616 は何のためなんだ!というのがこのコーナーのオチです。以上。

 ■参考サイト
 ▼User-Agentについてのたわごと▼
 ロボット対策


TOP > スクリプト制作メモ > ユーザエージェントを検証
(C) bayashi.net