WEBサイトにアクセスしてくる利用者の情報をUserAgentから調べることが出来るが、どんな情報がわかるか調べてみた。より詳しい情報は参考に使ったサイトを参照で。
はじめに
GoogleがChromeにおいてユーザーエージェント文字列を段階的に廃止することを発表しています。
段階的にUserAgentが削除版UA文字列に置き換わっていきChrome 113で完全に削減版の UA 文字列となってしまいます。
削除版のUA文字列は以下の通りです。
User-Agent Reduction
# Desktop (user on Windows 8.1, for example)
# 旧 UA文字列
Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.1234.56 Safari/537.36
# 最終削除版 UA文字列
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.0.0 Safari/537.36
# Mobile (user on Samsung Galaxy, for example)
# 旧 UA文字列
Mozilla/5.0 (Linux; Android 9; SM-A205U) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.1234.56 Mobile Safari/537.36
# 最終削除版 UA文字列
Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.0.0 Mobile Safari/537.36
# Tablet (user on Samsung Galaxy, for example)
# 旧 UA文字列
Mozilla/5.0 (Linux; Android 9; SM-T810) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.1234.56 Safari/537.36
# 最終削除版 UA文字列
Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.0.0 Safari/537.36
GoogleがChromeバージョン100のβ版を公開 ユーザーエージェントからの移行が始まる
Chrome の User-Agent 文字列削減のオリジン トライアルと今後の計画について
UserAgentについて
UserAgent(ユーザーエージェント)とは
UserAgentとは主にWebサイトにアクセスするためのプログラムのことをいう。
Webサイトにアクセスする際、HTTPヘッダーに送信するソフトウェアやOS等の情報をUserAgentとして送信する。
サイトの利用者から正しく閲覧できないという問合せで、使っているブラウザが「Yahoo」と言われて、検索エンジンの間違いだと思い込んでいたら、Android版のYahoo!ブラウザーのことだったりすることもあるので、UserAgentからブラウザ等を判断することが役に立つ。
自分のブラウザのUserAgentを調べるのに使ったサイト
色々なUserAgent情報が載っているサイト
- UA list: browsers, email clients
- WhatIsMyBrowser.com Browse our User agent Catalog
- fragment database ユーザーエージェント一覧(iPhone、iPad、Mac)
UserAgentの記述ルール
User-Agent: <product> / <product-version> <comment>
WEBブラウザの一般的な書式:
User-Agent: Mozilla/<version> (<system-information>) <platform> (<platform-details>) <extensions>
UserAgentの書き方は厳格に定義されているようではないようだが、
大体のブラウザが上記のルールにしたがっている感じのようだ。
RFC 1945には以下の記載がある。
User-Agent = "User-Agent" ":" 1*( product | comment )
このうちproduct は、section-3.7に以下の記載があり、
product = token ["/" product-version]
CERN-LineMode/2.15
の用に product名の後にスラッシュをいれてバージョンを記載するようになっている。
あとはuser-agent strings | archive.mozilla.orgと、User-Agent - HTTP | MDNに記載がある。
アプリケーション固有の値は次々に出てくると思うので、UserAgentから情報収集、判定するプログラムを作る場合は、アプリケーションごとに判定が必要そう。
Mozilla 4 or Mozilla 5
多くのブラウザのUserAgentの先頭には下記の通りMoziila/4 or 5のバージョンが記載されている。
Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; NP06; rv:11.0) like Gecko
これは、元々 Mozilla 互換のブラウザという意味のようだ。
WikipediaのMozillaによると
最初、ネットスケープブラウザが、Mozilla/バージョン名
とつけて、
いくつかのサイトが「Mozilla」を検出したブラウザのみ動作する仕組みにしたおかげで、
競合ブラウザ(IE等)も「Mozilla」とつけるように偽装し始めた経緯が今まで残っているせいらしい。
ユーザー エージェント文字列を理解するによると「歴史的な経緯から、Internet Explorer は自身を Mozilla 4.0 ブラウザとして識別します。」とのこと。IE8以前がMozilla/4、IE 9以降がMozilla/5となっている。
Mozilla 4.0 vs. 5.0でv4がNetscape Communicator、v5が GeckoベースのFirefox, Netscape 6/7という情報もあった。
Mozilla 4と5しかないのかといえば、Netscape6より前の物についてはMozilla/4.5やMozilla/3.01などが存在する。2000年リリースのNetscape6以降はMozilla/5になる。
userAgent(ユーザーエージェント一覧)
また、2011年リリースのIE9からMozilla/5に変わっている。これは、Wikipediaによると Internet Explorer 以外のウェブ ブラウザーとの相互運用性が向上したことを示すため Mozilla/4.0 から Mozilla/5.0 に変更されたらしい。
Internet Explorer 9 - Wikipedia
Mozilla4、5の数字自体にはあまり意味がなく、Netscapeに他のブラウザが合わせていた経緯があって最終的に5に落ち着いたというだけのような気がする。
Gecko
Firefox(Mozilla)関連のブラウザには「Gecko」の文字列が入っているが、IEなど他のブラウザにも「like Gecko」といった文字列が入っている。
Microsoft Edgeのブラウザなんて、「Gecko」も「Chrome」も「Safari」も入っている。
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.135 Safari/537.36 Edge/12.<OS build number>
ブラウザ戦争とUserAgent
どうして、UserAgentにMozillaなどの文字がつくようになったかの歴史が書かれている記事があった。
世界中を巻き込んだブラウザ戦争と「ユーザーエージェント文字列」をめぐる複雑怪奇な変遷とは?
あとその元記事も
History of the browser user-agent string
上記のサイトに書かれていることを順番にいうと、下記のリストの通り。
History of the user-agent stringも一部参考にした。
できごと | user-agent string |
---|---|
「NCSA Mosaic」のブラウザが出来る。 | NCSA_Mosaic/2.0 (Windows 3.1) |
「Mosaic Killer」の略称を持つ「Mozilla」というブラウザが登場する。 | |
「Mosaic」から異議申し立てがあったため、「Mozilla」を「Netscape」に改める。 | Mozilla/1.0 (Win3.1) |
「Netscape」はフレームに対応していた為、フレーム対応のサイトが「Netscape」のみに制限するようになる。 | |
「Internet Explorer」が「Netscape」に偽装するようになる。 | Mozilla/1.22 (compatible; MSIE 2.0; Windows 95) |
「Netscape」は「Mozilla」に生まれ変わり、「Gecko」のレンダリングエンジンを採用する。 | Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:1.1) Gecko/20020826 |
「Mozilla」は「Firefox」に形を変える。
「Firefox」の人気が出て、2008年時点のヨーロッパだとシェア20%を超える |
Mozilla/5.0 (Windows; U; Windows NT 5.1; sv-SE; rv:1.7.5) Gecko/20041108 Firefox/1.0 |
「Firefox」以外の「Gecko」を採用するブラウザも「Mozilla」を付けるようになる。 | Mozilla/5.0 (Macintosh; U; PPC Mac OS X Mach-O; en-US; rv:1.7.2) Gecko/20040825 Camino/0.8.1
Mozilla/5.0 (Windows; U; Windows NT 5.1; de; rv:1.8.1.8) Gecko/20071008 SeaMonkey/1.0 |
ブラウザ「Konqueror(KHTML)」が「Mozilla Firefox(Gecko)」を偽装し始める。 | Mozilla/5.0 (compatible; Konqueror/3.2; FreeBSD) (KHTML, like Gecko) |
Appleが「Konqueror(KHTML)」をベースに「WebKit」のレンダリングエンジンを作成する。
Appleのブラウザ「Safari」は「WebKit」を採用するが、「KHTML」の記載は残る。 |
Mozilla/5.0 (Macintosh; U; PPC Mac OS X; de-de) AppleWebKit/85.7 (KHTML, like Gecko) Safari/85.5 |
Operaはユーザーが任意でなりすませるようにした |
Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; en) Opera 9.51
Mozilla/5.0 (Windows NT 6.0; U; en; rv:1.8.1) Gecko/20061208 Firefox/2.0.0 Opera 9.51, or Opera/9.51 (Windows NT 5.1; U; en) |
「Internet Explorer」が「FireFox」を偽装するようになる。 | Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0) |
「Google Chrome」が「Safari」の「WebKit」を偽装する。 | Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/525.13 (KHTML, like Gecko) Chrome/0.2.149.27 Safari/525.13 |
とややこしいことになっている。
それに今は、「Microsoft Edge」が「Chrome」を偽装するが追加になってくる。
ブラウザの偽装だけでもややこしいのに、「WindowsPhone」のようにOSまで偽装して「Windows」も「Android」も両方入ってしまって、
「Gecko」、「Chrome」、「Safari」、「Edge」も入っているケースが下記の通りになる。
Mozilla/5.0 (Windows Phone 10.0; Android 6.0.1; Microsoft; Lumia 640 LTE) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.79 Mobile Safari/537.36 Edge/14.14390
※ 偽装とは記事に書かれていたが、単にforkして引き継がれているだけの場合もありえる。UserAgent文字列が成り済まし、もしくは引き継がれるようになったポイントは以下の通り。
- NetscapeからFireFoxに引き継がれる際に
Mozilla
の文字列も引き継がれた。 - Internet Explorerが
Mozilla
やlike Gecko
などの文字列をつけ始める。 - Konquerorも
Mozilla
やlike Gecko
などの文字列をつけ始める。 - KonquerorをForkしてSafari(Webkit)が出来る際に
KHTML
などの文字列も引き継がれる。 - WebKitをGoogle Chromeが採用して
AppleWebKit
やSafari
など文字列がそのまま引き継がれる。 - ChromeがWebKitからBlinkになっても
AppleWebKit
などの文字列は引き継がれる。 - Chromiumベースに作られたブラウザはさらに
Chrome
の文字列も引き継がれていく。
OS別のUserAgent
PC
Windows
WindowsのバージョンはWindows NT 6.1
の様なWindows NT系のバージョンで表示される。
Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; WOW64; Trident/6.0)
- Wiki Windows NT系より抜粋
Serverかどうかの区別はできなそうだ。
NT Ver. | プロダクト名 |
---|---|
NT 5.1 | Windows XP |
NT 5.2 | Windows XP (64ビット)/Windows Server 2003 |
NT 6.0 | Windows Vista/Windows Server 2008 |
NT 6.1 | Windows 7/Windows Server 2008 R2 |
NT 6.2 | Windows 8/Windows Server 2012 |
NT 6.3 | Windows 8.1/Windows Server 2012 R2 |
NT 10.0 | Windows 10/Windows Server 2016、2019 |
OSのバージョンの表示がFirefoxの場合「10.11」と、その他の場合「10_11」と表記が異なるので注意。
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.106 Safari/537.36
Mozilla/5.0 (Macintosh; Intel Mac OS X 10.11; rv:43.0) Gecko/20100101 Firefox/43.0
バージョン | コードネーム |
---|---|
10.5 | Leopard |
10.6 | Snow Leopard |
10.7 | Lion |
10.8 | Mountain Lion |
10.9 | Mavericks |
10.10 | Yosemite |
10.11 | El Capitan |
10.12 | Sierra |
10.13 | High Sierra |
10.14 | Mojave |
10.15 | Catalina |
11 | Big Sur |
各バージョンについての詳細はWikipediaで
Linux
64bitの場合「x86_64」が32bitの場合「i686」、x86_64 環境の i686 Linux デスクトップの場合は、「i686 on x86_64」が入る。
Androidの場合も「Linux」文字列が入るので、「x86_64」、「i686」の有無で判定するか「Android」を除くの条件がいる?
「X11」はGUI環境を提供している「X Window System」のことだと思われる。
「armv7l」のようについている場合は、ARM系CPUを使用していると思われる。Chromecastなど。
Mozilla/5.0 (X11; Linux x86_64; rv:10.0) Gecko/20100101 Firefox/10.0
Mozilla/5.0 (X11; Linux armv7l) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.0 Safari/537.36 CrKey/1.27.96538
Chrome OSの場合、CrOSが含まれる。
Mozilla/5.0 (X11; CrOS x86_64 7520.63.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.106 Safari/537.36
OSのディストリビューションの名前が入る場合が多い。「Mint」、「Ubuntu」など
# Ubuntu
Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0
# Mint Linux
Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.1.1) Gecko/20090716 Linux Mint/7 (Gloria) Firefox/3.5.1
# Fedora
Mozilla/5.0 (X11; U; Linux i686; fr; rv:1.9.0.10) Gecko/2009042708 Fedora/3.0.10-1.fc10 Firefox/3.0.10
# Gentoo
Mozilla/5.0 (X11; U; Linux x86_64; de; rv:1.9.0.11) Gecko/2009070611 Gentoo Firefox/3.0.11
# Arch Linux
Mozilla/5.0 (X11; Arch Linux; Linux x86_64; rv:55.0) Gecko/20100101 Firefox/55.0
その他
BSD系OS
# FreeBSD
Mozilla/5.0 (X11; FreeBSD amd64; rv:41.0) Gecko/20100101 Firefox/41.0
# OpenBSD
Mozilla/5.0 (X11; U; OpenBSD amd64; en-US; rv:1.9.0.1) Gecko/2008081402 Firefox/3.0.1
# NetBSD
Mozilla/5.0 (X11; NetBSD amd64; rv:16.0) Gecko/20121102 Firefox/16.0
ゲーム機 (Wii/PS4/PSVita/Switch/3DS/XBox)
# Wii
Mozilla/5.0 (Nintendo WiiU) AppleWebKit/536.28
(KHTML, like Gecko) NX/*** NintendoBrowser/***.US
# PlayStation 4
Mozilla/5.0 (PlayStation 4 1.52) AppleWebKit/536.26 (KHTML, like Gecko)
# PlayStation 5
Mozilla/5.0 (PlayStation 5/SmartTV) AppleWebKit/605.1.15 (KHTML, like Gecko)
Mozilla/5.0 (PlayStation 5 3.03/SmartTV) AppleWebKit/605.1.15 (KHTML, like Gecko)
# PS Vita
Mozilla/5.0 (PlayStation Vita 1.50) AppleWebKit/531.22.8 (KHTML, like Gecko) Silk/3.2
# Nintendo Switch
Mozilla/5.0 (Nintendo Switch; ShareApplet) AppleWebKit/601.6 (KHTML, like Gecko) NF/4.0.0.5.9 NintendoBrowser/5.1.0.13341
# Comparable to the Wii U browser
Mozilla/5.0 (Nintendo WiiU) AppleWebKit/536.30 (KHTML, like Gecko) NX/3.0.4.2.11 NintendoBrowser/4.3.0.11224.US
# 3DS
Mozilla/5.0 (New Nintendo 3DS like iPhone) AppleWebKit/536.30 (KHTML, like Gecko) NX/3.0.0.5.20 Mobile NintendoBrowser/1.8.10156.US
# XBox One
Mozilla/5.0 (Windows NT 10.0; Win64; x64; Xbox; Xbox One) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2486.0 Safari/537.36 Edge/13.10553
- PlayStation
- User Agent Strings of Playstation 5
- Nintendo Switch
- User-Agent of Microsoft Edge on Xbox One with Windows 10
Oculus Go
Mozilla/5.0 (Linux; Android 7.1.1; Pacific Build/N9F27L)AppleWebKit/537.36 (KHTML, like Gecko) OculusBrowser/4.0.0.17 SamsungBrowser/4.0 Chrome/61.0.3163.109 Mobile VR Safari/537.36
Amazon Fire TV
# Android WebView (android.webkit.WebView)
Mozilla/5.0 (Linux; U; Android 4.2.2; en-us; AFTB Build/JDQ39) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30
# Amazon WebView (com.amazon.android.webkit.AmazonWebView)
Mozilla/5.0 (Linux; Android 4.2.2; AFTB Build/JDQ39) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.173 Mobile Safari/537.22
# Amazon ウェブアプリプラットフォーム
Mozilla/5.0 (Linux; Android 4.2.2; AFTB Build/JDQ39) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.173 Mobile Safari/537.22 cordova-amazon-fireos/3.4.0 AmazonWebAppPlatform/3.4.0;2.0
開発者向けのページには「アプリやウェブページは、ユーザーエージェント文字列を読み取ることでFire TVを検出し、それぞれに応じたユーザーエクスペリエンスを提供できます。」と書かれているので、Fire TVを検出してもらうためにユーザーエージェント文字列の指定がある事がわかる。
Apple TV
AppleTV6,2/11.1
AppleTV3,1/6.0.1 (10A831)
スマホ
iPhone
iOSのバージョンによる識別になるので、iPhone 5か6かどうかの区別は画面サイズも合わせて比較が必要かも。
「iPhone」の文字列が入っていて、OSのバージョンが「OS 7_0_4」のように含まれる。
iPhone6以降は画面サイズによる違いもなくなるのでiPhone6とiPhoneXを区別することは出来ない。
Mozilla /5.0 (iPhone; CPU iPhone OS 9_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13B5110e Safari/601.1
iOS版Chromeを区別したい場合は、「CriOS」があるかどうかで判定する。
Mozilla/5.0 (iPhone; U; CPU iPhone OS 5_1_1 like Mac OS X; en) AppleWebKit/534.46.0 (KHTML, like Gecko) CriOS/19.0.1084.60 Mobile/9B206 Safari/7534.48.3
- [inazumatv.com iOS Chrome を判別したい]
(http://www.inazumatv.com/contents/archives/9875) - [Chrome User Agent Strings]
(https://developer.chrome.com/multidevice/user-agent)
PC版サイトを見るときに使用するUserAgentもある。
# Safari デスクトップ用サイトを表示
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/10.0 Safari/602.1.31
iPhone、iPadだとMobile/15E148
のように番号がついているが、
これはビルド番号(Build Number)
で、iOSのバージョン毎に決まっているらしい。
- iOS version history
- How to Find the Build Number of Mac OS X on a Mac
- OS X & macOS Build Numbers/Versions
Android
[Android のユーザーエージェントの検出について]
(http://googlewebmastercentral-ja.blogspot.jp/2011/05/android.html)
によると「Android」と「Mobile」があると、Android版スマホと判定できるようだ。
タブレットなどは「Android」しかない。
Mozilla/5.0 (Linux; U; Android 2.2.1; en-us; Nexus One Build/FRG83) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1
Androidのバージョン番号も出力される。例: Android 2.2.1
バージョン | コードネーム |
---|---|
1.5 | Cupcake |
1.6 | Donut |
2.0/2.1 | Eclair |
2.2 | Froyo |
2.3/2.4 | Gingerbread |
3.0/3.1/3.2 | Honeycomb |
4.0 | Ice Cream Sandwich |
4.1/4.2/4.3 | Jelly Bean |
4.4 | KitKat |
5.0 | Lollipop |
6.0 | Marshmallow |
7.0-7.1 | Nougat |
8.0-8.1 | Oreo |
9.0 | Pie |
詳細はWikipediaで
機種によってデバイス名が付与される。例:Nexus One
Android ChromeのPC版サイトを見るを指定した場合のUserAgentもある
Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.105 Safari/537.36
Windows Phone
Windows Phoneの場合は、「Windows Phone」が付与される。「Android」も入っているのがややこしい。
Mozilla/5.0 (Windows Phone 10.0; Android 4.2.1; DEVICE INFO) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.135 Mobile Safari/537.36 Edge/12.<OS build number>
- [Microsoft ユーザー エージェント文字列の変更]
(https://msdn.microsoft.com/ja-jp/library/hh869301(v=vs.85).aspx)
Windows Phone 8.1だとIE 11、Windows Phone 10の場合はEdgeが入るようだ
Mozilla/5.0 (Mobile; Windows Phone 8.1; Android 4.0; ARM; Trident/7.0; Touch; rv:11.0; IEMobile/11.0; NOKIA; Lumia 1320) like iPhone OS 7_0_3 Mac OS X AppleWebKit/537 (KHTML, like Gecko) Mobile Safari/537
- [しばやん雑記 Windows Phone 8.1 Update で Internet Explorer 11 の User-Agent が大きく変わっていた件]
(http://blog.shibayan.jp/entry/20140805/1407230070)
Firefox OS
Firefox OSの場合は、「Mobile」、「Gecko」、「Firefox」が出力されるが、Androidと区別するには「Android」が含まれないという条件を入れる必要があるか。
Mozilla/5.0 (Mobile; LGL25; rv:32.0) Gecko/32.0 Firefox/32.0
Firefox OSはテレビでも使われているがそのときはMobileは付かない。Viera
などが付く。
Mozilla/5.0 (FreeBSD; Viera; rv:34.0) Gecko/20100101 Firefox/34.0
- [MDN Gecko ユーザエージェント文字列リファレンス]
(https://developer.mozilla.org/ja/docs/Gecko_user_agent_string_reference)
BlackBerry
BlackBerryの場合は時期によっていくつかのパターンがある。
なお、2018年発売のBlackBerry EvolveからはAndroid搭載になっているそうだ。
Mozilla/5.0 (BB10; <Device Model>) AppleWebKit/<WebKit Version> (KHTML, like Gecko) Version/<BB Version #> Mobile Safari/<WebKit Version>
Mozilla/5.0 (BlackBerry; U; BlackBerry 9320; en-GB) AppleWebKit/534.11+ (KHTML, like Gecko) Version/7.1.0.398 Mobile Safari/534.11+
Mozilla/5.0 (Linux; Android 8.1.0; BBF100-6 Build/OPM1.171019.019) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.158 Mobile Safari/537.36
- [The BlackBerry 10 User Agent String Has Arrived!]
(http://devblog.blackberry.com/2012/08/blackberry-10-user-agent-string/)
タブレット
iPad
iPad
の文字以外はiPhoneとほぼ同じ。iPad、iPad miniとの区別はUserAgentだけでは判断できないと思われる、
Mozilla/5.0 (iPad; CPU OS 10_0_1 like Mac OS X) AppleWebKit/602.1.50 (KHTML, like Gecko) Version/10.0 Mobile/14A403 Safari/602.1
Androidタブレット
Android
があってMobile
が入っていない。
Galaxy TAB P1000などのようにタブレットと言われているがMobile
が入るケースもある。
Mozilla/5.0 (Linux; Android 5.0.2; SM-T530 Build/LRX22G) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.83 Safari/537.36
Kindle Fire OS
Kindle Fire OSはAndroidベースのタブレットなので、AndroidがUserAgentに付いている。
Kindleかどうかは、 Silk
かKindle
がの文字列があるかで判定できるか。Mobile
の文字列が付いているが、タブレットなので、タブレットかどうかの区別をしたい場合は、Silk
かKindle
の判定を優先するか。
Mozilla/5.0 (Linux; U; Android 2.3.4; en-us; Kindle Fire Build/GINGERBREAD) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1
Mozilla/5.0 (Linux; U; Android 2.3.4; en-us; Silk/1.0.146.3-Gen4_12000410) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1 Silk-Accelerated=true
Windowsタブレット
WindowsタブレットはノートPCとUserAgentからは区別が付きにくい。
タッチ対応の場合はTouch
が入っている。またARM系CPUを採用していたらタブレットと判断することが出来ないかという話もあったが、機能面でもWindowsタブレットとタッチ対応ノートPCは似通っているので区別する必要性自体が無いかもしれない。Tablet PC x.0
が入るケースがあるが、これはノートPCでも入る場合があるようだ。
Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; Touch; rv:11.0) like Gecko
Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; ARM; Trident/6.0; Touch)
Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; .NET4.0E; .NET4.0C; .NET CLR 3.5.30729; .NET CLR 2.0.50727; .NET CLR 3.0.30729; Tablet PC 2.0; GWX:QUALIFIED; rv:11.0) like Gecko
フィーチャーフォン
携帯電話、ガラパゴスケータイ、ガラケーと呼ばれていたもの。
docomo
docomoは以下の通り「DoCoMo」が先頭に入っている。
DoCoMo/2.0 F2051(c100;TB;serXXXXXXXXXXXXXXX;iccxxxxxxxxxxxxxxxxxxxx)
- [docomo ユーザエージェント] (https://www.nttdocomo.co.jp/service/developer/make/content/browser/html/useragent/)
au
AUは以下の通り先頭に「KDDI」が入っている。
KDDI-[機種名] UP.Browser/[ブラウザバージョン] (GUI) [サーバ名]/[サーババージョン]
- [【EZweb 全般】EZweb コンテンツ制作ガイド PDF]
(http://www.au.kddi.com/ezfactory/web/pdf/contents_guide.pdf)
SoftBank
SoftBankは以下の通り先頭に「Vodafone」か「SoftBank」が入っている。
Vodafone/1.0/V904SH/SHJ001/SN Browser/VF-NetFront/3.3 Profile/MIDP-2.0 Configuration/CLDC-1.1
SoftBank/1.0/910T/TJ001/SN Browser/NetFront/3.3 Profile/MIDP-2.0 Configuration/CLDC-1.1
- [SoftBank WEB & NETWORK ユーザエージェント]
(http://creation.mb.softbank.jp/mc/tech/tech_web/web_useragent.html)
ブラウザ別のUserAgent
Internet Explorer
IE 10以前の場合は、「MSIE」の右側のバージョン表示で判定する。
Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; Win64; x64; Trident/6.0)
IE 11から「MSIE」が入らなくなる。「Trident/7.0」で判定するか。
Mozilla/5.0 (Windows NT 6.3; Win64; x64; Trident/7.0; rv:11.0) like Gecko
互換表示の場合、MSIE x.0 と Trident/x.0 が同時に存在する。
ノートPCの場合、Tablet PC x.0 が存在する。
タッチ対応の場合、Touch が存在する。
参考
IE の UserAgent まとめ (2)
「WOW64」が入っている場合は、64 ビット プロセッサ上で 32 ビット バージョンの Internet Explorer が動いているとかわかる。
参考
ユーザー エージェント文字列を理解する
「.NET Framework」 がインストールされている場合、 ".NET CLR" およびバージョン番号が UserAgent 文字列に追加される。.NET CLR 3.0.
とある場合は、.NET Framework 3.0が入っている。
Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 1.1.4322; InfoPath.1; .NET CLR 2.0.50727; .NET CLR 3.0.04425.00)
参考
.NET Framework 3.0 がインストールされているかどうかを確認する
Microsoft Edge
Edgeが入っているので判定。「Chrome」、「Safari」、「Gecko」も入っているので注意。
UserAgentに出力されるEdgeのバージョンはEdge本体ではなく、EdgeHTMLのバージョン。
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.135 Safari/537.36 Edge/12.<OS build number>
ChromiumベースのMicrosoft Edge(MSEdge)
「Chromium」ベースで再構築となるMicrosoft Edge(MSEdge)は従来のUserAgentにあった「Edge」では無く、「Edg」となる。
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.48 Safari/537.36 Edg/74.1.96.24
ChromiumベースのEdgeのCanary ChannelのmacOS版も出ている。
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3794.0 Safari/537.36 Edg/76.0.161.0
Chrome
Microsoft EdgeやOperaにも「Chrome」が入っているので「Chrome」があるだけで判定出来ない。
Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.99 Safari/537.36
iOS版ChromeのエンジンははBlinkではなく、SafariのWebkitと同じなので実質Safari。
ChromeもChromiumもChromeCanaryもUserAgentは同じ、バージョンが違うだけ。
ChromeのバージョンはMAJOR.MINOR.BUILD.PATCH形式。2番目のMINORバージョンは常に0で初期のバージョン以外は使われていないぽい。
Firefox
「rv:geckoversion」はGecko のリリースバージョン。
「Firefox/firefoxversion」の形式でバージョンが入っている。
Geckoの右側の「20100101」は固定文字列
Mozilla/5.0 (platform; rv:geckoversion) Gecko/20100101 Firefox/firefoxversion
- [MDN Gecko ユーザエージェント文字列リファレンス]
(https://developer.mozilla.org/ja/docs/Gecko_user_agent_string_reference)
Safari
Microsoft EdgeやChromeにも「Safari」が入っているので「Safari」があるだけで判定出来ない。
Version/Safariバージョン
Safari/WebKitバージョン
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/600.8.9 (KHTML, like Gecko) Version/8.0.8 Safari/600.8.9
Opera
バージョン15以降からChroniumベースのブラウザに変わっている。他にもOperaMini、OperaTouchなどがある。
Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.85 Safari/537.36 OPR/32.0.1948.25
# Chrominumになる前の古い形式
Opera/9.80 (Windows NT 6.1; WOW64) Presto/2.12.388 Version/12.18
Vivaldi
Operaの元CEOなどにより開発されたChrominumベースのブラウザ。日本人の利用が多い。
Vivaldi 2.10から、Vivaldi
の文字列があることで正しく表示されないウェブサイトがあるためVivaldi
の文字列が追加されなくなり、Chromeと同じUserAgentになった。
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.88 Safari/537.36 Vivaldi/2.4.1488.36
# Vivaldi 2.10
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.94 Safari/537.36
SRware Iron
ドイツのSRware社のブラウザ。ChromiumベースなのでほぼChromeだが、利用者情報の送信機能がないなど個人情報周りで気をつかっている。
Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3250.0 Iron Safari/537.36
Sleipnir
日本のフェンリル社のブラウザ。
Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.143 Safari/537.36 Sleipnir/6.1.0
Xiaomi MIUI Browser
Xiaomiに搭載されているブラウザ。モバイル向けのブラウザとしてシェアのばしているらしい。
Mozilla/5.0 (Linux; U; Android 7.1.2; zh-cn; MI 5C Build/N2G47J) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/53.0.2785.146 Mobile Safari/537.36 XiaoMi/MiuiBrowser/9.1.3
Brave
プライバシーを重視して、個人情報を収集するような広告をブロックし、その代わりプライバシーに配慮した別の広告を入れたり、閲覧すると仮想通貨BATが貰える仕組みがある特徴的なブラウザ。
以前は“Brave/Version”も出力されていたようだが、現在はChromeと同じUserAgentが出力される。
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36
- Brave Browser
- A way to have a unique User Agent while still looking like Chrome
- Brave should have its own User-Agent, but here is how you detect it anyway
Samsung Internet
Samsung が Galaxy向けに搭載しているブラウザ。Gear VRなどでも使われている。Chromiumベース。日本でも上位6位のシェアを持っている。
Mozilla/5.0 (Linux; Android 5.0.2; SAMSUNG SM-G925F Build/LRX22G) AppleWebKit/537.36 (KHTML, like Gecko) SamsungBrowser/4.0 Chrome/44.0.2403.133 Mobile Safari/537.36
UCBrowser
中国、東南アジア、インドで主に使われているブラウザ。人口の多い地域で使われているからか、FireFoxについで全世界で上位4位のシェアを持っている。
Mozilla/5.0 (Linux; U; Android 5.1; en-US; Aqua Joy Build/LMY47D) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 UCBrowser/11.2.5.932 U3/0.8.0 Mobile Safari/534.30
Androidの標準ブラウザ
かつてAndroid端末にプレインストールされていたブラウザ。Chromeとは違う。
Android 4.4以下、およびAndroid 5.0以降の一部の端末に搭載されている。
現在、開発は終了している。
Chromeの文字が入るケースと
Mozilla/5.0 (Linux; Android 4.2.2; ja-jp; SC-04E Build/JDQ39) AppleWebkit/535.19 (KHTML,like Gecko) Version/1.0 Chrome/18.0.1025.308 Mobile Safari/535.19
Chromeの文字が入らないケース
Mozilla 5.0 (Linux; U; Android 4.0.4; ja-jp; SC-06D Build/IMM76D) AppleWebkit/534.30 (KHTML,like Gecko) Version/4.0 Mobile Safari/534.030
があるらしい。Chrome と区別する必要がある場合はちょっとややこしい。
- [Android] GALAXY S4の標準ブラウザのUAに『Chrome』と書かれている件について
- [javascript]useragentを使ってAndroid標準ブラウザ判定
- Androidブラウザ
Tor Browser
通信経路を秘匿化する「Tor」が組み込まれたTor BrowserはFireFoxベースに作られているので、UserAgentもFireFoxと同じに見える。
Mozilla/5.0 (Windows NT 10.0; rv:68.0) Gecko/20100101 Firefox/68.0
UserAgentは固定のようなので、OSやブラウザのバージョンを判別することは出来ない。
以前は別のUserAgentが使われていたがどの様な頻度で変わっているかは不明。
個人特定が出来ないようにUserAgentは一本化されているようなので、プラグインとか使ってUserAgentをカスタマイズしないほうが良いみたい。
- どこからアクセスしているかを隠して匿名化できるブラウザ「Tor Browser」
- Random user agent in Tor Browser
- Tor browser user-agent strings
- Tor Browser 8.0 wrong user-agent
アプリ等のブラウザ
YahooのAndroid用ブラウザ。iOS版は提供終了。
Mozilla/5.0 (Linux; U; Android 4.2.2; ja-jp; SH-07E Build/S5310) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30 YJApp-ANDROID jp.co.yahoo.android.yjtop/2.3.16
http://himenaotaro.hatenablog.com/entry/20151011/1444564265
https://promo-ybrowser.yahoo.co.jp/
モバイル関連のブラウザは「Mobile」がついているだろうと思っていると、
Opera Miniのように、Mobileがついていないものがあるので、
User-Agent: Opera/9.80 (Android; Opera Mini/8.0.1807/36.1609; U; en) Presto/2.12.423 Version/12.16
モバイルか否かの判定はUserAgentじゃなくて解像度で判断してしまったほうが良いのかもしれない。
Facebookアプリ
facebookアプリからアクセスする場合は、“FBAN”とか”FBIOS”の文字列が入ってくる。
Mozilla/5.0 (iPhone; CPU iPhone OS 9_3_2 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Mobile/13F69 [FBAN/FBIOS;FBAV/59.0.0.51.142;FBBV/33266808;FBRV/0;FBDV/iPhone7,1;FBMD/iPhone;FBSN/iPhone OS;FBSV/9.3.2;FBSS/3;FBCR/Telkomsel;FBID/phone;FBLC/en_US;FBOP/5]
iOSアプリ(CFNetwork)
iOSアプリ経由でWEBページにアクセスすると、標準ブラウザとは別のUserAgentが記録される
CFNetwork/609 Darwin/13.0.0
Androidアプリ(HttpURLConnection)
Androidのアプリ経由でアクセスする場合のUserAgentもある。
Dalvik/1.4.0 (Linux; U; Android 2.3.2; Nexus S Build/GRH78C)
海外のブラウザ
特定の国で使われているブラウザなどもある。
ベトナム
ベトナムでは「Cốc Cốc」というブラウザのシェアがNo2となっている。
Mozilla/5.0 (Windows NT 6.2) AppleWebKit/537.36 (KHTML, like Gecko) coc_coc_browser/49.0 Chrome/43.0.2357.126_coc_coc Safari/537.36
インドネシア
2016年時点ではインドネシアでは「UC Browser」がよく使われていたが、2019年時点では減少している。
Mozilla/5.0 (Linux; U; Android 5.1; en-US; Aqua Joy Build/LMY47D) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 UCBrowser/11.2.5.932 U3/0.8.0 Mobile Safari/534.30
中国
中国は「UC Browser」は多いが、インドの方が多かったりする。
他に「QQ Browser」というブラウザも多く使われている。
Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; .NET4.0E; .NET4.0C; .NET CLR 3.5.30729; .NET CLR 2.0.50727; .NET CLR 3.0.30729; Zune 4.7; QQBrowser/7.7.24562.400; rv:11.0) like Gecko
他にも「Sogou Explorer」というChromiumベースのブラウザも使われている。
Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.22 Safari/537.36 SE 2.X MetaSr 1.0ozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET4.0C; .NET4.0E; SE 2.X MetaSr 1.0)
インド
インドではシェアを減らしつつあるが、「UC Browser」がよく使われている。
またKai OSというフィーチャーフォン向けOSが2〜5%の範囲でシェアを保っている。
Mozilla/5.0 (Mobile; LYF/F90M/LYF-F90M-000-02-21-131117; rv:48.0) Gecko/48.0 Firefox/48.0 KAIOS/2.0
KaiOSはFirefoxOSの後継のB2G OSからフォークされたOS。
ロシア
ロシアではYandex Browserが多く使われている。
Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 YaBrowser/18.9.1.954 Yowser/2.5 Safari/537.36
Yandex BrowserはロシアのYandex社のChromiumベースのブラウザ。
韓国
韓国はSamsung製のスマホやSmartTVのおかげか「Samsung Internet」が第3位になっている。
Mozilla/5.0 (Linux; Android 9; SAMSUNG SM-G960F Build/PPR1.180610.011) AppleWebKit/537.36 (KHTML, like Gecko) SamsungBrowser/9.2 Chrome/67.0.3396.87 Mobile Safari/537.36
また、第5位に「Whale Browser」が上がってきている。「Whale」はNaver製のブラウザ。whalestoreという独自のストアを持っている。
Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Whale/0.7.33.5 Safari/537.36
シンガポール
シンガポールだとPuffin Browserのシェアが約3%ある。
Puffin Browserは帯域幅の使用を減らし高速に実行させるために一部の処理をクラウドサーバー上で行なっている。そのサーバーの一つがシンガポールにあるらしいがそれと関係ある?
Mozilla/5.0 (Linux; Android 8.0.0; moto g(6) play Build/OPP27.91-87; pt-br) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.111 Mobile Safari/537.36 Puffin/7.5.3.20547AP
アフリカ
アフリカはOpera(Mini)が多い。特にチャドの42%、ナイジェリアの36%など。
アフリカで利用が多いのはOpera Miniにデータ圧縮機能がある為だとか。
南アフリカだと1GBあたりへ平均$7.19と高額なモバイルデータ料金を払っている為、データ通信量の圧縮機能が費用の節約の為の解決策になっているらしい。
低価格なAndroidスマホにOperaが初期インストールされているからという説もある。
2021年時点のOperaは10%と減っている。
Mozilla/5.0 (Linux; U; Android 5.1.1; en-US; ONE A2003 Build/LMY47V) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 OPR/15.0.2125.101257 Mobile Safari/537.36
- Opera is leading the digital revolution in Africa with nearly 120 million users
- 【ブラウザ戦争】VPN搭載で便利すぎるブラウザ「Opera」アフリカ大陸から大逆襲
- Browser Market Share Africa
その他のブラウザ
他にも色々ブラウザがたくさんあるので、全部書くのは難しい。
Wikipediaにあるものだと200種類以上ある。(各言語版によっても異なる)
2017年のシェアが高い順で見ていくと
Browser Market Share Worldwide
UC BrowserのシェアがChrome、Safariの次に高いのが目を引く。
Browser | Market Share Perc. (Sept 2016 - Sept 2017) |
---|---|
Chrome | 52.73 |
Safari | 14.2 |
UC Browser | 8.27 |
Firefox | 6.54 |
IE | 4.28 |
Opera | 4.26 |
Samsung Internet | 3.28 |
Android | 2.81 |
Edge | 1.72 |
IEMobile | 0.41 |
Yandex Browser | 0.27 |
BlackBerry | 0.16 |
Coc Coc | 0.16 |
QQ Browser | 0.09 |
アプリケーション別のUserAgent
Vendor fragment
メーカー製のPCの場合、「MASP」や「MDDR」の様な文字列が付与される場合がある。これはメーカーによって値が異なる。
Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0; MASP)
Fragment | Description & opinion |
---|---|
MDDR / MDDRJS / MDDC / MDDCJS / MDDS / MDDSJS | Dell |
MAAR / MAARJS | Acer |
MASP / MASPJS / MASA / MASAJS | Sony |
MAAU / NP06 / NP07 / NP08 / NP09 / ASJB / ASU2 / ASU2JS | Asus |
MASM / MASMJS | Samsung |
MALC / MALCJS / MALN / MALNJS / LCJB / LEN2 | Lenovo |
量が多いので詳細は参考サイトで
- [Unknown user agent fragments]
(https://www.whatismybrowser.com/developers/guides/unknown-user-agent-fragments)
WebView
スマホアプリの WebViewを使っている場合のUserAgent。
ChromeベースのWebViewの場合
Lollipop以上の場合は「vw」があるかとか。
Old WebView
Mozilla/5.0 (Linux; U; Android 4.1.1; en-gb; Build/KLP) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30
KitCat〜Lollipopの場合
Mozilla/5.0 (Linux; Android 4.4; Nexus 5 Build/_BuildID_) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/30.0.0.0 Mobile Safari/537.36
Lollipop以上の場合
Mozilla/5.0 (Linux; Android 5.1.1; Nexus 5 Build/LMY48B; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/43.0.2357.65 Mobile Safari/537.36
iOSのWebView
アプリによってカスタマイズされているケースがあるが、通常はSafariでアクセスした場合と同じになる。
クローラーなど
Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)
ニュース用、画像用、モバイル用など他にも色々ある。Google クローラ
Yahoo
Mozilla/5.0 (compatible; Yahoo! Slurp; http://help.yahoo.com/help/us/ysearch/slurp)
用途によって色々ある。
- [Why is Slurp crawling my page?]
(https://help.yahoo.com/kb/search/SLN22600.html?impressions=true) - Yahoo!ディスプレイアドネットワーク(YDN)のクローラーについて
- スポンサードサーチのクローラーについて
Bing
Mozilla/5.0 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm)
他にも何種類かある。
Baidu
Mozilla/5.0 (Linux;u;Android 4.2.2;zh-cn;) AppleWebKit/534.46 (KHTML,likeGecko) Version/5.1 Mobile Safari/10600.6.3 (compatible; Baiduspider/2.0;+http://www.baidu.com/search/spider.html)
DuckDuckGo
DuckDuckBot/1.0; (+http://duckduckgo.com/duckduckbot.html)
脆弱性スキャナなど怪しいアクセス
何も公開していないはずのサイトでも海外から謎のアクセスが来ていたりするが、脆弱性スキャナーや攻撃ツールだったりすることが多いようだ。UserAgentからどんなツールかわかる場合もある。
# ZmEu 脆弱性スキャナの一種 phpMyAdminなどへの攻撃を目的としてスキャン
ZmEu
# Jorgee PHPの脆弱性をスキャン
Mozilla/5.0 Jorgee
# NYU (New York University Information Technology)
NYU
# muhstik-scan
Mozilla/5.0 muhstik-scan, muhstik/1.0
# Indy-Library
Mozilla/3.0 (compatible; Indy Library)
# zgrab
Mozilla/5.0 zgrab/0.x
# masscan
masscan/1.0 (https://github.com/robertdavidgraham/masscan)
# sysscan
sysscan/1.0 (https://github.com/robertdavidgraham/sysscan)
通常のブラウザに偽装している場合も多いので、UserAgentだけで判断すると言うのは難しいが、やたらOSのバージョンやブラウザのバージョンが最新のものと比べて古かったりして怪しいアクセスもある。
また、Python-urllib/3.6
の様に使っているプログラム自体のUserAgentを返す場合もある。
UserAgentで判断することの有効性について研究もされているようだ。
その他クローラー
AppleもSiriとSpotlightなどに活用するためにクローラーが存在するようだ。
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/600.2.5 (KHTML, like Gecko) Version/8.0.2 Safari/600.2.5 (Applebot/0.1)
企業や、特定の団体によるクローラーもある。
ICC-Crawler(NICT-情報通信研究機構のクローラー)
ICC-Crawler/2.0 (Mozilla-compatible; ; http://ucri.nict.go.jp/en/icccrawler.html)
死活監視サービスPingdom
HTTP/1.1 Pingdom.com_bot_version_1.4_(http://www.pingdom.com/)
企業がやっているサービスの場合は大体、URLが付いている感じ
Alexaのクローラー
ia_archiver
Webサイトのアクセスランキング情報を提供しているAlexaのクローラー。
かつてWayback Machine
という世界中のWebサイトを保存しているサイトにデータを提供していたらしい。
- Alexa(アレクサ)の クローラーのユーザーエージェント について :技術クリップ
- Wayback Machine(ウェイバックマシン)とは?過去公開されていたページをもう1度確認できる便利サービス
その他、参考
検索エンジンのロボットとユーザーエージェント、クローラー・Bot - Google、Yahoo、Bing、Baidu
プログラム言語別のUserAgent
プログラムでHTTP通信をする時、プログラム言語で使用しているモジュールがデフォルトで出力するUserAgentがある場合もある。
プログラム言語によってUserAgentが異なると言うより、ライブラリ毎に異なってくる。
動作確認にはPlay With Dockerが使い捨てで環境構築できるので便利だった。
実際に試したサンプルは下記に乗せていく予定。
C/C++
# QWebKitの場合
Mozilla/5.0 (Symbian; U; N8-00; fi-FI) AppleWebKit/534.3 (KHTML, like Gecko) Qt/4.7.4 Mobile Safari/534.3
プログラム言語固有のUserAgentというのがあるわけではないので、ライブラリ次第。
アプリケーションフレームワークのQtの場合、QWebKitはSymbian端末としてUserAgentが出力されるとのこと。
Perl
libwww-perl/5.805
perl+apache - LWPを責めないでの記載を参考。
Perl6
# LWP::Simpleの場合
LWP::Simple/0.100 Perl6/rakudo
- Getting started with Rakudo Perl 6 in a Docker container
- LWP::Simple - a simple web client in Perl 6
Ruby
# net/httpを使った場合
Ruby
# httpclientを使った場合
HTTPClient/1.0 (2.8.3, ruby 2.3.7 (2018-03-28))
# faradayを使った場合
Faraday v0.15.4
net/httpで接続した場合、「Ruby」とだけ出力された。
Crystal
# http/clientを使った場合
Crystal
Python
# urllibを使った場合
Python-urllib/3.6
# requestsを使った場合
python-requests/2.18.4
PHP
file_get_contents、curlでアクセスした場合、特に指定しなければUserAgentは出力されない。
C#
C#でアクセスした場合、特に指定しなければUserAgentは出力されない。
HTTPクライアントを全て確認はしていない。
VB.net、F#も同じと思われる。
.NetじゃなくてMonoベースのC#でも、同じく特に指定しなければUserAgentは出力されなかった。
VBA/VBScript
# MSXML2.XMLHTTPの場合
Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/7.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E)
# WinHttp.WinHttpRequest.5.1の場合
Mozilla/4.0 (compatible; Win32; WinHttp.WinHttpRequest.5)
VBA/VBScriptも使用するオブジェクトによって異なってくる。
Javascript(NodeJS)
Javascript(NodeJS)でアクセスした場合、特に指定しなければUserAgentは出力されない。
なお、NodeJSのソフトウェアフレームワークであるElectornを使用した場合のUserAgentは以下のものが出力される
Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) electron/1.0.0 Chrome/53.0.2785.113 Electron/1.4.3 Safari/537.36
Javascript(Ajax)
Javascript(Ajax)でアクセスした場合は、実行したブラウザのUserAgentが出力される。
XHRでもFetchAPIの場合もどちらでも同じ。
Java
Java/1.8.0_66
# HttpClientの場合
Java-http-client/11.0.3
# okHttp
okhttp/3.12.1
Kotlin
# khttpを使った場合
khttp/1.0.0-SNAPSHOT
AndroidじゃないKotlinで試した。
Groovy
# groovysh new URL("http://xxxx").getText() の場合
Java/1.8.0_181
Java上で動いているだけあって、Javaの場合と同じか。
Processing
# loadStrings()を使った場合
Java/1.8.0_202
ProcessingはJavaとしてコンパイルされて実行するらしい。
Scala
Dispatch/0.11.1-SNAPSHOT
Scala HTTP 通信を参考にDispatchを使った場合
CFML(ColdFusion/Lucee/Railo/OpenBD)
# ColdFusionの場合
ColdFusion
# Luceeの場合
Lucee (CFML Engine)
# Railoの場合
Railo (CFML Engine)
# OpenBDの場合
BlueDragon
CFML系言語で一まとめ。
cfdocsのオンライン実行環境にて確認
cfdocsにはOpenBDの環境がない為、実際には確認できず。
OpenBDのマニュアルには初期値が「BlueDragon」と記載あり。
Go(Golang)
# net/httpの場合
Go-http-client/1.1
Rust
# reqwestの場合
reqwest/0.9.17
# curl-rustの場合は無し
curl-rustを使った場合、特に指定しなければUserAgentは出力されない。
Mac に homebrew で Rust 開発環境を作るを参考に環境構築。
Elixir
特に指定しなければUserAgentは出力されないようだ。
Play With Docker上で、対話環境IExを作って、httpcクライアントを実行してみた。HTTPoisonは試してない。
Erlang
特に指定しなければUserAgentは出力されない。
ElixirはErlang上で動いているし、同じhttpcクライアントを使っているので同じ結果になるか。
Clojure
# dakrone/clj-http の場合
Apache-HttpClient/4.5.5 (Java/11.0.1)
homebrewでLeiningenをインストールして、dakrone/clj-httpを試した。Java上で動いているからJavaのバージョンが出ているのか。他のライブラリだと違う?
Common Lisp
# drakma:http-requestの場合
Drakma/1.3.11 (SBCL 1.2.6; Linux; 4.4.0-96-generic; http://weitz.de/drakma/)
Play With Docker上で、
CommonLispの実行環境をDockerで構築してみたを参考に環境を作って、Common Lisp入門してwebスクレイピングやろうとしてるを試してみた。
Racket
Racket/7.4 (net/http-client)
OCaml
# Cohttpを使った場合
ocaml-cohttp/1.2.0
D言語(DLang)
# std.net.curlを使った場合
Phobos-std.net.curl/2.080 (libcurl/7.47.0)
Play With Docker上で、
DockerとD言語のイメージで環境を作って
std.net.curlのhttp getの例を試してみた。
V言語(VLang)
v
小文字のv
とだけ出る。
Lua
# LuaSocket
LuaSocket 3.0-rc1
Julia
HTTP packageを使った場合、UserAgentは返さなかった。
Nim
Nim httpclient/0.19.4
標準ライブラリの httpclientを使った。
PowerShell
# Windows版の場合
Mozilla/5.0 (Windows NT; Windows NT 6.1; ja-JP) WindowsPowerShell/4.0
# Mac版の場合
Mozilla/5.0 (Windows NT; Darwin 17.4.0 Darwin Kernel Version 17.4.0: Sun Dec 17 09:19:54 PST 2017; root:xnu-4570.41.2~1/RELEASE_X86_64; ja-JP) WindowsPowerShell/6.0.0
# Linux版の場合
Mozilla/5.0+(Linux;+Linux+3.10.0-693.5.2.el7.x86_64+#1+SMP+Fri+Oct+20+20:32:50+UTC+2017;+ja-JP)+PowerShell/6.1.0
Mac版でも、Windows NTの文字が入ってくる。
Google Apps Script
Mozilla/5.0 (compatible; GoogleDocs; script; +http://docs.google.com)
Mozilla/5.0 (compatible; Google-Apps-Script)
Mozilla/5.0 (compatible; GoogleApps script;+http://script.google.com/bot.html)
Google Apps Scriptの場合は、ローカルからアクセスするわけでは無いのでbotに近い扱いになるのか。
- UrlFetch with custom user-agent string?
- Pseudo Browser with Google Spreadsheet
- [Google Apps Script]UrlFetchApp.fetchからのアクセス情報
Elm
elm/0.19.0
動作未検証で詳しくは不明。Elm Reactor上で下記リンクのUserAgentが発生するようだが。
Dart
Dart/2.0 (dart:io)
動作未検証で詳しくは不明。dart:io websocket使用時に下記リンクのUserAgentが発生するようだが。
Haskell
The Haskell Stack
動作未検証で詳しくは不明。Stackを使用している場合、The Haskell Stack
が追加されるようになったようだが、元々はUserAgentは付与されていなかったらしい?
R言語
# httrを使った場合
curl/7.19.6 Rcurl/1.95.4.1 httr/0.3
Delphi
Embarcadero RESTClient/<version>
RAD Studio上で使う場合は上記の値が初期値となるらしい。
Prolog
SWI-Prolog
SWI-Prologを使う場合は上記の値となるらしい。
MATLAB
MATLAB R2012b
MATLABの RESTful Web サービスのWebアクセス関数だと'MATLAB ' version
となるらしい。
Deno
Deno/0.42.0
プログラム言語とはちょっと意味合いが違うが、
# deno http://ifconfig.io/ua
した場合のエラーメッセージから、上記のUserAgentを使っていると判別できる。
各種ツール
wget
Wget/1.16.3 (darwin15.0.0)
curl
curl/7.21.4 (universal-apple-darwin11.0) libcurl/7.21.4 OpenSSL/0.9.8r zlib/1.2.5
Git
GitもHTTPアクセスするのでUserAgentがついている。変更可能。
git/2.0.0
ShortLinkTranslate
トレンドマイクロ社のウイルスバスターに搭載されているTrendツールバーの「Webページ内のリンクの安全性を表示」機能が有効だと記録されるらしい。
ShortLinkTranslate
ShortLinkTranslateというユーザエージェントのアクセスログ
Microsoft Office Protocol Discovery
IEに表示された情報をExcelにコピー&ペーストすると出力されるらしい。
Microsoft Office Protocol Discovery
ahrefs
SEOツール
Mozilla/5.0 (compatible; AhrefsBot/5.2; +http://ahrefs.com/robot/)
SEOの被リンク分析・競合調査ツール | Ahrefs(エイチレフス)
semrush
SEOツール
Mozilla/5.0 (compatible; SemrushBot/1.2~bl; +http://www.semrush.com/bot.html)
キーワード調査や競合調査を強力サポート!!】Semrushを活用しよう!
自動テストツール
Selenium
実行しているブラウザと同じ
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36
PlayWright
初期設定だとSafariと同じ
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.4 Safari/605.1.15
Puppeteer
Chromeで実行の場合、Chromeではなく、HeadlessChromeの文字列が差し込まれる
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/109.0.5412.0 Safari/537.36
その他
自分のUserAgentを調べるAPI
ブラウザではなくて、プログラムやツール等でUserAgentをチェックしたい時は、
Javascriptや「あなたの情報(確認くん)」で確認というわけにはいかないので、UserAgentだけ返すAPIが欲しい。
調べたらifconfig.ioというのがあったので、
curl ifconfig.io/ua
wget http://ifconfig.io/ua -O -
とかで試せた。
curl ifconfig.io/all.json
と打つとIPアドレスなど他の情報も取得できる。
同様のサービスは複数ある。
# inet-ip.info
curl inet-ip.info/json
# ifconfig.me
curl ifconfig.me/json
# httpbin.org
curl httpbin.org/user-agent
Mobile、Tablet、PC判定
UserAgentからMobile、Tablet、PCかどうか判定したいという要望があると思うが、方法として思いつくのは下記のようなパターン。
if (navigator.userAgent.match(/(iPhone|iPod|Android.*Mobile)/i)) {
// iPhone、iPod、Android(Mobileを含む)
console.log("Mobile");
} else if (navigator.userAgent.match(/(iPad|(?!(Android.*Mobile)+)Android)/i)) {
// iPad、Android(Mobileを含まない)
console.log("Tablet");
} else {
// それ以外はPC
console.log("PC");
}
ただ、この場合、Kindle FireにはMobileの文字列が入っているので、Mobileとして判定されてしまう。KindleをTabletと判定したい場合、「Silk」、または「Kindle」の文字列が入ってくるのでこれを条件に入れる必要がある。
WindowsPhoneはAndroidとMobileの文字列があるのでMobileで判定される。
Androidタブレットの中にはGalaxy TAB P1000などのようにMobileが入るものも一部存在する。
スマホでもKaiOSやFireFoxOSの場合はAndroidの文字列は含まれないのでFireFoxとMobileが含まれる条件を入れる必要が出てくる。
WindowsタブレットとTouch機能付きのノートPCと区別は多分出来ない。
User-Agent parser
User-Agentから情報を取り出すものをUser-Agent parserと言うらしい。
いい感じにUserAgentからOSやブラウザなどの端末情報を抽出したい場合、結構やっている人たちがいるので、GoogleとかGithubとかでUser Agent parserで検索すると色々見つかる。
UserAgentにUnicode(全角文字、絵文字)を使う
以下のようにUserAgentに全角文字や、絵文字を設定をするのはやめたほうがよい。
もじら/5.0 (😀🙈😱)
一般的なサイトはUserAgentにUnicode文字などの文字列が入っていることを想定していないので、誤作動してしまう可能性がある。
RFC 2616 (HTTP 1.1)では、header contentsはTEXT
であることになっているが、TEXTの定義とは何かの問題がある。
UserAgentを送信するクライアント側はASCII文字のみ送信するようににして、UserAgentを受信するWebサーバー側はUnicode文字が混入することを考慮して設計するのが安全。
- Can I use Unicode characters in HTTP headers?
- Is a unicode user agent legal inside an HTTP header?
- Shared Techniques wiki for the W3C Mobile Web Initative Best Practices
User-Agent String - U+001DなどUnicode(ASCII,C0)制御文字がHeaderに含まれるとaborting requestするので除去する
UserAgentは最大何桁ぐらいまであるか。
UserAgentをデーターベースに格納する場合は最大桁数が気になるところだが、
特に決まりはなさそう。それらしい情報は見つからなかった。
多くのUserAgentは大体100桁前後が多いようだ。
ASP.NETは下記の参考URLによるとUserAgentの文字数制限が512文字となっているようなので、512桁と考えるのが良いのか。
Amazon MWSは500文字以上は拒否すると記載がある。
Internet Explorer 7のUserAgentのカスタマイズについては最大200文字を推奨となっている。
E-Commerce製品のMagentoはデータベースにUserAgentを保存するのにVARCHAR(255)を推奨している。
ただものすごく長いものもあるかもしれない。
心配ならば、WebサーバーのHTTP headerの制限値までというという考えも。
Apache 8K、Nginx 4K-8K、IIS 8K-16K、Tomcat 8K-48K
下記の参考URLによると8000文字以上のケースはあったらしい。
あまり長いのはマトモな目的では無いと思うので無視した方が良いかもしれない。
UserAgentとセキュリティ
UserAgentの出力する文字列はブラウザ側が好きなように決められるし、書き換えることも簡単に出来るので、
例えば、あなたの情報(確認くん)のように、UserAgentを画面に出力する機能があった場合、
UserAgent: <script>alert(1)</script>
のような文字列がセットされていた場合、正しくエスケープして表示しないと、任意の処理が実行されてしまう。
Google ChromeがUserAgent文字列の非推奨・凍結を計画
Google Chrome
の開発チームは1月14日、UA文字列を非推奨
とし、凍結
する計画を明らかにしたとのこと。
Milestone | Stable date | Action |
---|---|---|
M81 | 2020年3月中旬 |
navigator.userAgent の非推奨 |
M83 | 2020年6月上旬 | ブラウザーのバージョンを凍結、OSバージョンを統合 |
M85 | 2020年9月中旬 | desktop、mobileの其々の文字列を統一 |
UA文字列が無くなるわけではなく、凍結なので直ちに影響はなさそう。
UserAgentの代わりとしてUser-Agent Client Hints(UA-CH)の仕様が策定中とのこと。
values | for example |
---|---|
brand | "cURL", "Edge", "The World’s Best Web Browser" |
major version | "72", "3", or "28" |
full version | "72.0.3245.12", "3.14159", or "297.70E04154A" |
platform brand and version | "Windows NT 6.0", "iOS 15", or "AmazingOS 17G" |
platform architecture | "ARM64", or "ia32" |
model | "", or "Pixel 2 XL" |
mobileness | ?0 or ?1 |
header情報に以下のような文字列が設定される?
Sec-CH-UA: "Examplary Browser 73.3R8.2H.1"
Sec-CH-Platform: "Windows 10"
Sec-CH-UA
については、ChromeのExperimental Web Platform features
を有効にすることで確認できる。Sec-CH-Platform
はWebサーバー側でレスポンスヘッダーの指定が必要。詳細は以下で試している。
Chromeの対応について、Edge、Firefox、Safari(一部対応済)などのブラウザベンダーも概ね支持をしているとのことだが、
UA文字列を送信するのは、ブラウザだけでは無いし、Botや各種httpClientがどう対応していくのか。
UserAgentを分析に使っているサービスには影響が大きそう。
UserAgentを使って、モバイルかどうか判定することが当面は出来そうだが、今後はどうなるか。
ダイナミック レンダリングを実装するに書かれているように、ユーザー エージェント(モバイル、タブレット、パソコン)の種類に応じて異なるバージョンのページを提供する手法についてGoogleは否定的では無かったので今後はどうなっていくのか。