logstash-filter-useragent 0.1.2 → 0.1.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CONTRIBUTORS +18 -0
- data/LICENSE +1 -1
- data/README.md +95 -0
- data/lib/logstash/filters/useragent.rb +0 -1
- data/logstash-filter-useragent.gemspec +1 -1
- metadata +4 -3
- data/vendor/regexes.yaml +0 -1335
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 18e097248f0118fc6bc5e6048e886f5efe2ce69a
|
4
|
+
data.tar.gz: 94d0d9d30c02ba26c7a2d050a2ab28d22b714d89
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4ad75cd9499e2583ac056cb3e249ecc19a74d7556fe6d85668e5826b3126118ad627f82c5a0f595509e962f69c5ca75698b152d718f06f459e7f9003f5b641b7
|
7
|
+
data.tar.gz: bb2587fae7fff05e2c065c7acf5d84bb034143ef2478edee2f31961532956ef60fb69ec7a2555be9056f53268a9cd8dfc66908e97287117fdd8431d4d6874c6f
|
data/CONTRIBUTORS
ADDED
@@ -0,0 +1,18 @@
|
|
1
|
+
The following is a list of people who have contributed ideas, code, bug
|
2
|
+
reports, or in general have helped logstash along its way.
|
3
|
+
|
4
|
+
Contributors:
|
5
|
+
* Alex Tambellini (atambo)
|
6
|
+
* Colin Surprenant (colinsurprenant)
|
7
|
+
* Dan Everton (deverton)
|
8
|
+
* Jay Luker (lbjay)
|
9
|
+
* Jordan Sissel (jordansissel)
|
10
|
+
* Kubes (pkubat)
|
11
|
+
* Pier-Hugues Pellerin (ph)
|
12
|
+
* Richard Pijnenburg (electrical)
|
13
|
+
* Suyog Rao (suyograo)
|
14
|
+
|
15
|
+
Note: If you've sent us patches, bug reports, or otherwise contributed to
|
16
|
+
Logstash, and you aren't on the list above and want to be, please let us know
|
17
|
+
and we'll make sure you're here. Contributions from folks like you are what make
|
18
|
+
open source awesome.
|
data/LICENSE
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
Copyright (c) 2012-
|
1
|
+
Copyright (c) 2012-2015 Elasticsearch <http://www.elasticsearch.org>
|
2
2
|
|
3
3
|
Licensed under the Apache License, Version 2.0 (the "License");
|
4
4
|
you may not use this file except in compliance with the License.
|
data/README.md
ADDED
@@ -0,0 +1,95 @@
|
|
1
|
+
# Logstash Plugin
|
2
|
+
|
3
|
+
This is a plugin for [Logstash](https://github.com/elasticsearch/logstash).
|
4
|
+
|
5
|
+
It is fully free and fully open source. The license is Apache 2.0, meaning you are pretty much free to use it however you want in whatever way.
|
6
|
+
|
7
|
+
## Documentation
|
8
|
+
|
9
|
+
Logstash provides infrastructure to automatically generate documentation for this plugin. We use the asciidoc format to write documentation so any comments in the source code will be first converted into asciidoc and then into html. All plugin documentation are placed under one [central location](http://www.elasticsearch.org/guide/en/logstash/current/).
|
10
|
+
|
11
|
+
- For formatting code or config example, you can use the asciidoc `[source,ruby]` directive
|
12
|
+
- For more asciidoc formatting tips, see the excellent reference here https://github.com/elasticsearch/docs#asciidoc-guide
|
13
|
+
|
14
|
+
## Need Help?
|
15
|
+
|
16
|
+
Need help? Try #logstash on freenode IRC or the logstash-users@googlegroups.com mailing list.
|
17
|
+
|
18
|
+
## Developing
|
19
|
+
|
20
|
+
### 1. Plugin Developement and Testing
|
21
|
+
|
22
|
+
#### Code
|
23
|
+
- To get started, you'll need JRuby with the Bundler gem installed.
|
24
|
+
|
25
|
+
- Create a new plugin or clone and existing from the GitHub [logstash-plugins](https://github.com/logstash-plugins) organization.
|
26
|
+
|
27
|
+
- Install dependencies
|
28
|
+
```sh
|
29
|
+
bundle install
|
30
|
+
```
|
31
|
+
|
32
|
+
#### Test
|
33
|
+
|
34
|
+
```sh
|
35
|
+
bundle exec rspec
|
36
|
+
```
|
37
|
+
|
38
|
+
The Logstash code required to run the tests/specs is specified in the `Gemfile` by the line similar to:
|
39
|
+
```ruby
|
40
|
+
gem "logstash", :github => "elasticsearch/logstash", :branch => "1.5"
|
41
|
+
```
|
42
|
+
To test against another version or a local Logstash, edit the `Gemfile` to specify an alternative location, for example:
|
43
|
+
```ruby
|
44
|
+
gem "logstash", :github => "elasticsearch/logstash", :ref => "master"
|
45
|
+
```
|
46
|
+
```ruby
|
47
|
+
gem "logstash", :path => "/your/local/logstash"
|
48
|
+
```
|
49
|
+
|
50
|
+
Then update your dependencies and run your tests:
|
51
|
+
|
52
|
+
```sh
|
53
|
+
bundle install
|
54
|
+
bundle exec rspec
|
55
|
+
```
|
56
|
+
|
57
|
+
### 2. Running your unpublished Plugin in Logstash
|
58
|
+
|
59
|
+
#### 2.1 Run in a local Logstash clone
|
60
|
+
|
61
|
+
- Edit Logstash `tools/Gemfile` and add the local plugin path, for example:
|
62
|
+
```ruby
|
63
|
+
gem "logstash-filter-awesome", :path => "/your/local/logstash-filter-awesome"
|
64
|
+
```
|
65
|
+
- Update Logstash dependencies
|
66
|
+
```sh
|
67
|
+
rake vendor:gems
|
68
|
+
```
|
69
|
+
- Run Logstash with your plugin
|
70
|
+
```sh
|
71
|
+
bin/logstash -e 'filter {awesome {}}'
|
72
|
+
```
|
73
|
+
At this point any modifications to the plugin code will be applied to this local Logstash setup. After modifying the plugin, simply rerun Logstash.
|
74
|
+
|
75
|
+
#### 2.2 Run in an installed Logstash
|
76
|
+
|
77
|
+
- Build your plugin gem
|
78
|
+
```sh
|
79
|
+
gem build logstash-filter-awesome.gemspec
|
80
|
+
```
|
81
|
+
- Install the plugin from the Logstash home
|
82
|
+
```sh
|
83
|
+
bin/plugin install /your/local/plugin/logstash-filter-awesome.gem
|
84
|
+
```
|
85
|
+
- Start Logstash and proceed to test the plugin
|
86
|
+
|
87
|
+
## Contributing
|
88
|
+
|
89
|
+
All contributions are welcome: ideas, patches, documentation, bug reports, complaints, and even something you drew up on a napkin.
|
90
|
+
|
91
|
+
Programming is not a required skill. Whatever you've seen about open source and maintainers or community members saying "send patches or die" - you will not see that here.
|
92
|
+
|
93
|
+
It is more important to me that you are able to contribute.
|
94
|
+
|
95
|
+
For more information about contributing, see the [CONTRIBUTING](https://github.com/elasticsearch/logstash/blob/master/CONTRIBUTING.md) file.
|
@@ -13,7 +13,6 @@ require "tempfile"
|
|
13
13
|
# <https://github.com/tobie/ua-parser/>.
|
14
14
|
class LogStash::Filters::UserAgent < LogStash::Filters::Base
|
15
15
|
config_name "useragent"
|
16
|
-
milestone 3
|
17
16
|
|
18
17
|
# The field containing the user agent string. If this field is an
|
19
18
|
# array, only the first value will be used.
|
@@ -1,7 +1,7 @@
|
|
1
1
|
Gem::Specification.new do |s|
|
2
2
|
|
3
3
|
s.name = 'logstash-filter-useragent'
|
4
|
-
s.version = '0.1.
|
4
|
+
s.version = '0.1.3'
|
5
5
|
s.licenses = ['Apache License (2.0)']
|
6
6
|
s.summary = "Parse user agent strings into structured data based on BrowserScope data"
|
7
7
|
s.description = "This gem is a logstash plugin required to be installed on top of the Logstash core pipeline using $LS_HOME/bin/plugin install gemname. This gem is not a stand-alone program"
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: logstash-filter-useragent
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Elasticsearch
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2015-01-27 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
requirement: !ruby/object:Gem::Requirement
|
@@ -65,13 +65,14 @@ extensions: []
|
|
65
65
|
extra_rdoc_files: []
|
66
66
|
files:
|
67
67
|
- .gitignore
|
68
|
+
- CONTRIBUTORS
|
68
69
|
- Gemfile
|
69
70
|
- LICENSE
|
71
|
+
- README.md
|
70
72
|
- Rakefile
|
71
73
|
- lib/logstash/filters/useragent.rb
|
72
74
|
- logstash-filter-useragent.gemspec
|
73
75
|
- spec/filters/useragent_spec.rb
|
74
|
-
- vendor/regexes.yaml
|
75
76
|
homepage: http://www.elasticsearch.org/guide/en/logstash/current/index.html
|
76
77
|
licenses:
|
77
78
|
- Apache License (2.0)
|
data/vendor/regexes.yaml
DELETED
@@ -1,1335 +0,0 @@
|
|
1
|
-
user_agent_parsers:
|
2
|
-
#### SPECIAL CASES TOP ####
|
3
|
-
|
4
|
-
# HbbTV standard defines what features the browser should understand.
|
5
|
-
# but it's like targeting "HTML5 browsers", effective browser support depends on the model
|
6
|
-
# See os_parsers if you want to target a specific TV
|
7
|
-
- regex: '(HbbTV)/(\d+)\.(\d+)\.(\d+) \('
|
8
|
-
|
9
|
-
# must go before Firefox to catch Chimera/SeaMonkey/Camino
|
10
|
-
- regex: '(Chimera|SeaMonkey|Camino)/(\d+)\.(\d+)\.?([ab]?\d+[a-z]*)?'
|
11
|
-
|
12
|
-
# Firefox
|
13
|
-
- regex: '(Pale[Mm]oon)/(\d+)\.(\d+)\.?(\d+)?'
|
14
|
-
family_replacement: 'Pale Moon (Firefox Variant)'
|
15
|
-
- regex: '(Fennec)/(\d+)\.(\d+)\.?([ab]?\d+[a-z]*)'
|
16
|
-
family_replacement: 'Firefox Mobile'
|
17
|
-
- regex: '(Fennec)/(\d+)\.(\d+)(pre)'
|
18
|
-
family_replacement: 'Firefox Mobile'
|
19
|
-
- regex: '(Fennec)/(\d+)\.(\d+)'
|
20
|
-
family_replacement: 'Firefox Mobile'
|
21
|
-
- regex: 'Mobile.*(Firefox)/(\d+)\.(\d+)'
|
22
|
-
family_replacement: 'Firefox Mobile'
|
23
|
-
- regex: '(Namoroka|Shiretoko|Minefield)/(\d+)\.(\d+)\.(\d+(?:pre)?)'
|
24
|
-
family_replacement: 'Firefox ($1)'
|
25
|
-
- regex: '(Firefox)/(\d+)\.(\d+)(a\d+[a-z]*)'
|
26
|
-
family_replacement: 'Firefox Alpha'
|
27
|
-
- regex: '(Firefox)/(\d+)\.(\d+)(b\d+[a-z]*)'
|
28
|
-
family_replacement: 'Firefox Beta'
|
29
|
-
- regex: '(Firefox)-(?:\d+\.\d+)?/(\d+)\.(\d+)(a\d+[a-z]*)'
|
30
|
-
family_replacement: 'Firefox Alpha'
|
31
|
-
- regex: '(Firefox)-(?:\d+\.\d+)?/(\d+)\.(\d+)(b\d+[a-z]*)'
|
32
|
-
family_replacement: 'Firefox Beta'
|
33
|
-
- regex: '(Namoroka|Shiretoko|Minefield)/(\d+)\.(\d+)([ab]\d+[a-z]*)?'
|
34
|
-
family_replacement: 'Firefox ($1)'
|
35
|
-
- regex: '(Firefox).*Tablet browser (\d+)\.(\d+)\.(\d+)'
|
36
|
-
family_replacement: 'MicroB'
|
37
|
-
- regex: '(MozillaDeveloperPreview)/(\d+)\.(\d+)([ab]\d+[a-z]*)?'
|
38
|
-
|
39
|
-
# e.g.: Flock/2.0b2
|
40
|
-
- regex: '(Flock)/(\d+)\.(\d+)(b\d+?)'
|
41
|
-
|
42
|
-
# RockMelt
|
43
|
-
- regex: '(RockMelt)/(\d+)\.(\d+)\.(\d+)'
|
44
|
-
|
45
|
-
# e.g.: Fennec/0.9pre
|
46
|
-
- regex: '(Navigator)/(\d+)\.(\d+)\.(\d+)'
|
47
|
-
family_replacement: 'Netscape'
|
48
|
-
|
49
|
-
- regex: '(Navigator)/(\d+)\.(\d+)([ab]\d+)'
|
50
|
-
family_replacement: 'Netscape'
|
51
|
-
|
52
|
-
- regex: '(Netscape6)/(\d+)\.(\d+)\.?([ab]?\d+)?'
|
53
|
-
family_replacement: 'Netscape'
|
54
|
-
|
55
|
-
- regex: '(MyIBrow)/(\d+)\.(\d+)'
|
56
|
-
family_replacement: 'My Internet Browser'
|
57
|
-
|
58
|
-
# Opera will stop at 9.80 and hide the real version in the Version string.
|
59
|
-
# see: http://dev.opera.com/articles/view/opera-ua-string-changes/
|
60
|
-
- regex: '(Opera Tablet).*Version/(\d+)\.(\d+)(?:\.(\d+))?'
|
61
|
-
- regex: '(Opera)/.+Opera Mobi.+Version/(\d+)\.(\d+)'
|
62
|
-
family_replacement: 'Opera Mobile'
|
63
|
-
- regex: '(Opera)/(\d+)\.(\d+).+Opera Mobi'
|
64
|
-
family_replacement: 'Opera Mobile'
|
65
|
-
- regex: 'Opera Mobi.+(Opera)(?:/|\s+)(\d+)\.(\d+)'
|
66
|
-
family_replacement: 'Opera Mobile'
|
67
|
-
- regex: 'Opera Mobi'
|
68
|
-
family_replacement: 'Opera Mobile'
|
69
|
-
- regex: '(Opera Mini)(?:/att)?/(\d+)\.(\d+)'
|
70
|
-
- regex: '(Opera)/9.80.*Version/(\d+)\.(\d+)(?:\.(\d+))?'
|
71
|
-
|
72
|
-
# Opera 14 for Android uses a WebKit render engine.
|
73
|
-
- regex: '(?:Mobile Safari).*(OPR)/(\d+)\.(\d+)\.(\d+)'
|
74
|
-
family_replacement: 'Opera Mobile'
|
75
|
-
|
76
|
-
# Opera 15 for Desktop is similar to Chrome but includes an "OPR" Version string.
|
77
|
-
- regex: '(?:Chrome).*(OPR)/(\d+)\.(\d+)\.(\d+)'
|
78
|
-
family_replacement: 'Opera'
|
79
|
-
|
80
|
-
# Palm WebOS looks a lot like Safari.
|
81
|
-
- regex: '(hpw|web)OS/(\d+)\.(\d+)(?:\.(\d+))?'
|
82
|
-
family_replacement: 'webOS Browser'
|
83
|
-
|
84
|
-
# LuaKit has no version info.
|
85
|
-
# http://luakit.org/projects/luakit/
|
86
|
-
- regex: '(luakit)'
|
87
|
-
family_replacement: 'LuaKit'
|
88
|
-
|
89
|
-
# Snowshoe
|
90
|
-
- regex: '(Snowshoe)/(\d+)\.(\d+).(\d+)'
|
91
|
-
|
92
|
-
# Lightning (for Thunderbird)
|
93
|
-
# http://www.mozilla.org/projects/calendar/lightning/
|
94
|
-
- regex: '(Lightning)/(\d+)\.(\d+)\.?((?:[ab]?\d+[a-z]*)|(?:\d*))'
|
95
|
-
|
96
|
-
# Swiftfox
|
97
|
-
- regex: '(Firefox)/(\d+)\.(\d+)\.(\d+(?:pre)?) \(Swiftfox\)'
|
98
|
-
family_replacement: 'Swiftfox'
|
99
|
-
- regex: '(Firefox)/(\d+)\.(\d+)([ab]\d+[a-z]*)? \(Swiftfox\)'
|
100
|
-
family_replacement: 'Swiftfox'
|
101
|
-
|
102
|
-
# Rekonq
|
103
|
-
- regex: '(rekonq)/(\d+)\.(\d+)\.?(\d+)? Safari'
|
104
|
-
family_replacement: 'Rekonq'
|
105
|
-
- regex: 'rekonq'
|
106
|
-
family_replacement: 'Rekonq'
|
107
|
-
|
108
|
-
# Conkeror lowercase/uppercase
|
109
|
-
# http://conkeror.org/
|
110
|
-
- regex: '(conkeror|Conkeror)/(\d+)\.(\d+)\.?(\d+)?'
|
111
|
-
family_replacement: 'Conkeror'
|
112
|
-
|
113
|
-
# catches lower case konqueror
|
114
|
-
- regex: '(konqueror)/(\d+)\.(\d+)\.(\d+)'
|
115
|
-
family_replacement: 'Konqueror'
|
116
|
-
|
117
|
-
- regex: '(WeTab)-Browser'
|
118
|
-
|
119
|
-
- regex: '(Comodo_Dragon)/(\d+)\.(\d+)\.(\d+)'
|
120
|
-
family_replacement: 'Comodo Dragon'
|
121
|
-
|
122
|
-
# Bots
|
123
|
-
- regex: '(YottaaMonitor|BrowserMob|HttpMonitor|YandexBot|Slurp|BingPreview|PagePeeker|ThumbShotsBot|WebThumb|URL2PNG|ZooShot|GomezA|Catchpoint bot|Willow Internet Crawler|Google SketchUp|Read%20Later)'
|
124
|
-
|
125
|
-
- regex: '(Symphony) (\d+).(\d+)'
|
126
|
-
|
127
|
-
- regex: '(Minimo)'
|
128
|
-
|
129
|
-
- regex: 'PLAYSTATION 3.+WebKit'
|
130
|
-
family_replacement: 'NetFront NX'
|
131
|
-
- regex: 'PLAYSTATION 3'
|
132
|
-
family_replacement: 'NetFront'
|
133
|
-
- regex: '(PlayStation Portable)'
|
134
|
-
family_replacement: 'NetFront'
|
135
|
-
- regex: '(PlayStation Vita)'
|
136
|
-
family_replacement: 'NetFront NX'
|
137
|
-
|
138
|
-
- regex: 'AppleWebKit.+ (NX)/(\d+)\.(\d+)\.(\d+)'
|
139
|
-
family_replacement: 'NetFront NX'
|
140
|
-
- regex: '(Nintendo 3DS)'
|
141
|
-
family_replacement: 'NetFront NX'
|
142
|
-
|
143
|
-
# Amazon Silk, should go before Safari and Chrome Mobile
|
144
|
-
- regex: '(Silk)/(\d+)\.(\d+)(?:\.([0-9\-]+))?'
|
145
|
-
family_replacement: 'Amazon Silk'
|
146
|
-
|
147
|
-
|
148
|
-
# @ref: http://www.puffinbrowser.com
|
149
|
-
- regex: '(Puffin)/(\d+)\.(\d+)(?:\.(\d+))?'
|
150
|
-
|
151
|
-
# Chrome Mobile
|
152
|
-
- regex: '(CrMo)/(\d+)\.(\d+)\.(\d+)\.(\d+)'
|
153
|
-
family_replacement: 'Chrome Mobile'
|
154
|
-
- regex: '(CriOS)/(\d+)\.(\d+)\.(\d+)\.(\d+)'
|
155
|
-
family_replacement: 'Chrome Mobile iOS'
|
156
|
-
- regex: '(Chrome)/(\d+)\.(\d+)\.(\d+)\.(\d+) Mobile'
|
157
|
-
family_replacement: 'Chrome Mobile'
|
158
|
-
|
159
|
-
# Chrome Frame must come before MSIE.
|
160
|
-
- regex: '(chromeframe)/(\d+)\.(\d+)\.(\d+)'
|
161
|
-
family_replacement: 'Chrome Frame'
|
162
|
-
|
163
|
-
# UC Browser
|
164
|
-
- regex: '(UCBrowser)[ /](\d+)\.(\d+)\.(\d+)'
|
165
|
-
family_replacement: 'UC Browser'
|
166
|
-
- regex: '(UC Browser)[ /](\d+)\.(\d+)\.(\d+)'
|
167
|
-
- regex: '(UC Browser|UCBrowser|UCWEB)(\d+)\.(\d+)\.(\d+)'
|
168
|
-
family_replacement: 'UC Browser'
|
169
|
-
|
170
|
-
# Tizen Browser (second case included in browser/major.minor regex)
|
171
|
-
- regex: '(SLP Browser)/(\d+)\.(\d+)'
|
172
|
-
family_replacement: 'Tizen Browser'
|
173
|
-
|
174
|
-
# Sogou Explorer 2.X
|
175
|
-
- regex: '(SE 2\.X) MetaSr (\d+)\.(\d+)'
|
176
|
-
family_replacement: 'Sogou Explorer'
|
177
|
-
|
178
|
-
# Baidu Browsers (desktop spoofs chrome & IE, explorer is mobile)
|
179
|
-
- regex: '(baidubrowser)[/\s](\d+)'
|
180
|
-
family_replacement: 'Baidu Browser'
|
181
|
-
- regex: '(FlyFlow)/(\d+)\.(\d+)'
|
182
|
-
family_replacement: 'Baidu Explorer'
|
183
|
-
|
184
|
-
# QQ Browsers
|
185
|
-
- regex: '(MQQBrowser/Mini)(?:(\d+)(?:\.(\d+)(?:\.(\d+))?)?)?'
|
186
|
-
family_replacement: 'QQ Browser Mini'
|
187
|
-
- regex: '(MQQBrowser)(?:/(\d+)(?:\.(\d+)(?:\.(\d+))?)?)?'
|
188
|
-
family_replacement: 'QQ Browser Mobile'
|
189
|
-
- regex: '(QQBrowser)(?:/(\d+)(?:\.(\d+)\.(\d+)(?:\.(\d+))?)?)?'
|
190
|
-
family_replacement: 'QQ Browser'
|
191
|
-
|
192
|
-
# Pingdom
|
193
|
-
- regex: '(Pingdom.com_bot_version_)(\d+)\.(\d+)'
|
194
|
-
family_replacement: 'PingdomBot'
|
195
|
-
|
196
|
-
# Facebook
|
197
|
-
- regex: '(facebookexternalhit)/(\d+)\.(\d+)'
|
198
|
-
family_replacement: 'FacebookBot'
|
199
|
-
|
200
|
-
# LinkedIn
|
201
|
-
- regex: '(LinkedInBot)/(\d+)\.(\d+)'
|
202
|
-
family_replacement: 'LinkedInBot'
|
203
|
-
|
204
|
-
# Twitterbot
|
205
|
-
- regex: '(Twitterbot)/(\d+)\.(\d+)'
|
206
|
-
family_replacement: 'TwitterBot'
|
207
|
-
|
208
|
-
# Google Plus
|
209
|
-
- regex: 'Google.*/\+/web/snippet'
|
210
|
-
family_replacement: 'GooglePlusBot'
|
211
|
-
|
212
|
-
# Rackspace Monitoring
|
213
|
-
- regex: '(Rackspace Monitoring)/(\d+)\.(\d+)'
|
214
|
-
family_replacement: 'RackspaceBot'
|
215
|
-
|
216
|
-
# PyAMF
|
217
|
-
- regex: '(PyAMF)/(\d+)\.(\d+)\.(\d+)'
|
218
|
-
|
219
|
-
# Yandex Browser
|
220
|
-
- regex: '(YaBrowser)/(\d+)\.(\d+)\.(\d+)'
|
221
|
-
family_replacement: 'Yandex Browser'
|
222
|
-
|
223
|
-
# Mail.ru Amigo/Internet Browser (Chromium-based)
|
224
|
-
- regex: '(Chrome)/(\d+)\.(\d+)\.(\d+).* MRCHROME'
|
225
|
-
family_replacement: 'Mail.ru Chromium Browser'
|
226
|
-
|
227
|
-
# AOL Browser (IE-based)
|
228
|
-
- regex: '(AOL) (\d+)\.(\d+); AOLBuild (\d+)'
|
229
|
-
|
230
|
-
#### END SPECIAL CASES TOP ####
|
231
|
-
|
232
|
-
#### MAIN CASES - this catches > 50% of all browsers ####
|
233
|
-
|
234
|
-
# Browser/major_version.minor_version.beta_version
|
235
|
-
- regex: '(AdobeAIR|FireWeb|Jasmine|ANTGalio|Midori|Fresco|Lobo|PaleMoon|Maxthon|Lynx|OmniWeb|Dillo|Camino|Demeter|Fluid|Fennec|Epiphany|Shiira|Sunrise|Flock|Netscape|Lunascape|WebPilot|NetFront|Netfront|Konqueror|SeaMonkey|Kazehakase|Vienna|Iceape|Iceweasel|IceWeasel|Iron|K-Meleon|Sleipnir|Galeon|GranParadiso|Opera Mini|iCab|NetNewsWire|ThunderBrowse|Iris|UP\.Browser|Bunjalloo|Google Earth|Raven for Mac|Openwave)/(\d+)\.(\d+)\.(\d+)'
|
236
|
-
|
237
|
-
# Outlook 2007
|
238
|
-
- regex: 'MSOffice 12'
|
239
|
-
family_replacement: 'Outlook'
|
240
|
-
v1_replacement: '2007'
|
241
|
-
|
242
|
-
# Outlook 2010
|
243
|
-
- regex: 'MSOffice 14'
|
244
|
-
family_replacement: 'Outlook'
|
245
|
-
v1_replacement: '2010'
|
246
|
-
|
247
|
-
# Outlook 2013
|
248
|
-
- regex: 'Microsoft Outlook 15\.\d+\.\d+'
|
249
|
-
family_replacement: 'Outlook'
|
250
|
-
v1_replacement: '2013'
|
251
|
-
|
252
|
-
# Apple Air Mail
|
253
|
-
- regex: '(Airmail) (\d+)\.(\d+)(?:\.(\d+))?'
|
254
|
-
|
255
|
-
# Thunderbird
|
256
|
-
- regex: '(Thunderbird)/(\d+)\.(\d+)\.(\d+(?:pre)?)'
|
257
|
-
family_replacement: 'Thunderbird'
|
258
|
-
|
259
|
-
# Chrome/Chromium/major_version.minor_version.beta_version
|
260
|
-
- regex: '(Chromium|Chrome)/(\d+)\.(\d+)\.(\d+)'
|
261
|
-
|
262
|
-
# Dolphin Browser
|
263
|
-
# @ref: http://www.dolphin.com
|
264
|
-
- regex: '\b(Dolphin)(?: |HDCN/|/INT\-)(\d+)\.(\d+)\.?(\d+)?'
|
265
|
-
|
266
|
-
# Browser/major_version.minor_version
|
267
|
-
- regex: '(bingbot|Bolt|Jasmine|IceCat|Skyfire|Midori|Maxthon|Lynx|Arora|IBrowse|Dillo|Camino|Shiira|Fennec|Phoenix|Chrome|Flock|Netscape|Lunascape|Epiphany|WebPilot|Opera Mini|Opera|NetFront|Netfront|Konqueror|Googlebot|SeaMonkey|Kazehakase|Vienna|Iceape|Iceweasel|IceWeasel|Iron|K-Meleon|Sleipnir|Galeon|GranParadiso|iCab|NetNewsWire|Space Bison|Stainless|Orca|Dolfin|BOLT|Minimo|Tizen Browser|Polaris|Abrowser|Planetweb|ICE Browser|mDolphin)/(\d+)\.(\d+)\.?(\d+)?'
|
268
|
-
|
269
|
-
# Chrome/Chromium/major_version.minor_version
|
270
|
-
- regex: '(Chromium|Chrome)/(\d+)\.(\d+)'
|
271
|
-
|
272
|
-
##########
|
273
|
-
# IE Mobile needs to happen before Android to catch cases such as:
|
274
|
-
# Mozilla/5.0 (Mobile; Windows Phone 8.1; Android 4.0; ARM; Trident/7.0; Touch; rv:11.0; IEMobile/11.0; NOKIA; Lumia 920)...
|
275
|
-
# Mozilla/5.0 (Mobile; Windows Phone 8.1; Android 4.0; ARM; Trident/7.0; Touch; rv:11.0; IEMobile/11.0; NOKIA; Lumia 920; ANZ821)...
|
276
|
-
# Mozilla/5.0 (Mobile; Windows Phone 8.1; Android 4.0; ARM; Trident/7.0; Touch; rv:11.0; IEMobile/11.0; NOKIA; Lumia 920; Orange)...
|
277
|
-
# Mozilla/5.0 (Mobile; Windows Phone 8.1; Android 4.0; ARM; Trident/7.0; Touch; rv:11.0; IEMobile/11.0; NOKIA; Lumia 920; Vodafone)...
|
278
|
-
##########
|
279
|
-
|
280
|
-
# IE Mobile
|
281
|
-
- regex: '(IEMobile)[ /](\d+)\.(\d+)'
|
282
|
-
family_replacement: 'IE Mobile'
|
283
|
-
|
284
|
-
# Browser major_version.minor_version.beta_version (space instead of slash)
|
285
|
-
- regex: '(iRider|Crazy Browser|SkipStone|iCab|Lunascape|Sleipnir|Maemo Browser) (\d+)\.(\d+)\.(\d+)'
|
286
|
-
# Browser major_version.minor_version (space instead of slash)
|
287
|
-
- regex: '(iCab|Lunascape|Opera|Android|Jasmine|Polaris) (\d+)\.(\d+)\.?(\d+)?'
|
288
|
-
|
289
|
-
# Kindle WebKit
|
290
|
-
- regex: '(Kindle)/(\d+)\.(\d+)'
|
291
|
-
|
292
|
-
# weird android UAs
|
293
|
-
- regex: '(Android) Donut'
|
294
|
-
v1_replacement: '1'
|
295
|
-
v2_replacement: '2'
|
296
|
-
|
297
|
-
- regex: '(Android) Eclair'
|
298
|
-
v1_replacement: '2'
|
299
|
-
v2_replacement: '1'
|
300
|
-
|
301
|
-
- regex: '(Android) Froyo'
|
302
|
-
v1_replacement: '2'
|
303
|
-
v2_replacement: '2'
|
304
|
-
|
305
|
-
- regex: '(Android) Gingerbread'
|
306
|
-
v1_replacement: '2'
|
307
|
-
v2_replacement: '3'
|
308
|
-
|
309
|
-
- regex: '(Android) Honeycomb'
|
310
|
-
v1_replacement: '3'
|
311
|
-
|
312
|
-
# desktop mode
|
313
|
-
# http://www.anandtech.com/show/3982/windows-phone-7-review
|
314
|
-
- regex: '(MSIE) (\d+)\.(\d+).*XBLWP7'
|
315
|
-
family_replacement: 'IE Large Screen'
|
316
|
-
|
317
|
-
#### END MAIN CASES ####
|
318
|
-
|
319
|
-
#### SPECIAL CASES ####
|
320
|
-
- regex: '(Obigo)InternetBrowser'
|
321
|
-
- regex: '(Obigo)\-Browser'
|
322
|
-
- regex: '(Obigo|OBIGO)[^\d]*(\d+)(?:.(\d+))?'
|
323
|
-
family_replacement: 'Obigo'
|
324
|
-
|
325
|
-
- regex: '(MAXTHON|Maxthon) (\d+)\.(\d+)'
|
326
|
-
family_replacement: 'Maxthon'
|
327
|
-
- regex: '(Maxthon|MyIE2|Uzbl|Shiira)'
|
328
|
-
v1_replacement: '0'
|
329
|
-
|
330
|
-
- regex: '(BrowseX) \((\d+)\.(\d+)\.(\d+)'
|
331
|
-
|
332
|
-
- regex: '(NCSA_Mosaic)/(\d+)\.(\d+)'
|
333
|
-
family_replacement: 'NCSA Mosaic'
|
334
|
-
|
335
|
-
# Polaris/d.d is above
|
336
|
-
- regex: '(POLARIS)/(\d+)\.(\d+)'
|
337
|
-
family_replacement: 'Polaris'
|
338
|
-
- regex: '(Embider)/(\d+)\.(\d+)'
|
339
|
-
family_replacement: 'Polaris'
|
340
|
-
|
341
|
-
- regex: '(BonEcho)/(\d+)\.(\d+)\.?([ab]?\d+)?'
|
342
|
-
family_replacement: 'Bon Echo'
|
343
|
-
|
344
|
-
# @note: iOS / OSX Applications
|
345
|
-
- regex: '(CFNetwork)(?:/(\d+)\.(\d+)\.?(\d+)?)?'
|
346
|
-
family_replacement: 'CFNetwork'
|
347
|
-
|
348
|
-
- regex: '(iPod).+Version/(\d+)\.(\d+)\.(\d+)'
|
349
|
-
family_replacement: 'Mobile Safari'
|
350
|
-
- regex: '(iPod).*Version/(\d+)\.(\d+)'
|
351
|
-
family_replacement: 'Mobile Safari'
|
352
|
-
- regex: '(iPhone).*Version/(\d+)\.(\d+)\.(\d+)'
|
353
|
-
family_replacement: 'Mobile Safari'
|
354
|
-
- regex: '(iPhone).*Version/(\d+)\.(\d+)'
|
355
|
-
family_replacement: 'Mobile Safari'
|
356
|
-
- regex: '(iPad).*Version/(\d+)\.(\d+)\.(\d+)'
|
357
|
-
family_replacement: 'Mobile Safari'
|
358
|
-
- regex: '(iPad).*Version/(\d+)\.(\d+)'
|
359
|
-
family_replacement: 'Mobile Safari'
|
360
|
-
- regex: '(iPod|iPhone|iPad);.*CPU.*OS (\d+)_(\d+)(?:_(\d+))?.*Mobile'
|
361
|
-
family_replacement: 'Mobile Safari'
|
362
|
-
- regex: '(iPod|iPhone|iPad)'
|
363
|
-
family_replacement: 'Mobile Safari'
|
364
|
-
|
365
|
-
- regex: '(AvantGo) (\d+).(\d+)'
|
366
|
-
|
367
|
-
- regex: '(OneBrowser)/(\d+).(\d+)'
|
368
|
-
family_replacement: 'ONE Browser'
|
369
|
-
|
370
|
-
- regex: '(Avant)'
|
371
|
-
v1_replacement: '1'
|
372
|
-
|
373
|
-
# This is the Tesla Model S (see similar entry in device parsers)
|
374
|
-
- regex: '(QtCarBrowser)'
|
375
|
-
v1_replacement: '1'
|
376
|
-
|
377
|
-
- regex: '^(iBrowser/Mini)(\d+).(\d+)'
|
378
|
-
family_replacement: 'iBrowser Mini'
|
379
|
-
- regex: '^(iBrowser|iRAPP)/(\d+).(\d+)'
|
380
|
-
|
381
|
-
# nokia browsers
|
382
|
-
# based on: http://www.developer.nokia.com/Community/Wiki/User-Agent_headers_for_Nokia_devices
|
383
|
-
- regex: '^(Nokia)'
|
384
|
-
family_replacement: 'Nokia Services (WAP) Browser'
|
385
|
-
- regex: '(NokiaBrowser)/(\d+)\.(\d+).(\d+)\.(\d+)'
|
386
|
-
family_replacement: 'Nokia Browser'
|
387
|
-
- regex: '(NokiaBrowser)/(\d+)\.(\d+).(\d+)'
|
388
|
-
family_replacement: 'Nokia Browser'
|
389
|
-
- regex: '(NokiaBrowser)/(\d+)\.(\d+)'
|
390
|
-
family_replacement: 'Nokia Browser'
|
391
|
-
- regex: '(BrowserNG)/(\d+)\.(\d+).(\d+)'
|
392
|
-
family_replacement: 'Nokia Browser'
|
393
|
-
- regex: '(Series60)/5\.0'
|
394
|
-
family_replacement: 'Nokia Browser'
|
395
|
-
v1_replacement: '7'
|
396
|
-
v2_replacement: '0'
|
397
|
-
- regex: '(Series60)/(\d+)\.(\d+)'
|
398
|
-
family_replacement: 'Nokia OSS Browser'
|
399
|
-
- regex: '(S40OviBrowser)/(\d+)\.(\d+)\.(\d+)\.(\d+)'
|
400
|
-
family_replacement: 'Ovi Browser'
|
401
|
-
- regex: '(Nokia)[EN]?(\d+)'
|
402
|
-
|
403
|
-
# BlackBerry devices
|
404
|
-
- regex: '(BB10);'
|
405
|
-
family_replacement: 'BlackBerry WebKit'
|
406
|
-
- regex: '(PlayBook).+RIM Tablet OS (\d+)\.(\d+)\.(\d+)'
|
407
|
-
family_replacement: 'BlackBerry WebKit'
|
408
|
-
- regex: '(Black[bB]erry).+Version/(\d+)\.(\d+)\.(\d+)'
|
409
|
-
family_replacement: 'BlackBerry WebKit'
|
410
|
-
- regex: '(Black[bB]erry)\s?(\d+)'
|
411
|
-
family_replacement: 'BlackBerry'
|
412
|
-
|
413
|
-
- regex: '(OmniWeb)/v(\d+)\.(\d+)'
|
414
|
-
|
415
|
-
- regex: '(Blazer)/(\d+)\.(\d+)'
|
416
|
-
family_replacement: 'Palm Blazer'
|
417
|
-
|
418
|
-
- regex: '(Pre)/(\d+)\.(\d+)'
|
419
|
-
family_replacement: 'Palm Pre'
|
420
|
-
|
421
|
-
# fork of Links
|
422
|
-
- regex: '(ELinks)/(\d+)\.(\d+)'
|
423
|
-
- regex: '(ELinks) \((\d+)\.(\d+)'
|
424
|
-
- regex: '(Links) \((\d+)\.(\d+)'
|
425
|
-
|
426
|
-
- regex: '(QtWeb) Internet Browser/(\d+)\.(\d+)'
|
427
|
-
|
428
|
-
#- regex: '\(iPad;.+(Version)/(\d+)\.(\d+)(?:\.(\d+))?.*Safari/'
|
429
|
-
# family_replacement: 'iPad'
|
430
|
-
|
431
|
-
# Phantomjs, should go before Safari
|
432
|
-
- regex: '(PhantomJS)/(\d+)\.(\d+)\.(\d+)'
|
433
|
-
|
434
|
-
# WebKit Nightly
|
435
|
-
- regex: '(AppleWebKit)/(\d+)\.?(\d+)?\+ .* Safari'
|
436
|
-
family_replacement: 'WebKit Nightly'
|
437
|
-
|
438
|
-
# Safari
|
439
|
-
- regex: '(Version)/(\d+)\.(\d+)(?:\.(\d+))?.*Safari/'
|
440
|
-
family_replacement: 'Safari'
|
441
|
-
# Safari didn't provide "Version/d.d.d" prior to 3.0
|
442
|
-
- regex: '(Safari)/\d+'
|
443
|
-
|
444
|
-
- regex: '(OLPC)/Update(\d+)\.(\d+)'
|
445
|
-
|
446
|
-
- regex: '(OLPC)/Update()\.(\d+)'
|
447
|
-
v1_replacement: '0'
|
448
|
-
|
449
|
-
- regex: '(SEMC\-Browser)/(\d+)\.(\d+)'
|
450
|
-
|
451
|
-
- regex: '(Teleca)'
|
452
|
-
family_replacement: 'Teleca Browser'
|
453
|
-
|
454
|
-
- regex: '(Phantom)/V(\d+)\.(\d+)'
|
455
|
-
family_replacement: 'Phantom Browser'
|
456
|
-
|
457
|
-
- regex: 'Trident(.*)rv.(\d+)\.(\d+)'
|
458
|
-
family_replacement: 'IE'
|
459
|
-
|
460
|
-
# Espial
|
461
|
-
- regex: '(Espial)/(\d+)(?:\.(\d+))?(?:\.(\d+))?'
|
462
|
-
|
463
|
-
# Apple Mail
|
464
|
-
|
465
|
-
# apple mail - not directly detectable, have it after Safari stuff
|
466
|
-
- regex: '(AppleWebKit)/(\d+)\.(\d+)\.(\d+)'
|
467
|
-
family_replacement: 'AppleMail'
|
468
|
-
|
469
|
-
# AFTER THE EDGE CASES ABOVE!
|
470
|
-
# AFTER IE11
|
471
|
-
# BEFORE all other IE
|
472
|
-
- regex: '(Firefox)/(\d+)\.(\d+)\.(\d+)'
|
473
|
-
- regex: '(Firefox)/(\d+)\.(\d+)(pre|[ab]\d+[a-z]*)?'
|
474
|
-
|
475
|
-
- regex: '([MS]?IE) (\d+)\.(\d+)'
|
476
|
-
family_replacement: 'IE'
|
477
|
-
|
478
|
-
- regex: '(python-requests)/(\d+)\.(\d+)'
|
479
|
-
family_replacement: 'Python Requests'
|
480
|
-
|
481
|
-
os_parsers:
|
482
|
-
##########
|
483
|
-
# HbbTV vendors
|
484
|
-
##########
|
485
|
-
|
486
|
-
# starts with the easy one : Panasonic seems consistent across years, hope it will continue
|
487
|
-
#HbbTV/1.1.1 (;Panasonic;VIERA 2011;f.532;0071-0802 2000-0000;)
|
488
|
-
#HbbTV/1.1.1 (;Panasonic;VIERA 2012;1.261;0071-3103 2000-0000;)
|
489
|
-
#HbbTV/1.2.1 (;Panasonic;VIERA 2013;3.672;4101-0003 0002-0000;)
|
490
|
-
#- regex: 'HbbTV/\d+\.\d+\.\d+ \(;(Panasonic);VIERA ([0-9]{4});'
|
491
|
-
|
492
|
-
# Sony is consistent too but do not place year like the other
|
493
|
-
# Opera/9.80 (Linux armv7l; HbbTV/1.1.1 (; Sony; KDL32W650A; PKG3.211EUA; 2013;); ) Presto/2.12.362 Version/12.11
|
494
|
-
# Opera/9.80 (Linux mips; U; HbbTV/1.1.1 (; Sony; KDL40HX751; PKG1.902EUA; 2012;);; en) Presto/2.10.250 Version/11.60
|
495
|
-
# Opera/9.80 (Linux mips; U; HbbTV/1.1.1 (; Sony; KDL22EX320; PKG4.017EUA; 2011;);; en) Presto/2.7.61 Version/11.00
|
496
|
-
#- regex: 'HbbTV/\d+\.\d+\.\d+ \(; (Sony);.*;.*; ([0-9]{4});\)'
|
497
|
-
|
498
|
-
|
499
|
-
# LG is consistent too, but we need to add manually the year model
|
500
|
-
#Mozilla/5.0 (Unknown; Linux armv7l) AppleWebKit/537.1+ (KHTML, like Gecko) Safari/537.1+ HbbTV/1.1.1 ( ;LGE ;NetCast 4.0 ;03.20.30 ;1.0M ;)
|
501
|
-
#Mozilla/5.0 (DirectFB; Linux armv7l) AppleWebKit/534.26+ (KHTML, like Gecko) Version/5.0 Safari/534.26+ HbbTV/1.1.1 ( ;LGE ;NetCast 3.0 ;1.0 ;1.0M ;)
|
502
|
-
- regex: 'HbbTV/\d+\.\d+\.\d+ \( ;(LG)E ;NetCast 4.0'
|
503
|
-
os_v1_replacement: '2013'
|
504
|
-
- regex: 'HbbTV/\d+\.\d+\.\d+ \( ;(LG)E ;NetCast 3.0'
|
505
|
-
os_v1_replacement: '2012'
|
506
|
-
|
507
|
-
# Samsung is on its way of normalizing their user-agent
|
508
|
-
# HbbTV/1.1.1 (;Samsung;SmartTV2013;T-FXPDEUC-1102.2;;) WebKit
|
509
|
-
# HbbTV/1.1.1 (;Samsung;SmartTV2013;T-MST12DEUC-1102.1;;) WebKit
|
510
|
-
# HbbTV/1.1.1 (;Samsung;SmartTV2012;;;) WebKit
|
511
|
-
# HbbTV/1.1.1 (;;;;;) Maple_2011
|
512
|
-
- regex: 'HbbTV/1.1.1 \(;;;;;\) Maple_2011'
|
513
|
-
os_replacement: 'Samsung'
|
514
|
-
os_v1_replacement: '2011'
|
515
|
-
# manage the two models of 2013
|
516
|
-
- regex: 'HbbTV/\d+\.\d+\.\d+ \(;(Samsung);SmartTV([0-9]{4});.*FXPDEUC'
|
517
|
-
os_v2_replacement: 'UE40F7000'
|
518
|
-
- regex: 'HbbTV/\d+\.\d+\.\d+ \(;(Samsung);SmartTV([0-9]{4});.*MST12DEUC'
|
519
|
-
os_v2_replacement: 'UE32F4500'
|
520
|
-
# generic Samsung (works starting in 2012)
|
521
|
-
#- regex: 'HbbTV/\d+\.\d+\.\d+ \(;(Samsung);SmartTV([0-9]{4});'
|
522
|
-
|
523
|
-
# Philips : not found any other way than a manual mapping
|
524
|
-
# Opera/9.80 (Linux mips; U; HbbTV/1.1.1 (; Philips; ; ; ; ) CE-HTML/1.0 NETTV/4.1.3 PHILIPSTV/1.1.1; en) Presto/2.10.250 Version/11.60
|
525
|
-
# Opera/9.80 (Linux mips ; U; HbbTV/1.1.1 (; Philips; ; ; ; ) CE-HTML/1.0 NETTV/3.2.1; en) Presto/2.6.33 Version/10.70
|
526
|
-
- regex: 'HbbTV/1.1.1 \(; (Philips);.*NETTV/4'
|
527
|
-
os_v1_replacement: '2013'
|
528
|
-
- regex: 'HbbTV/1.1.1 \(; (Philips);.*NETTV/3'
|
529
|
-
os_v1_replacement: '2012'
|
530
|
-
- regex: 'HbbTV/1.1.1 \(; (Philips);.*NETTV/2'
|
531
|
-
os_v1_replacement: '2011'
|
532
|
-
|
533
|
-
# the HbbTV emulator developers use HbbTV/1.1.1 (;;;;;) firetv-firefox-plugin 1.1.20
|
534
|
-
- regex: 'HbbTV/\d+\.\d+\.\d+.*(firetv)-firefox-plugin (\d+).(\d+).(\d+)'
|
535
|
-
os_replacement: 'FireHbbTV'
|
536
|
-
|
537
|
-
# generic HbbTV, hoping to catch manufacturer name (always after 2nd comma) and the first string that looks like a 2011-2019 year
|
538
|
-
- regex: 'HbbTV/\d+\.\d+\.\d+ \(.*; ?([a-zA-Z]+) ?;.*(201[1-9]).*\)'
|
539
|
-
|
540
|
-
##########
|
541
|
-
# @note: Windows Phone needs to come before Windows NT 6.1 *and* before Android to catch cases such as:
|
542
|
-
# Mozilla/5.0 (Mobile; Windows Phone 8.1; Android 4.0; ARM; Trident/7.0; Touch; rv:11.0; IEMobile/11.0; NOKIA; Lumia 920)...
|
543
|
-
# Mozilla/5.0 (Mobile; Windows Phone 8.1; Android 4.0; ARM; Trident/7.0; Touch; rv:11.0; IEMobile/11.0; NOKIA; Lumia 920; ANZ821)...
|
544
|
-
# Mozilla/5.0 (Mobile; Windows Phone 8.1; Android 4.0; ARM; Trident/7.0; Touch; rv:11.0; IEMobile/11.0; NOKIA; Lumia 920; Orange)...
|
545
|
-
# Mozilla/5.0 (Mobile; Windows Phone 8.1; Android 4.0; ARM; Trident/7.0; Touch; rv:11.0; IEMobile/11.0; NOKIA; Lumia 920; Vodafone)...
|
546
|
-
##########
|
547
|
-
|
548
|
-
- regex: '(Windows Phone) (?:OS[ /])?(\d+)\.(\d+)'
|
549
|
-
|
550
|
-
##########
|
551
|
-
# Android
|
552
|
-
# can actually detect rooted android os. do we care?
|
553
|
-
##########
|
554
|
-
- regex: '(Android)[ \-/](\d+)\.(\d+)(?:[.\-]([a-z0-9]+))?'
|
555
|
-
|
556
|
-
- regex: '(Android) Donut'
|
557
|
-
os_v1_replacement: '1'
|
558
|
-
os_v2_replacement: '2'
|
559
|
-
|
560
|
-
- regex: '(Android) Eclair'
|
561
|
-
os_v1_replacement: '2'
|
562
|
-
os_v2_replacement: '1'
|
563
|
-
|
564
|
-
- regex: '(Android) Froyo'
|
565
|
-
os_v1_replacement: '2'
|
566
|
-
os_v2_replacement: '2'
|
567
|
-
|
568
|
-
- regex: '(Android) Gingerbread'
|
569
|
-
os_v1_replacement: '2'
|
570
|
-
os_v2_replacement: '3'
|
571
|
-
|
572
|
-
- regex: '(Android) Honeycomb'
|
573
|
-
os_v1_replacement: '3'
|
574
|
-
|
575
|
-
# UCWEB
|
576
|
-
- regex: '^UCWEB.*; (Adr) (\d+)\.(\d+)(?:[.\-]([a-z0-9]+))?;'
|
577
|
-
os_replacement: 'Android'
|
578
|
-
- regex: '^UCWEB.*; (iPad OS|iPh OS) (\d+)_(\d+)(?:_(\d+))?;'
|
579
|
-
os_replacement: 'iOS'
|
580
|
-
- regex: '^UCWEB.*; (wds) (\d+)\.(\d+)(?:\.(\d+))?;'
|
581
|
-
os_replacement: 'Windows Phone'
|
582
|
-
# JUC
|
583
|
-
- regex: '^(JUC).*; ?U; ?(?:Android)?(\d+)\.(\d+)(?:[\.\-]([a-z0-9]+))?'
|
584
|
-
os_replacement: 'Android'
|
585
|
-
|
586
|
-
##########
|
587
|
-
# Kindle Android
|
588
|
-
##########
|
589
|
-
- regex: '(Silk-Accelerated=[a-z]{4,5})'
|
590
|
-
os_replacement: 'Android'
|
591
|
-
|
592
|
-
##########
|
593
|
-
# Windows
|
594
|
-
# http://en.wikipedia.org/wiki/Windows_NT#Releases
|
595
|
-
# possibility of false positive when different marketing names share same NT kernel
|
596
|
-
# e.g. windows server 2003 and windows xp
|
597
|
-
# lots of ua strings have Windows NT 4.1 !?!?!?!? !?!? !? !????!?! !!! ??? !?!?! ?
|
598
|
-
# (very) roughly ordered in terms of frequency of occurence of regex (win xp currently most frequent, etc)
|
599
|
-
##########
|
600
|
-
|
601
|
-
# ie mobile desktop mode
|
602
|
-
# spoofs nt 6.1. must come before windows 7
|
603
|
-
- regex: '(XBLWP7)'
|
604
|
-
os_replacement: 'Windows Phone'
|
605
|
-
|
606
|
-
# @note: This needs to come before Windows NT 6.1
|
607
|
-
- regex: '(Windows ?Mobile)'
|
608
|
-
os_replacement: 'Windows Mobile'
|
609
|
-
|
610
|
-
- regex: '(Windows (?:NT 5\.2|NT 5\.1))'
|
611
|
-
os_replacement: 'Windows XP'
|
612
|
-
|
613
|
-
- regex: '(Windows NT 6\.1)'
|
614
|
-
os_replacement: 'Windows 7'
|
615
|
-
|
616
|
-
- regex: '(Windows NT 6\.0)'
|
617
|
-
os_replacement: 'Windows Vista'
|
618
|
-
|
619
|
-
- regex: '(Win 9x 4\.90)'
|
620
|
-
os_replacement: 'Windows ME'
|
621
|
-
|
622
|
-
- regex: '(Windows 98|Windows XP|Windows ME|Windows 95|Windows CE|Windows 7|Windows NT 4\.0|Windows Vista|Windows 2000|Windows 3.1)'
|
623
|
-
|
624
|
-
- regex: '(Windows NT 6\.2; ARM;)'
|
625
|
-
os_replacement: 'Windows RT'
|
626
|
-
- regex: '(Windows NT 6\.2)'
|
627
|
-
os_replacement: 'Windows 8'
|
628
|
-
|
629
|
-
- regex: '(Windows NT 6\.3; ARM;)'
|
630
|
-
os_replacement: 'Windows RT 8.1'
|
631
|
-
- regex: '(Windows NT 6\.3)'
|
632
|
-
os_replacement: 'Windows 8.1'
|
633
|
-
|
634
|
-
- regex: '(Windows NT 5\.0)'
|
635
|
-
os_replacement: 'Windows 2000'
|
636
|
-
|
637
|
-
- regex: '(WinNT4.0)'
|
638
|
-
os_replacement: 'Windows NT 4.0'
|
639
|
-
|
640
|
-
- regex: '(Windows ?CE)'
|
641
|
-
os_replacement: 'Windows CE'
|
642
|
-
|
643
|
-
- regex: 'Win ?(95|98|3.1|NT|ME|2000)'
|
644
|
-
os_replacement: 'Windows $1'
|
645
|
-
|
646
|
-
- regex: 'Win16'
|
647
|
-
os_replacement: 'Windows 3.1'
|
648
|
-
|
649
|
-
- regex: 'Win32'
|
650
|
-
os_replacement: 'Windows 95'
|
651
|
-
|
652
|
-
##########
|
653
|
-
# Tizen OS from Samsung
|
654
|
-
# spoofs Android so pushing it above
|
655
|
-
##########
|
656
|
-
- regex: '(Tizen)/(\d+)\.(\d+)'
|
657
|
-
|
658
|
-
##########
|
659
|
-
# Mac OS
|
660
|
-
# @ref: http://en.wikipedia.org/wiki/Mac_OS_X#Versions
|
661
|
-
# @ref: http://www.puredarwin.org/curious/versions
|
662
|
-
##########
|
663
|
-
- regex: '(Mac OS X) (\d+)[_.](\d+)(?:[_.](\d+))?'
|
664
|
-
# Leopard
|
665
|
-
- regex: ' (Dar)(win)/(9).(\d+).*\((?:i386|x86_64|Power Macintosh)\)'
|
666
|
-
os_replacement: 'Mac OS X'
|
667
|
-
os_v1_replacement: '10'
|
668
|
-
os_v2_replacement: '5'
|
669
|
-
# Snow Leopard
|
670
|
-
- regex: ' (Dar)(win)/(10).(\d+).*\((?:i386|x86_64)\)'
|
671
|
-
os_replacement: 'Mac OS X'
|
672
|
-
os_v1_replacement: '10'
|
673
|
-
os_v2_replacement: '6'
|
674
|
-
# Lion
|
675
|
-
- regex: ' (Dar)(win)/(11).(\d+).*\((?:i386|x86_64)\)'
|
676
|
-
os_replacement: 'Mac OS X'
|
677
|
-
os_v1_replacement: '10'
|
678
|
-
os_v2_replacement: '7'
|
679
|
-
# Mountain Lion
|
680
|
-
- regex: ' (Dar)(win)/(12).(\d+).*\((?:i386|x86_64)\)'
|
681
|
-
os_replacement: 'Mac OS X'
|
682
|
-
os_v1_replacement: '10'
|
683
|
-
os_v2_replacement: '8'
|
684
|
-
# Mavericks
|
685
|
-
- regex: ' (Dar)(win)/(13).(\d+).*\((?:i386|x86_64)\)'
|
686
|
-
os_replacement: 'Mac OS X'
|
687
|
-
os_v1_replacement: '10'
|
688
|
-
os_v2_replacement: '9'
|
689
|
-
|
690
|
-
# IE on Mac doesn't specify version number
|
691
|
-
- regex: 'Mac_PowerPC'
|
692
|
-
os_replacement: 'Mac OS'
|
693
|
-
|
694
|
-
# builds before tiger don't seem to specify version?
|
695
|
-
|
696
|
-
# ios devices spoof (mac os x), so including intel/ppc prefixes
|
697
|
-
- regex: '(?:PPC|Intel) (Mac OS X)'
|
698
|
-
|
699
|
-
##########
|
700
|
-
# iOS
|
701
|
-
# http://en.wikipedia.org/wiki/IOS_version_history
|
702
|
-
##########
|
703
|
-
- regex: '(CPU OS|iPhone OS|CPU iPhone) +(\d+)[_\.](\d+)(?:[_\.](\d+))?'
|
704
|
-
os_replacement: 'iOS'
|
705
|
-
|
706
|
-
# remaining cases are mostly only opera uas, so catch opera as to not catch iphone spoofs
|
707
|
-
- regex: '(iPhone|iPad|iPod); Opera'
|
708
|
-
os_replacement: 'iOS'
|
709
|
-
|
710
|
-
# few more stragglers
|
711
|
-
- regex: '(iPhone|iPad|iPod).*Mac OS X.*Version/(\d+)\.(\d+)'
|
712
|
-
os_replacement: 'iOS'
|
713
|
-
|
714
|
-
- regex: '(AppleTV)/(\d+)\.(\d+)'
|
715
|
-
os_replacement: 'ATV OS X'
|
716
|
-
|
717
|
-
# CFNetwork/Darwin - The specific CFNetwork or Darwin version determines
|
718
|
-
# whether the os maps to Mac OS, or iOS, or just Darwin.
|
719
|
-
# See: http://user-agents.me/cfnetwork-version-list
|
720
|
-
- regex: '(CFNetwork)/(5)48\.0\.3.* Darwin/11\.0\.0'
|
721
|
-
os_replacement: 'iOS'
|
722
|
-
- regex: '(CFNetwork)/(5)48\.(0)\.4.* Darwin/(1)1\.0\.0'
|
723
|
-
os_replacement: 'iOS'
|
724
|
-
- regex: '(CFNetwork)/(5)48\.(1)\.4'
|
725
|
-
os_replacement: 'iOS'
|
726
|
-
- regex: '(CFNetwork)/(4)85\.1(3)\.9'
|
727
|
-
os_replacement: 'iOS'
|
728
|
-
- regex: '(CFNetwork)/(6)09\.(1)\.4'
|
729
|
-
os_replacement: 'iOS'
|
730
|
-
- regex: '(CFNetwork)/(6)(0)9'
|
731
|
-
os_replacement: 'iOS'
|
732
|
-
- regex: '(CFNetwork)/6(7)2\.(1)\.13'
|
733
|
-
os_replacement: 'iOS'
|
734
|
-
- regex: '(CFNetwork)/6(7)2\.(1)\.(1)4'
|
735
|
-
os_replacement: 'iOS'
|
736
|
-
- regex: '(CF)(Network)/6(7)(2)\.1\.15'
|
737
|
-
os_replacement: 'iOS'
|
738
|
-
os_v1_replacement: '7'
|
739
|
-
os_v2_replacement: '1'
|
740
|
-
- regex: '(CFNetwork)/6(7)2\.(0)\.(?:2|8)'
|
741
|
-
os_replacement: 'iOS'
|
742
|
-
- regex: '(CFNetwork)/709\.1'
|
743
|
-
os_replacement: 'iOS'
|
744
|
-
os_v1_replacement: '8'
|
745
|
-
os_v2_replacement: '0.b5'
|
746
|
-
|
747
|
-
##########
|
748
|
-
# CFNetwork iOS Apps
|
749
|
-
# @ref: https://en.wikipedia.org/wiki/Darwin_(operating_system)#Release_history
|
750
|
-
##########
|
751
|
-
- regex: 'CFNetwork/.* Darwin/(9)\.\d+'
|
752
|
-
os_replacement: 'iOS'
|
753
|
-
os_v1_replacement: '1'
|
754
|
-
- regex: 'CFNetwork/.* Darwin/(10)\.\d+'
|
755
|
-
os_replacement: 'iOS'
|
756
|
-
os_v1_replacement: '4'
|
757
|
-
- regex: 'CFNetwork/.* Darwin/(11)\.\d+'
|
758
|
-
os_replacement: 'iOS'
|
759
|
-
os_v1_replacement: '5'
|
760
|
-
- regex: 'CFNetwork/.* Darwin/(13)\.\d+'
|
761
|
-
os_replacement: 'iOS'
|
762
|
-
os_v1_replacement: '6'
|
763
|
-
- regex: 'CFNetwork/6.* Darwin/(14)\.\d+'
|
764
|
-
os_replacement: 'iOS'
|
765
|
-
os_v1_replacement: '7'
|
766
|
-
- regex: 'CFNetwork/7.* Darwin/(14)\.\d+'
|
767
|
-
os_replacement: 'iOS'
|
768
|
-
os_v1_replacement: '8'
|
769
|
-
os_v2_replacement: '0'
|
770
|
-
# iOS Apps
|
771
|
-
- regex: '\b(iOS[ /]|iPhone(?:/| v|[ _]OS[/,]|; | OS : |\d,\d/|\d,\d; )|iPad/)(\d{1,2})[_\.](\d{1,2})(?:[_\.](\d+))?'
|
772
|
-
os_replacement: 'iOS'
|
773
|
-
|
774
|
-
##########
|
775
|
-
# Chrome OS
|
776
|
-
# if version 0.0.0, probably this stuff:
|
777
|
-
# http://code.google.com/p/chromium-os/issues/detail?id=11573
|
778
|
-
# http://code.google.com/p/chromium-os/issues/detail?id=13790
|
779
|
-
##########
|
780
|
-
- regex: '(CrOS) [a-z0-9_]+ (\d+)\.(\d+)(?:\.(\d+))?'
|
781
|
-
os_replacement: 'Chrome OS'
|
782
|
-
|
783
|
-
##########
|
784
|
-
# Linux distros
|
785
|
-
##########
|
786
|
-
- regex: '([Dd]ebian)'
|
787
|
-
os_replacement: 'Debian'
|
788
|
-
- regex: '(Linux Mint)(?:/(\d+))?'
|
789
|
-
- regex: '(Mandriva)(?: Linux)?/(?:[\d.-]+m[a-z]{2}(\d+).(\d))?'
|
790
|
-
|
791
|
-
##########
|
792
|
-
# Symbian + Symbian OS
|
793
|
-
# http://en.wikipedia.org/wiki/History_of_Symbian
|
794
|
-
##########
|
795
|
-
- regex: '(Symbian[Oo][Ss])[/ ](\d+)\.(\d+)'
|
796
|
-
os_replacement: 'Symbian OS'
|
797
|
-
- regex: '(Symbian/3).+NokiaBrowser/7\.3'
|
798
|
-
os_replacement: 'Symbian^3 Anna'
|
799
|
-
- regex: '(Symbian/3).+NokiaBrowser/7\.4'
|
800
|
-
os_replacement: 'Symbian^3 Belle'
|
801
|
-
- regex: '(Symbian/3)'
|
802
|
-
os_replacement: 'Symbian^3'
|
803
|
-
- regex: '\b(Series 60|SymbOS|S60Version|S60V\d|S60\b)'
|
804
|
-
os_replacement: 'Symbian OS'
|
805
|
-
- regex: '(MeeGo)'
|
806
|
-
- regex: 'Symbian [Oo][Ss]'
|
807
|
-
os_replacement: 'Symbian OS'
|
808
|
-
- regex: 'Series40;'
|
809
|
-
os_replacement: 'Nokia Series 40'
|
810
|
-
- regex: 'Series30Plus;'
|
811
|
-
os_replacement: 'Nokia Series 30 Plus'
|
812
|
-
|
813
|
-
##########
|
814
|
-
# BlackBerry devices
|
815
|
-
##########
|
816
|
-
- regex: '(BB10);.+Version/(\d+)\.(\d+)\.(\d+)'
|
817
|
-
os_replacement: 'BlackBerry OS'
|
818
|
-
- regex: '(Black[Bb]erry)[0-9a-z]+/(\d+)\.(\d+)\.(\d+)(?:\.(\d+))?'
|
819
|
-
os_replacement: 'BlackBerry OS'
|
820
|
-
- regex: '(Black[Bb]erry).+Version/(\d+)\.(\d+)\.(\d+)(?:\.(\d+))?'
|
821
|
-
os_replacement: 'BlackBerry OS'
|
822
|
-
- regex: '(RIM Tablet OS) (\d+)\.(\d+)\.(\d+)'
|
823
|
-
os_replacement: 'BlackBerry Tablet OS'
|
824
|
-
- regex: '(Play[Bb]ook)'
|
825
|
-
os_replacement: 'BlackBerry Tablet OS'
|
826
|
-
- regex: '(Black[Bb]erry)'
|
827
|
-
os_replacement: 'BlackBerry OS'
|
828
|
-
|
829
|
-
##########
|
830
|
-
# Firefox OS
|
831
|
-
##########
|
832
|
-
- regex: '\((?:Mobile|Tablet);.+Firefox/\d+\.\d+'
|
833
|
-
os_replacement: 'Firefox OS'
|
834
|
-
|
835
|
-
##########
|
836
|
-
# BREW
|
837
|
-
# yes, Brew is lower-cased for Brew MP
|
838
|
-
##########
|
839
|
-
- regex: '(BREW)[ /](\d+)\.(\d+)\.(\d+)'
|
840
|
-
- regex: '(BREW);'
|
841
|
-
- regex: '(Brew MP|BMP)[ /](\d+)\.(\d+)\.(\d+)'
|
842
|
-
os_replacement: 'Brew MP'
|
843
|
-
- regex: 'BMP;'
|
844
|
-
os_replacement: 'Brew MP'
|
845
|
-
|
846
|
-
##########
|
847
|
-
# Google TV
|
848
|
-
##########
|
849
|
-
- regex: '(GoogleTV)(?: (\d+)\.(\d+)(?:\.(\d+))?|/[\da-z]+)'
|
850
|
-
|
851
|
-
- regex: '(WebTV)/(\d+).(\d+)'
|
852
|
-
|
853
|
-
##########
|
854
|
-
# Misc mobile
|
855
|
-
##########
|
856
|
-
- regex: '(hpw|web)OS/(\d+)\.(\d+)(?:\.(\d+))?'
|
857
|
-
os_replacement: 'webOS'
|
858
|
-
- regex: '(VRE);'
|
859
|
-
|
860
|
-
##########
|
861
|
-
# Generic patterns
|
862
|
-
# since the majority of os cases are very specific, these go last
|
863
|
-
##########
|
864
|
-
- regex: '(Fedora|Red Hat|PCLinuxOS|Puppy|Ubuntu|Kindle|Bada|Lubuntu|BackTrack|Slackware|(?:Free|Open|Net|\b)BSD)[/ ](\d+)\.(\d+)(?:\.(\d+)(?:\.(\d+))?)?'
|
865
|
-
|
866
|
-
# Gentoo Linux + Kernel Version
|
867
|
-
- regex: '(Linux)[ /](\d+)\.(\d+)(?:\.(\d+))?.*gentoo'
|
868
|
-
os_replacement: 'Gentoo'
|
869
|
-
|
870
|
-
# Opera Mini Bada
|
871
|
-
- regex: '\((Bada);'
|
872
|
-
|
873
|
-
# just os
|
874
|
-
- regex: '(Windows|Android|WeTab|Maemo)'
|
875
|
-
- regex: '(Ubuntu|Kubuntu|Arch Linux|CentOS|Slackware|Gentoo|openSUSE|SUSE|Red Hat|Fedora|PCLinuxOS|Gentoo|Mageia|(?:Free|Open|Net|\b)BSD)'
|
876
|
-
# Linux + Kernel Version
|
877
|
-
- regex: '(Linux)(?:[ /](\d+)\.(\d+)(?:\.(\d+))?)?'
|
878
|
-
- regex: 'SunOS'
|
879
|
-
os_replacement: 'Solaris'
|
880
|
-
|
881
|
-
device_parsers:
|
882
|
-
##########
|
883
|
-
# incomplete!
|
884
|
-
# multiple replacement placeholds i.e. ($1) ($2) help solve problem of single device with multiple representations in ua
|
885
|
-
# e.g. HTC Dream S should parse to the same device as HTC_DreamS
|
886
|
-
##########
|
887
|
-
|
888
|
-
##########
|
889
|
-
# incomplete!
|
890
|
-
# HTC
|
891
|
-
# http://en.wikipedia.org/wiki/List_of_HTC_phones
|
892
|
-
# this is quickly getting unwieldy
|
893
|
-
##########
|
894
|
-
# example: Mozilla/5.0 (Linux; U; Android 2.3.2; fr-fr; HTC HD2 Build/FRF91) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1
|
895
|
-
- regex: 'HTC ([A-Z][a-z0-9]+) Build'
|
896
|
-
device_replacement: 'HTC $1'
|
897
|
-
# example: Mozilla/5.0 (Linux; U; Android 2.1; es-es; HTC Legend 1.23.161.1 Build/ERD79) AppleWebKit/530.17 (KHTML, like Gecko) Version/4.0 Mobile Safari/530.17,gzip
|
898
|
-
- regex: 'HTC ([A-Z][a-z0-9 ]+) \d+\.\d+\.\d+\.\d+'
|
899
|
-
device_replacement: 'HTC $1'
|
900
|
-
# example: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; HTC_Touch_Diamond2_T5353; Windows Phone 6.5.3.5)
|
901
|
-
- regex: 'HTC_Touch_([A-Za-z0-9]+)'
|
902
|
-
device_replacement: 'HTC Touch ($1)'
|
903
|
-
# should come after HTC_Touch
|
904
|
-
- regex: 'USCCHTC(\d+)'
|
905
|
-
device_replacement: 'HTC $1 (US Cellular)'
|
906
|
-
- regex: 'Sprint APA(9292)'
|
907
|
-
device_replacement: 'HTC $1 (Sprint)'
|
908
|
-
- regex: 'HTC ([A-Za-z0-9]+ [A-Z])'
|
909
|
-
device_replacement: 'HTC $1'
|
910
|
-
- regex: 'HTC[-_/\s]([A-Za-z0-9]+)'
|
911
|
-
device_replacement: 'HTC $1'
|
912
|
-
- regex: '(ADR[A-Za-z0-9]+)'
|
913
|
-
device_replacement: 'HTC $1'
|
914
|
-
- regex: '(HTC)'
|
915
|
-
|
916
|
-
# Tesla Model S
|
917
|
-
- regex: '(QtCarBrowser)'
|
918
|
-
device_replacement: 'Tesla Model S'
|
919
|
-
|
920
|
-
# Samsung
|
921
|
-
- regex: '(SamsungSGHi560)'
|
922
|
-
device_replacement: 'Samsung SGHi560'
|
923
|
-
|
924
|
-
- regex: '(SCH-[A-Za-z0-9_-]+)'
|
925
|
-
device_replacement: 'Samsung $1'
|
926
|
-
|
927
|
-
- regex: '(SGH-[A-Za-z0-9_-]+)'
|
928
|
-
device_replacement: 'Samsung $1'
|
929
|
-
|
930
|
-
- regex: '(GT-[A-Za-z0-9_-]+)'
|
931
|
-
device_replacement: 'Samsung $1'
|
932
|
-
|
933
|
-
- regex: '(SM-[A-Za-z0-9_-]+)'
|
934
|
-
device_replacement: 'Samsung $1'
|
935
|
-
|
936
|
-
- regex: '(SPH-[A-Za-z0-9_-]+)'
|
937
|
-
device_replacement: 'Samsung $1'
|
938
|
-
|
939
|
-
- regex: 'SAMSUNG-([A-Za-z0-9_-]+)'
|
940
|
-
device_replacement: 'Samsung $1'
|
941
|
-
|
942
|
-
- regex: 'SAMSUNG ([A-Za-z0-9_-]+)'
|
943
|
-
device_replacement: 'Samsung $1'
|
944
|
-
|
945
|
-
|
946
|
-
#########
|
947
|
-
# Ericsson - must come before nokia since they also use symbian
|
948
|
-
#########
|
949
|
-
- regex: 'SonyEricsson([A-Za-z0-9]+)/'
|
950
|
-
device_replacement: 'Ericsson $1'
|
951
|
-
|
952
|
-
##########
|
953
|
-
# PlayStation
|
954
|
-
# The Vita spoofs the Kindle
|
955
|
-
##########
|
956
|
-
- regex: 'PLAYSTATION 3'
|
957
|
-
device_replacement: 'PlayStation 3'
|
958
|
-
- regex: '(PlayStation (:?Portable|Vita))'
|
959
|
-
- regex: '(PlayStation (:?\d+))'
|
960
|
-
|
961
|
-
##########
|
962
|
-
# incomplete!
|
963
|
-
# Kindle
|
964
|
-
# http://amazonsilk.wordpress.com/useful-bits/silk-user-agent/
|
965
|
-
##########
|
966
|
-
- regex: '(KFOT Build)'
|
967
|
-
device_replacement: 'Kindle Fire'
|
968
|
-
- regex: '(KFTT Build)'
|
969
|
-
device_replacement: 'Kindle Fire HD'
|
970
|
-
- regex: '(KFJWI Build)'
|
971
|
-
device_replacement: 'Kindle Fire HD 8.9" WiFi'
|
972
|
-
- regex: '(KFJWA Build)'
|
973
|
-
device_replacement: 'Kindle Fire HD 8.9" 4G'
|
974
|
-
- regex: '(KFSOWI Build)'
|
975
|
-
device_replacement: 'Kindle Fire HD 7" WiFi'
|
976
|
-
- regex: '(KFTHWI Build)'
|
977
|
-
device_replacement: 'Kindle Fire HDX 7" WiFi'
|
978
|
-
- regex: '(KFTHWA Build)'
|
979
|
-
device_replacement: 'Kindle Fire HDX 7" 4G'
|
980
|
-
- regex: '(KFAPWI Build)'
|
981
|
-
device_replacement: 'Kindle Fire HDX 8.9" WiFi'
|
982
|
-
- regex: '(KFAPWA Build)'
|
983
|
-
device_replacement: 'Kindle Fire HDX 8.9" 4G'
|
984
|
-
- regex: '(Kindle Fire)'
|
985
|
-
- regex: '(Kindle)'
|
986
|
-
- regex: '(Silk)/(\d+)\.(\d+)(?:\.([0-9\-]+))?'
|
987
|
-
device_replacement: 'Kindle Fire'
|
988
|
-
|
989
|
-
|
990
|
-
|
991
|
-
##########
|
992
|
-
# NOKIA
|
993
|
-
# nokia NokiaN8-00 comes before iphone. sometimes spoofs iphone
|
994
|
-
##########
|
995
|
-
- regex: 'NokiaN([0-9]+)'
|
996
|
-
device_replacement: 'Nokia N$1'
|
997
|
-
- regex: 'NOKIA([A-Za-z0-9\v-]+)'
|
998
|
-
device_replacement: 'Nokia $1'
|
999
|
-
- regex: 'Nokia([A-Za-z0-9\v-]+)'
|
1000
|
-
device_replacement: 'Nokia $1'
|
1001
|
-
- regex: 'NOKIA ([A-Za-z0-9\-]+)'
|
1002
|
-
device_replacement: 'Nokia $1'
|
1003
|
-
- regex: 'Nokia ([A-Za-z0-9\-]+)'
|
1004
|
-
device_replacement: 'Nokia $1'
|
1005
|
-
- regex: 'Lumia ([A-Za-z0-9\-]+)'
|
1006
|
-
device_replacement: 'Lumia $1'
|
1007
|
-
- regex: 'Symbian'
|
1008
|
-
device_replacement: 'Nokia'
|
1009
|
-
|
1010
|
-
##########
|
1011
|
-
# BlackBerry
|
1012
|
-
# http://www.useragentstring.com/pages/BlackBerry/
|
1013
|
-
##########
|
1014
|
-
- regex: 'BB10; ([A-Za-z0-9\- ]+)\)'
|
1015
|
-
device_replacement: 'BlackBerry $1'
|
1016
|
-
- regex: '(PlayBook).+RIM Tablet OS'
|
1017
|
-
device_replacement: 'BlackBerry Playbook'
|
1018
|
-
- regex: 'Black[Bb]erry ([0-9]+);'
|
1019
|
-
device_replacement: 'BlackBerry $1'
|
1020
|
-
- regex: 'Black[Bb]erry([0-9]+)'
|
1021
|
-
device_replacement: 'BlackBerry $1'
|
1022
|
-
- regex: 'Black[Bb]erry;'
|
1023
|
-
device_replacement: 'BlackBerry'
|
1024
|
-
|
1025
|
-
##########
|
1026
|
-
# PALM / HP
|
1027
|
-
##########
|
1028
|
-
# some palm devices must come before iphone. sometimes spoofs iphone in ua
|
1029
|
-
- regex: '(Pre)/(\d+)\.(\d+)'
|
1030
|
-
device_replacement: 'Palm Pre'
|
1031
|
-
- regex: '(Pixi)/(\d+)\.(\d+)'
|
1032
|
-
device_replacement: 'Palm Pixi'
|
1033
|
-
- regex: '(Touch[Pp]ad)/(\d+)\.(\d+)'
|
1034
|
-
device_replacement: 'HP TouchPad'
|
1035
|
-
- regex: 'HPiPAQ([A-Za-z0-9]+)/(\d+).(\d+)'
|
1036
|
-
device_replacement: 'HP iPAQ $1'
|
1037
|
-
- regex: 'Palm([A-Za-z0-9]+)'
|
1038
|
-
device_replacement: 'Palm $1'
|
1039
|
-
- regex: 'Treo([A-Za-z0-9]+)'
|
1040
|
-
device_replacement: 'Palm Treo $1'
|
1041
|
-
- regex: 'webOS.*(P160UNA)/(\d+).(\d+)'
|
1042
|
-
device_replacement: 'HP Veer'
|
1043
|
-
|
1044
|
-
##########
|
1045
|
-
# AppleTV
|
1046
|
-
# No built in browser that I can tell
|
1047
|
-
# Stack Overflow indicated iTunes-AppleTV/4.1 as a known UA for app available and I'm seeing it in live traffic
|
1048
|
-
##########
|
1049
|
-
- regex: '(AppleTV)'
|
1050
|
-
device_replacement: 'AppleTV'
|
1051
|
-
|
1052
|
-
##########
|
1053
|
-
# Catch the google mobile crawler before checking for iPhones.
|
1054
|
-
##########
|
1055
|
-
|
1056
|
-
- regex: 'AdsBot-Google-Mobile'
|
1057
|
-
device_replacement: 'Spider'
|
1058
|
-
|
1059
|
-
- regex: 'Googlebot-Mobile/(\d+).(\d+)'
|
1060
|
-
device_replacement: 'Spider'
|
1061
|
-
|
1062
|
-
- regex: 'Googlebot/\d+.\d+'
|
1063
|
-
device_replacement: 'Spider'
|
1064
|
-
|
1065
|
-
- regex: 'NING/(\d+).(\d+)'
|
1066
|
-
device_replacement: 'Spider'
|
1067
|
-
|
1068
|
-
- regex: 'MsnBot-Media /(\d+).(\d+)'
|
1069
|
-
device_replacement: 'Spider'
|
1070
|
-
|
1071
|
-
##########
|
1072
|
-
# complete but probably catches spoofs
|
1073
|
-
# iSTUFF
|
1074
|
-
##########
|
1075
|
-
# ipad and ipod must be parsed before iphone
|
1076
|
-
# cannot determine specific device type from ua string. (3g, 3gs, 4, etc)
|
1077
|
-
- regex: '(iPad) Simulator;'
|
1078
|
-
- regex: '(iPad);'
|
1079
|
-
- regex: '(iPod) touch;'
|
1080
|
-
- regex: '(iPod);'
|
1081
|
-
- regex: '(iPhone) Simulator;'
|
1082
|
-
- regex: '(iPhone);'
|
1083
|
-
|
1084
|
-
##########
|
1085
|
-
# Acer
|
1086
|
-
##########
|
1087
|
-
- regex: 'acer_([A-Za-z0-9]+)_'
|
1088
|
-
device_replacement: 'Acer $1'
|
1089
|
-
- regex: 'acer_([A-Za-z0-9]+)_'
|
1090
|
-
device_replacement: 'Acer $1'
|
1091
|
-
|
1092
|
-
##########
|
1093
|
-
# Alcatel
|
1094
|
-
##########
|
1095
|
-
- regex: 'ALCATEL-([A-Za-z0-9]+)'
|
1096
|
-
device_replacement: 'Alcatel $1'
|
1097
|
-
- regex: 'Alcatel-([A-Za-z0-9]+)'
|
1098
|
-
device_replacement: 'Alcatel $1'
|
1099
|
-
- regex: 'ALCATEL_ONE_TOUCH_([A-Za-z0-9]+)'
|
1100
|
-
device_replacement: 'Alcatel ONE TOUCH $1'
|
1101
|
-
- regex: 'ALCATEL (ONE TOUCH [A-Za-z0-9]+)'
|
1102
|
-
device_replacement: 'Alcatel $1'
|
1103
|
-
- regex: 'ALCATEL (one touch [A-Za-z0-9]+)'
|
1104
|
-
device_replacement: 'Alcatel $1'
|
1105
|
-
- regex: 'ALCATEL ([A-Za-z0-9]+)'
|
1106
|
-
device_replacement: 'Alcatel $1'
|
1107
|
-
##########
|
1108
|
-
# Amoi
|
1109
|
-
##########
|
1110
|
-
- regex: 'Amoi\-([A-Za-z0-9]+)'
|
1111
|
-
device_replacement: 'Amoi $1'
|
1112
|
-
- regex: 'AMOI\-([A-Za-z0-9]+)'
|
1113
|
-
device_replacement: 'Amoi $1'
|
1114
|
-
|
1115
|
-
##########
|
1116
|
-
# Amoi
|
1117
|
-
##########
|
1118
|
-
- regex: 'Asus\-([A-Za-z0-9]+)'
|
1119
|
-
device_replacement: 'Asus $1'
|
1120
|
-
- regex: 'ASUS\-([A-Za-z0-9]+)'
|
1121
|
-
device_replacement: 'Asus $1'
|
1122
|
-
|
1123
|
-
##########
|
1124
|
-
# Bird
|
1125
|
-
##########
|
1126
|
-
- regex: 'BIRD\-([A-Za-z0-9]+)'
|
1127
|
-
device_replacement: 'Bird $1'
|
1128
|
-
- regex: 'BIRD\.([A-Za-z0-9]+)'
|
1129
|
-
device_replacement: 'Bird $1'
|
1130
|
-
- regex: 'BIRD ([A-Za-z0-9]+)'
|
1131
|
-
device_replacement: 'Bird $1'
|
1132
|
-
|
1133
|
-
##########
|
1134
|
-
# Dell
|
1135
|
-
##########
|
1136
|
-
- regex: 'Dell ([A-Za-z0-9]+)'
|
1137
|
-
device_replacement: 'Dell $1'
|
1138
|
-
|
1139
|
-
##########
|
1140
|
-
# DoCoMo
|
1141
|
-
##########
|
1142
|
-
- regex: 'DoCoMo/2\.0 ([A-Za-z0-9]+)'
|
1143
|
-
device_replacement: 'DoCoMo $1'
|
1144
|
-
- regex: '([A-Za-z0-9]+)_W\;FOMA'
|
1145
|
-
device_replacement: 'DoCoMo $1'
|
1146
|
-
- regex: '([A-Za-z0-9]+)\;FOMA'
|
1147
|
-
device_replacement: 'DoCoMo $1'
|
1148
|
-
|
1149
|
-
##########
|
1150
|
-
# Huawei
|
1151
|
-
##########
|
1152
|
-
- regex: 'Huawei([A-Za-z0-9]+)'
|
1153
|
-
device_replacement: 'Huawei $1'
|
1154
|
-
- regex: 'HUAWEI-([A-Za-z0-9]+)'
|
1155
|
-
device_replacement: 'Huawei $1'
|
1156
|
-
- regex: 'vodafone([A-Za-z0-9]+)'
|
1157
|
-
device_replacement: 'Huawei Vodafone $1'
|
1158
|
-
|
1159
|
-
##########
|
1160
|
-
# i-mate
|
1161
|
-
##########
|
1162
|
-
- regex: 'i\-mate ([A-Za-z0-9]+)'
|
1163
|
-
device_replacement: 'i-mate $1'
|
1164
|
-
|
1165
|
-
##########
|
1166
|
-
# kyocera
|
1167
|
-
##########
|
1168
|
-
- regex: 'Kyocera\-([A-Za-z0-9]+)'
|
1169
|
-
device_replacement: 'Kyocera $1'
|
1170
|
-
- regex: 'KWC\-([A-Za-z0-9]+)'
|
1171
|
-
device_replacement: 'Kyocera $1'
|
1172
|
-
|
1173
|
-
##########
|
1174
|
-
# lenovo
|
1175
|
-
##########
|
1176
|
-
- regex: 'Lenovo\-([A-Za-z0-9]+)'
|
1177
|
-
device_replacement: 'Lenovo $1'
|
1178
|
-
- regex: 'Lenovo_([A-Za-z0-9]+)'
|
1179
|
-
device_replacement: 'Lenovo $1'
|
1180
|
-
|
1181
|
-
##########
|
1182
|
-
# HbbTV (European and Australian standard)
|
1183
|
-
# written before the LG regexes, as LG is making HbbTV too
|
1184
|
-
##########
|
1185
|
-
- regex: '(HbbTV)/[0-9]+\.[0-9]+\.[0-9]+'
|
1186
|
-
|
1187
|
-
##########
|
1188
|
-
# lg
|
1189
|
-
##########
|
1190
|
-
- regex: 'LG/([A-Za-z0-9]+)'
|
1191
|
-
device_replacement: 'LG $1'
|
1192
|
-
- regex: 'LG-LG([A-Za-z0-9]+)'
|
1193
|
-
device_replacement: 'LG $1'
|
1194
|
-
- regex: 'LGE-LG([A-Za-z0-9]+)'
|
1195
|
-
device_replacement: 'LG $1'
|
1196
|
-
- regex: 'LGE VX([A-Za-z0-9]+)'
|
1197
|
-
device_replacement: 'LG $1'
|
1198
|
-
- regex: 'LG ([A-Za-z0-9]+)'
|
1199
|
-
device_replacement: 'LG $1'
|
1200
|
-
- regex: 'LGE LG\-AX([A-Za-z0-9]+)'
|
1201
|
-
device_replacement: 'LG $1'
|
1202
|
-
- regex: 'LG\-([A-Za-z0-9]+)'
|
1203
|
-
device_replacement: 'LG $1'
|
1204
|
-
- regex: 'LGE\-([A-Za-z0-9]+)'
|
1205
|
-
device_replacement: 'LG $1'
|
1206
|
-
- regex: 'LG([A-Za-z0-9]+)'
|
1207
|
-
device_replacement: 'LG $1'
|
1208
|
-
|
1209
|
-
##########
|
1210
|
-
# kin
|
1211
|
-
##########
|
1212
|
-
- regex: '(KIN)\.One (\d+)\.(\d+)'
|
1213
|
-
device_replacement: 'Microsoft $1'
|
1214
|
-
- regex: '(KIN)\.Two (\d+)\.(\d+)'
|
1215
|
-
device_replacement: 'Microsoft $1'
|
1216
|
-
|
1217
|
-
##########
|
1218
|
-
# motorola
|
1219
|
-
##########
|
1220
|
-
- regex: '(Motorola)\-([A-Za-z0-9]+)'
|
1221
|
-
- regex: 'MOTO\-([A-Za-z0-9]+)'
|
1222
|
-
device_replacement: 'Motorola $1'
|
1223
|
-
- regex: 'MOT\-([A-Za-z0-9]+)'
|
1224
|
-
device_replacement: 'Motorola $1'
|
1225
|
-
- regex: ' (DROID RAZR [A-Za-z0-9 ]+) '
|
1226
|
-
device_replacement: 'Motorola $1'
|
1227
|
-
- regex: ' (DROID[2 ][A-Za-z0-9 ]+) '
|
1228
|
-
device_replacement: 'Motorola $1'
|
1229
|
-
- regex: ' (Droid2| )'
|
1230
|
-
device_replacement: 'Motorola $1'
|
1231
|
-
- regex: ' (DROID2| )'
|
1232
|
-
device_replacement: 'Motorola $1'
|
1233
|
-
|
1234
|
-
##########
|
1235
|
-
# nintendo
|
1236
|
-
##########
|
1237
|
-
- regex: '(Nintendo WiiU)'
|
1238
|
-
device_replacement: 'Nintendo Wii U'
|
1239
|
-
- regex: 'Nintendo (DS|3DS|DSi|Wii);'
|
1240
|
-
device_replacement: 'Nintendo $1'
|
1241
|
-
|
1242
|
-
##########
|
1243
|
-
# pantech
|
1244
|
-
##########
|
1245
|
-
- regex: 'Pantech([A-Za-z0-9]+)'
|
1246
|
-
device_replacement: 'Pantech $1'
|
1247
|
-
|
1248
|
-
##########
|
1249
|
-
# philips
|
1250
|
-
##########
|
1251
|
-
- regex: 'Philips([A-Za-z0-9]+)'
|
1252
|
-
device_replacement: 'Philips $1'
|
1253
|
-
- regex: 'Philips ([A-Za-z0-9]+)'
|
1254
|
-
device_replacement: 'Philips $1'
|
1255
|
-
|
1256
|
-
##########
|
1257
|
-
# Samsung
|
1258
|
-
##########
|
1259
|
-
- regex: 'SAMSUNG-([A-Za-z0-9\-]+)'
|
1260
|
-
device_replacement: 'Samsung $1'
|
1261
|
-
- regex: 'SAMSUNG\; ([A-Za-z0-9\-]+)'
|
1262
|
-
device_replacement: 'Samsung $1'
|
1263
|
-
|
1264
|
-
##########
|
1265
|
-
# ZTE
|
1266
|
-
##########
|
1267
|
-
- regex: 'ZTE-([A-Za-z0-9\-]+)'
|
1268
|
-
device_replacement: 'ZTE $1'
|
1269
|
-
- regex: 'ZTE ([A-Za-z0-9\-]+)'
|
1270
|
-
device_replacement: 'ZTE $1'
|
1271
|
-
- regex: 'ZTE_([A-Za-z0-9\-]+)'
|
1272
|
-
device_replacement: 'ZTE $1'
|
1273
|
-
|
1274
|
-
##########
|
1275
|
-
# Sega
|
1276
|
-
##########
|
1277
|
-
- regex: 'Dreamcast'
|
1278
|
-
device_replacement: 'Sega Dreamcast'
|
1279
|
-
|
1280
|
-
##########
|
1281
|
-
# Softbank
|
1282
|
-
##########
|
1283
|
-
- regex: 'Softbank/1\.0/([A-Za-z0-9]+)'
|
1284
|
-
device_replacement: 'Softbank $1'
|
1285
|
-
- regex: 'Softbank/2\.0/([A-Za-z0-9]+)'
|
1286
|
-
device_replacement: 'Softbank $1'
|
1287
|
-
|
1288
|
-
##########
|
1289
|
-
# SONY #
|
1290
|
-
##########
|
1291
|
-
- regex: 'Sony([^ ]+) '
|
1292
|
-
device_replacement: 'Sony $1'
|
1293
|
-
|
1294
|
-
##########
|
1295
|
-
# WebTV
|
1296
|
-
##########
|
1297
|
-
- regex: '(WebTV)/(\d+).(\d+)'
|
1298
|
-
|
1299
|
-
#########
|
1300
|
-
# Android General Device Matching (far from perfect)
|
1301
|
-
#########
|
1302
|
-
- regex: 'Android[\- ][\d]+\.[\d]+\.[\d]+; [^;]+; ([A-Za-z0-9 _-]+) '
|
1303
|
-
- regex: 'Android[\- ][\d]+\.[\d]+; [^;]+; ([A-Za-z0-9 _-]+) '
|
1304
|
-
- regex: 'Android[\- ][\d]+\.[\d]+; [^;]+; WOWMobile ([A-Za-z0-9 _-]+) '
|
1305
|
-
- regex: 'Android[\- ][\d]+\.[\d]+\-update1; [^;]+; ([A-Za-z0-9 _-]+) '
|
1306
|
-
- regex: 'Android[\- ][\d]+\.[\d]+\.[\d]+;[^;]+;([A-Za-z0-9 _-]+) '
|
1307
|
-
- regex: 'Android[\- ][\d]+\.[\d]+\.[\d]+; ([A-Za-z0-9 _-]+) '
|
1308
|
-
- regex: 'Android[\- ][\d]+\.[\d]+; ([A-Za-z0-9 _-]+) '
|
1309
|
-
- regex: 'Android[\- ][\d]+\.[\d]+\.[\d]+; [^;]+; ([A-Za-z0-9\.\/_-]+) '
|
1310
|
-
- regex: 'Android[\- ][\d]+\.[\d]+; [^;]+; ([A-Za-z0-9\.\/_-]+) '
|
1311
|
-
|
1312
|
-
##########
|
1313
|
-
# Generic Smart Phone
|
1314
|
-
##########
|
1315
|
-
- regex: '(hiptop|avantgo|plucker|xiino|blazer|elaine|up.browser|up.link|mmp|smartphone|midp|wap|vodafone|o2|pocket|mobile|pda)'
|
1316
|
-
device_replacement: "Generic Smartphone"
|
1317
|
-
|
1318
|
-
##########
|
1319
|
-
# Generic Feature Phone
|
1320
|
-
##########
|
1321
|
-
- regex: '^(1207|3gso|4thp|501i|502i|503i|504i|505i|506i|6310|6590|770s|802s|a wa|acer|acs\-|airn|alav|asus|attw|au\-m|aur |aus |abac|acoo|aiko|alco|alca|amoi|anex|anny|anyw|aptu|arch|argo|bell|bird|bw\-n|bw\-u|beck|benq|bilb|blac|c55/|cdm\-|chtm|capi|comp|cond|craw|dall|dbte|dc\-s|dica|ds\-d|ds12|dait|devi|dmob|doco|dopo|el49|erk0|esl8|ez40|ez60|ez70|ezos|ezze|elai|emul|eric|ezwa|fake|fly\-|fly_|g\-mo|g1 u|g560|gf\-5|grun|gene|go.w|good|grad|hcit|hd\-m|hd\-p|hd\-t|hei\-|hp i|hpip|hs\-c|htc |htc\-|htca|htcg)'
|
1322
|
-
device_replacement: 'Generic Feature Phone'
|
1323
|
-
- regex: '^(htcp|htcs|htct|htc_|haie|hita|huaw|hutc|i\-20|i\-go|i\-ma|i230|iac|iac\-|iac/|ig01|im1k|inno|iris|jata|java|kddi|kgt|kgt/|kpt |kwc\-|klon|lexi|lg g|lg\-a|lg\-b|lg\-c|lg\-d|lg\-f|lg\-g|lg\-k|lg\-l|lg\-m|lg\-o|lg\-p|lg\-s|lg\-t|lg\-u|lg\-w|lg/k|lg/l|lg/u|lg50|lg54|lge\-|lge/|lynx|leno|m1\-w|m3ga|m50/|maui|mc01|mc21|mcca|medi|meri|mio8|mioa|mo01|mo02|mode|modo|mot |mot\-|mt50|mtp1|mtv |mate|maxo|merc|mits|mobi|motv|mozz|n100|n101|n102|n202|n203|n300|n302|n500|n502|n505|n700|n701|n710|nec\-|nem\-|newg|neon)'
|
1324
|
-
device_replacement: 'Generic Feature Phone'
|
1325
|
-
- regex: '^(netf|noki|nzph|o2 x|o2\-x|opwv|owg1|opti|oran|ot\-s|p800|pand|pg\-1|pg\-2|pg\-3|pg\-6|pg\-8|pg\-c|pg13|phil|pn\-2|pt\-g|palm|pana|pire|pock|pose|psio|qa\-a|qc\-2|qc\-3|qc\-5|qc\-7|qc07|qc12|qc21|qc32|qc60|qci\-|qwap|qtek|r380|r600|raks|rim9|rove|s55/|sage|sams|sc01|sch\-|scp\-|sdk/|se47|sec\-|sec0|sec1|semc|sgh\-|shar|sie\-|sk\-0|sl45|slid|smb3|smt5|sp01|sph\-|spv |spv\-|sy01|samm|sany|sava|scoo|send|siem|smar|smit|soft|sony|t\-mo|t218|t250|t600|t610|t618|tcl\-|tdg\-|telm|tim\-|ts70|tsm\-|tsm3|tsm5|tx\-9|tagt)'
|
1326
|
-
device_replacement: 'Generic Feature Phone'
|
1327
|
-
- regex: '^(talk|teli|topl|tosh|up.b|upg1|utst|v400|v750|veri|vk\-v|vk40|vk50|vk52|vk53|vm40|vx98|virg|vite|voda|vulc|w3c |w3c\-|wapj|wapp|wapu|wapm|wig |wapi|wapr|wapv|wapy|wapa|waps|wapt|winc|winw|wonu|x700|xda2|xdag|yas\-|your|zte\-|zeto|aste|audi|avan|blaz|brew|brvw|bumb|ccwa|cell|cldc|cmd\-|dang|eml2|fetc|hipt|http|ibro|idea|ikom|ipaq|jbro|jemu|jigs|keji|kyoc|kyok|libw|m\-cr|midp|mmef|moto|mwbp|mywa|newt|nok6|o2im|pant|pdxg|play|pluc|port|prox|rozo|sama|seri|smal|symb|treo|upsi|vx52|vx53|vx60|vx61|vx70|vx80|vx81|vx83|vx85|wap\-|webc|whit|wmlb|xda\-|xda_)'
|
1328
|
-
device_replacement: 'Generic Feature Phone'
|
1329
|
-
|
1330
|
-
##########
|
1331
|
-
# Spiders (this is hack...)
|
1332
|
-
##########
|
1333
|
-
- regex: '(bingbot|bot|borg|google(^tv)|yahoo|slurp|msnbot|msrbot|openbot|archiver|netresearch|lycos|scooter|altavista|teoma|gigabot|baiduspider|blitzbot|oegp|charlotte|furlbot|http%20client|polybot|htdig|ichiro|mogimogi|larbin|pompos|scrubby|searchsight|seekbot|semanticdiscovery|silk|snappy|speedy|spider|voila|vortex|voyager|zao|zeal|fast\-webcrawler|converacrawler|dataparksearch|findlinks|crawler|Netvibes|Sogou Pic Spider|ICC\-Crawler|Innovazion Crawler|Daumoa|EtaoSpider|A6\-Indexer|YisouSpider|Riddler|DBot|wsr\-agent|Xenu|SeznamBot|PaperLiBot|SputnikBot|CCBot|ProoXiBot|Scrapy|Genieo|Screaming Frog|YahooCacheSystem|CiBra|Nutch)'
|
1334
|
-
device_replacement: 'Spider'
|
1335
|
-
|