userAgent
ブラウザ
ユーザーエージェント

UserAgentからOS/ブラウザなどの調べかたのまとめ

WEBサイトにアクセスしてくる利用者の情報をUserAgentから調べることが出来ますが、どんな情報がわかるか調べてみた。より詳しい情報は参考に使ったサイトを参照で。


UserAgent


自分のブラウザのUserAgentを調べるのに使ったサイト


色々なUserAgent情報が載っているサイト


UserAgentの記述ルール

UserAgentの書き方は厳格に定義されているようではないようだ。RFC 1945とか、他のアプリケーションのやり方にならっているだけのような感じがする。

RFC 1945では、

User-Agent = "User-Agent" ":" 1*( product | comment ) で

product tokens は、section-3.7では 

product = token ["/" product-version] となっていて、

CERN-LineMode/2.15 の用に product名の後にスラッシュをいれてバージョンを記載するようになっている。 

あとはuser-agent strings | archive.mozilla.orgと、User-Agent - HTTP | MDNに記載がある。

Mozilla/<version> (<system-information>) <platform> (<platform-details>) <extensions>

大体のブラウザが上記のルールにしたがっている感じのようだ。

アプリケーション固有の値は次々に出てくると思うので、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という情報もあった。


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

他のブラウザも「Gecko」を付けるようになる。
Mozilla/5.0 (Macintosh; U; PPC Mac OS X Mach-O; en-US; rv:1.7.2) Gecko/20040825 Camino/0.8.1

ブラウザ「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

「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


OS


PC


Windows

WindowsのバージョンはWindows NT 6.1の様なWindows NT系のバージョンで表示される。

Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; WOW64; Trident/6.0)

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


macOS

「Mac OS X」+OSのバージョンで判定できる。プロセッサのIntel と PowerPC(PPC)の区別も出来るが、今現在PowerPCはほとんど残っていないと思うのであまり意味なし。

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

各バージョンについての詳細はWikipediaで


Linux

64bitの場合「x86_64」が32bitの場合「i686」、x86_64 環境の i686 Linux デスクトップの場合は、「i686 on x86_64」が入る。

Androidの場合も「Linux」文字列が入るので、「x86_64」、「i686」の有無で判定するか「Android」を除くの条件がいる?

Mozilla/5.0 (X11; Linux x86_64; rv:10.0) Gecko/20100101 Firefox/10.0

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


その他


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

WiiPlayStationなども


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)


PS Vita

Mozilla/5.0 (PlayStation Vita 1.50) AppleWebKit/531.22.8 (KHTML, like Gecko) Silk/3.2


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


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を検出してもらうためにユーザーエージェント文字列の指定がある事がわかる。


スマホ


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

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


Android

Android のユーザーエージェントの検出について

によると「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>

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


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


BlackBerry

BlackBerryの場合は「BB10」と「Mobile」が入っているかで区別できる。

Mozilla/5.0 (BB10; <Device Model>) AppleWebKit/<WebKit Version> (KHTML, like Gecko) Version/<BB Version #> Mobile Safari/<WebKit Version>


タブレット


Kindle Fire OS

Kindle Fire OSはAndroidベースのタブレットなので、AndroidがUserAgentに付いている。

Kindleかどうかは、 SilkKindleがの文字列があるかで判定できるか。Mobileの文字列が付いているが、タブレットなので、タブレットかどうかの区別をしたい場合は、SilkKindle`の判定を優先するか。

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


フィーチャーフォン

携帯電話、ガラパゴスケータイ、ガラケーと呼ばれていたもの。

docomoは以下の通り「DoCoMo」が先頭に入っている。

DoCoMo/2.0 F2051(c100;TB;serXXXXXXXXXXXXXXX;iccxxxxxxxxxxxxxxxxxxxx)

AUは以下の通り先頭に「KDDI」が入っている。

KDDI-[機種名] UP.Browser/[ブラウザバージョン] (GUI) [サーバ名]/[サーババージョン]

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


ブラウザ


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」も入っているので注意。

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


Firefox

「rv:geckoversion」はGecko のリリースバージョン。

「Firefox/firefoxversion」の形式でバージョンが入っている。

Geckoの右側の「20100101」は固定文字列

Mozilla/5.0 (platform; rv:geckoversion) Gecko/20100101 Firefox/firefoxversion


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

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


Vivaldi

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


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 と区別する必要がある場合はちょっとややこしい。


Tor Browser

通信経路を秘匿化する「Tor」が組み込まれたTor BrowserはFireFoxベースに作られているので、UserAgentもFireFoxと同じに見える。

Mozilla/5.0 (Windows NT 6.1; rv:60.0) Gecko/20100101 Firefox/60.0

「Firefox 60 ESR」ベースに作られているからなのか、現在はバージョンは60のままのようだ。以前は別のUserAgentが使われていたがどの様な頻度で変わっているかは不明。

個人特定が出来ないようにUserAgentは一本化されているようなので、プラグインとか使ってUserAgentをカスタマイズしないほうが良いみたい。


アプリ等のブラウザ

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じゃなくて解像度で判断してしまったほうが良いのかもしれない。

https://dev.opera.com/articles/opera-mini-request-headers/


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

https://developer.apple.com/reference/cfnetwork

http://blog.ch3cooh.jp/entry/20121030/1351575057


Androidアプリ(HttpURLConnection)

Dalvik/1.4.0 (Linux; U; Android 2.3.2; Nexus S Build/GRH78C)


海外のブラウザ

特定の国で使われているブラウザなどもある。

ベトナムでは「Cốc Cốc」というブラウザのシェアがNo2となっている。

https://www.sekai-lab.com/times/?p=3429

https://coccoc.com/

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

中国やインドネシア、インドでは「UC Browser」がよく使われている。

インドネシアの特殊なブラウザ事情(Opera Mini,UC Browser Mini)

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

中国では他に「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)

インドではKai OSというフィーチャーフォン向けOSがシェアを増やしている。

Mozilla/5.0 (Mobile; LYF/F90M/LYF-F90M-000-02-21-131117; rv:48.0) Gecko/48.0 Firefox/48.0 KAIOS/2.0

ロシアでは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


その他のブラウザ

他にも色々ブラウザがたくさんあるので、全部書くのは難しい。

その中でも、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


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

量が多いので詳細は参考サイトで


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

Chrome User Agent Strings


アプリケーション


クローラーなど


Google

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?

Yahoo!ディスプレイアドネットワーク(YDN)のクローラーについて

スポンサードサーチのクローラーについて

その他、参考

検索エンジンのロボットとユーザーエージェント、クローラー・Bot - Google、Yahoo、Bing、Baidu

クローラーのbotユーザーエージェント一覧


プログラム言語

プログラムでHTTP通信をする時、プログラム言語で使用しているモジュールがデフォルトで出力するUserAgentがある場合もある。

プログラム言語によってUserAgentが異なると言うより、ライブラリ毎に異なってくる。

動作確認にはPlay With Dockerが使い捨てで環境構築できるので便利だった。

実際に試したサンプルは下記に乗せていく予定。

* Play with Dockerを使って、色んなプログラム言語でhttp通信してみる


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


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は出力されない。


Javascript(Ajax)

Javascript(Ajax)でアクセスした場合は、実行したブラウザのUserAgentが出力される。

XHRでもFetchAPIの場合もどちらでも同じ。


Java

Java/1.8.0_66   


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

# 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スクレイピングやろうとしてるを試してみた。


OCaml

# Cohttpを使った場合

ocaml-cohttp/1.2.0


D言語

# std.net.curlを使った場合

Phobos-std.net.curl/2.080 (libcurl/7.47.0)

Play With Docker上で、

DockerとD言語のイメージで環境を作って

std.net.curlのhttp getの例を試してみた。


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に近い扱いになるのか。


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


各種ツール


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


ShortLinkTranslate

トレンドマイクロ社のウイルスバスターに搭載されているTrendツールバーの「Webページ内のリンクの安全性を表示」機能が有効だと記録されるらしい。

ShortLinkTranslate

ShortLinkTranslateというユーザエージェントのアクセスログ


その他 クローラーとか


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を活用しよう!


ICC-Crawler

NICT-情報通信研究機構のクローラー

ICC-Crawler/2.0 (Mozilla-compatible; ; http://ucri.nict.go.jp/en/icccrawler.html) 

ICC-Crawlerとは


Pingdom

HTTP/1.1 Pingdom.com_bot_version_1.4_(http://www.pingdom.com/)

死活監視サービスPingdomからアクセスが来た場合。

企業がやっているサービスの場合は大体、URLが付いている感じ


その他


自分のUserAgentを調べるAPI

ブラウザではなくて、プログラムやツール等でUserAgentをチェックしたい時は、

Javascriptや「あなたの情報(確認くん)」で確認というわけにはいかないので、UserAgentだけ返すAPIが欲しい。

調べたらifconfig.ioというのがあったので、

curl ifconfig.io/ua 

wget http://ifconfig.io/ua -O -

とかで試せた。

あと、いつでもHerokuの無料枠を使って試せるように


index.php

<?php 

echo $_SERVER['HTTP_USER_AGENT'];

だけ書いたレポジトリをGitHubにあげて

Deploy To Herokuボタンを設置した。

Deploy

これでHerokuの無料枠を他の用途に使いたいのでAppを削除しても、またインストールし直しができて便利。


User-Agent parser

User-Agentから情報を取り出すものをUser-Agent parserと言うらしい。

いい感じにUserAgentからOSやブラウザなどの端末情報を抽出したい場合、結構やっている人たちがいるので、GoogleとかGithubとかでUser Agent parserで検索すると色々見つかる。


robots.txt

特定のクローラーやツールに自分のサイトにアクセスして欲しくない場合は、サイト直下にrobots.txt

を作って、拒否するUserAgentを指定する事ができる。

ただしあくまでもクローラーやツール側にrobots.txtに記載してある通りに動作してほしいとお願いするためのものなので、robots.txtに対応していなかったり、無視するクローラーであれば効果はない。