1126
990

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

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

Last updated at Posted at 2015-09-23

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情報が載っているサイト

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がMozillalike Geckoなどの文字列をつけ始める。
  • KonquerorもMozillalike Geckoなどの文字列をつけ始める。
  • KonquerorをForkしてSafari(Webkit)が出来る際にKHTMLなどの文字列も引き継がれる。
  • WebKitをGoogle Chromeが採用してAppleWebKitSafariなど文字列がそのまま引き継がれる。
  • 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)

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はほとんど残っていないと思うのであまり意味なし。 Apple M1チップ搭載のM1 Macの場合も``Intel Mac OS ``表示になるらしいので、CPUの区別は出来なくなる。

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

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

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のバージョン毎に決まっているらしい。

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>

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の場合は時期によっていくつかのパターンがある。
なお、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

タブレット

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かどうかは、 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

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)

au

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

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

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

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

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

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 10.0; rv:68.0) Gecko/20100101 Firefox/68.0 

UserAgentは固定のようなので、OSやブラウザのバージョンを判別することは出来ない。
以前は別の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じゃなくて解像度で判断してしまったほうが良いのかもしれない。

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

その他のブラウザ

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

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

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

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

iOSのWebView

アプリによってカスタマイズされているケースがあるが、通常はSafariでアクセスした場合と同じになる。

クローラーなど

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)

用途によって色々ある。

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サイトを保存しているサイトにデータを提供していたらしい。

その他、参考
検索エンジンのロボットとユーザーエージェント、クローラー・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

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

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文字が混入することを考慮して設計するのが安全。

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は否定的では無かったので今後はどうなっていくのか。

1126
990
12

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1126
990

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?