From 0c0592e423bab5aaa127ecfc76e7aa98a341a4ec Mon Sep 17 00:00:00 2001 From: Pierre Lannoy Date: Mon, 23 Oct 2023 17:25:52 +0200 Subject: [PATCH] Ready to release 3.6.0 on wp.org --- CHANGELOG.md | 8 +- device-detector.php | 2 +- includes/libraries/udd/DeviceDetector.php | 18 +- .../libraries/udd/Parser/Client/Browser.php | 16 +- .../Parser/Device/AbstractDeviceParser.php | 50 + .../libraries/udd/Parser/OperatingSystem.php | 4 +- includes/libraries/udd/regexes/bots.yml | 117 +- .../libraries/udd/regexes/client/browsers.yml | 36 +- .../udd/regexes/client/hints/apps.yml | 22 + .../udd/regexes/client/hints/browsers.yml | 15 + .../udd/regexes/client/mediaplayers.yml | 9 + .../udd/regexes/client/mobile_apps.yml | 14 + .../libraries/udd/regexes/device/consoles.yml | 2 +- .../libraries/udd/regexes/device/mobiles.yml | 1601 +++++++++++++---- includes/libraries/udd/regexes/oss.yml | 242 +-- init.php | 2 +- readme.txt | 4 +- 17 files changed, 1680 insertions(+), 482 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index d3022fb..a319202 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,7 +3,13 @@ All notable changes to **Device Detector** are documented in this *changelog*. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and **Device Detector** adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). -## [3.6.0] - Not Yet Released +## [3.6.0] - 2023-10-25 + +### Added +- Compatibility with WordPress 6.4. + +### Changed +- Upgraded UDD from version 6.1.3 to version 6.1.6: dozens of added and improved detections. ### Fixed - With PHP 8.2, in some edge cases, deprecation warnings may be triggered when viewing analytics. diff --git a/device-detector.php b/device-detector.php index 1931e8d..c6c4bc9 100644 --- a/device-detector.php +++ b/device-detector.php @@ -10,7 +10,7 @@ * Plugin Name: Device Detector * Plugin URI: https://perfops.one/device-detector * Description: Full featured analytics reporting and management tool that detects all devices accessing your WordPress site. - * Version: 3.5.0 + * Version: 3.6.0 * Requires at least: 5.2 * Requires PHP: 7.2 * Author: Pierre Lannoy / PerfOps One diff --git a/includes/libraries/udd/DeviceDetector.php b/includes/libraries/udd/DeviceDetector.php index 4b28543..f3fd80b 100644 --- a/includes/libraries/udd/DeviceDetector.php +++ b/includes/libraries/udd/DeviceDetector.php @@ -68,7 +68,7 @@ class DeviceDetector /** * Current version number of DeviceDetector */ - public const VERSION = '6.1.3'; + public const VERSION = '6.1.6'; /** * Constant used as value for unknown browser / os @@ -931,6 +931,13 @@ protected function parseDevice(): void $this->brand = 'Apple'; } + /** + * All devices containing VR fragment are assumed to be a wearable + */ + if (null === $this->device && $this->matchUserAgent(' VR ')) { + $this->device = AbstractDeviceParser::DEVICE_TYPE_WEARABLE; + } + /** * Chrome on Android passes the device type based on the keyword 'Mobile' * If it is present the device should be a smartphone, otherwise it's a tablet @@ -1029,7 +1036,7 @@ protected function parseDevice(): void /** * All devices that contain Andr0id in string are assumed to be a tv */ - if ($this->matchUserAgent('Andr0id|Android TV|\(lite\) TV')) { + if ($this->matchUserAgent('Andr0id|Android TV|\(lite\) TV|BRAVIA')) { $this->device = AbstractDeviceParser::DEVICE_TYPE_TV; } @@ -1041,9 +1048,12 @@ protected function parseDevice(): void } /** - * Devices running Kylo or Espital TV Browsers are assumed to be a TV + * Devices running Kylo or Espial TV Browsers are assumed to be a TV */ - if (null === $this->device && \in_array($clientName, ['Kylo', 'Espial TV Browser'])) { + if (\in_array($clientName, [ + 'Kylo', 'Espial TV Browser', 'LUJO TV Browser', 'LogicUI TV Browser', 'Open TV Browser', + ]) + ) { $this->device = AbstractDeviceParser::DEVICE_TYPE_TV; } diff --git a/includes/libraries/udd/Parser/Client/Browser.php b/includes/libraries/udd/Parser/Client/Browser.php index f8fbef5..df20b4b 100644 --- a/includes/libraries/udd/Parser/Client/Browser.php +++ b/includes/libraries/udd/Parser/Client/Browser.php @@ -84,6 +84,7 @@ class Browser extends AbstractClientParser 'AG' => 'ANTGalio', 'AL' => 'Aloha Browser', 'AH' => 'Aloha Browser Lite', + 'A8' => 'ALVA', 'AM' => 'Amaya', 'A3' => 'Amaze Browser', 'A5' => 'Amerigo', @@ -107,7 +108,7 @@ class Browser extends AbstractClientParser 'A2' => 'Atlas', 'AS' => 'Avast Secure Browser', 'VG' => 'AVG Secure Browser', - 'AC' => 'Avira Scout', + 'AC' => 'Avira Secure Browser', 'A1' => 'AwoX', 'BA' => 'Beaker Browser', 'BM' => 'Beamrise', @@ -137,6 +138,7 @@ class Browser extends AbstractClientParser 'BX' => 'BrowseX', 'BZ' => 'Browzar', 'B7' => 'Browlser', + '4B' => 'BrowsBit', 'BY' => 'Biyubi', 'BF' => 'Byffox', 'B4' => 'BF Browser', @@ -307,10 +309,12 @@ class Browser extends AbstractClientParser 'LH' => 'Light', 'L1' => 'Lilo', 'LI' => 'Links', + 'LC' => 'LogicUI TV Browser', 'IF' => 'Lolifox', 'LO' => 'Lovense Browser', 'LT' => 'LT Browser', 'LU' => 'LuaKit', + 'LJ' => 'LUJO TV Browser', 'LL' => 'Lulumi', 'LS' => 'Lunascape', 'LN' => 'Lunascape Lite', @@ -346,6 +350,7 @@ class Browser extends AbstractClientParser 'NB' => 'Nokia Browser', 'NO' => 'Nokia OSS Browser', 'NV' => 'Nokia Ovi Browser', + 'N2' => 'Norton Secure Browser', 'NX' => 'Nox Browser', 'N1' => 'NOMone VR Browser', 'NE' => 'NetSurf', @@ -356,6 +361,7 @@ class Browser extends AbstractClientParser 'WR' => 'NextWord Browser', 'NT' => 'NTENT Browser', 'OC' => 'Oculus Browser', + 'O6' => 'Odd Browser', 'O1' => 'Opera Mini iOS', 'OB' => 'Obigo', 'O2' => 'Odin', @@ -380,11 +386,13 @@ class Browser extends AbstractClientParser 'OR' => 'Oregano', 'O0' => 'Origin In-Game Overlay', 'OY' => 'Origyn Web Browser', + 'O8' => 'OrNET Browser', 'OV' => 'Openwave Mobile Browser', 'O3' => 'OpenFin', 'O4' => 'Open Browser', '4U' => 'Open Browser 4U', '5G' => 'Open Browser fast 5G', + 'O7' => 'Open TV Browser', 'OW' => 'OmniWeb', 'OT' => 'Otter Browser', 'PL' => 'Palm Blazer', @@ -397,11 +405,13 @@ class Browser extends AbstractClientParser '2P' => 'Puffin Web Browser', 'PW' => 'Palm WebPro', 'PA' => 'Palmscape', + 'P7' => 'Pawxy', 'PE' => 'Perfect Browser', 'P1' => 'Phantom.me', 'PH' => 'Phantom Browser', 'PX' => 'Phoenix', 'PB' => 'Phoenix Browser', + 'P8' => 'PICO Browser', 'PF' => 'PlayFree Browser', 'PK' => 'PocketBook Browser', 'PO' => 'Polaris', @@ -428,6 +438,7 @@ class Browser extends AbstractClientParser 'RK' => 'Rekonq', 'RM' => 'RockMelt', 'SB' => 'Samsung Browser', + '3L' => 'Samsung Browser Lite', 'SA' => 'Sailfish Browser', 'S8' => 'Seewo Browser', 'SC' => 'SEMC-Browser', @@ -588,6 +599,7 @@ class Browser extends AbstractClientParser 'HO', 'A5', 'X1', '18', 'B5', 'B6', 'TC', 'A6', '2X', 'F4', 'YG', 'WR', 'NA', 'DM', '1M', 'A7', 'XN', 'XT', 'XB', 'W1', 'HT', 'B8', 'F5', 'B9', 'WA', 'T0', 'HC', + 'O6', 'P7', 'LJ', 'LC', 'O7', 'N2', 'A8', 'P8', ], 'Firefox' => [ 'AX', 'BI', 'BF', 'BH', 'BN', 'C0', 'CU', 'EI', 'F1', @@ -625,7 +637,7 @@ class Browser extends AbstractClientParser 'O4', 'XO', 'U0', 'B0', 'VA', 'X0', 'A5', 'X1', '18', 'B5', 'B6', 'TC', 'A6', '2X', 'F4', 'YG', 'WR', 'NA', 'DM', '1M', 'A7', 'XN', 'XT', 'XB', 'W1', 'HT', 'B7', - 'B9', 'T0', 'I8', + 'B9', 'T0', 'I8', 'O6', 'P7', 'O8', '4B', 'A8', 'P8', ]; /** diff --git a/includes/libraries/udd/Parser/Device/AbstractDeviceParser.php b/includes/libraries/udd/Parser/Device/AbstractDeviceParser.php index 6fd14ea..44d278e 100644 --- a/includes/libraries/udd/Parser/Device/AbstractDeviceParser.php +++ b/includes/libraries/udd/Parser/Device/AbstractDeviceParser.php @@ -82,6 +82,7 @@ abstract class AbstractDeviceParser extends AbstractParser */ public static $deviceBrands = [ '5E' => '2E', + '5IV' => '5IVE', '2F' => 'F2 Mobile', '3Q' => '3Q', 'J7' => '7 Mobile', @@ -94,6 +95,7 @@ abstract class AbstractDeviceParser extends AbstractParser '10M' => '10moons', '41' => 'A1', '00' => 'Accent', + 'ACC' => 'Accesstyle', 'AE' => 'Ace', 'AC' => 'Acer', '3K' => 'Acteck', @@ -198,8 +200,10 @@ abstract class AbstractDeviceParser extends AbstractParser 'WW' => 'Awow', 'XU' => 'AUX', 'BAC' => 'Backcell', + 'BFF' => 'BAFF', 'BO' => 'BangOlufsen', 'BN' => 'Barnes & Noble', + 'BAR' => 'BARTEC', 'BB' => 'BBK', '0B' => 'BB Mobile', 'B6' => 'BDF', @@ -286,6 +290,7 @@ abstract class AbstractDeviceParser extends AbstractParser 'BC' => 'Camfone', 'CJ' => 'Cavion', '4D' => 'Canal Digital', + 'CNG' => 'Canguro', 'CEI' => 'Ceibal', '02' => 'Cell-C', 'CEL' => 'Cellacom', @@ -353,6 +358,7 @@ abstract class AbstractDeviceParser extends AbstractParser 'D5' => 'Daewoo', 'DA' => 'Danew', 'DAN' => 'Dany', + 'DA1' => 'DangcapHD', 'DT' => 'Datang', 'D7' => 'Datawind', '7D' => 'Datamini', @@ -367,6 +373,7 @@ abstract class AbstractDeviceParser extends AbstractParser 'DL0' => 'DL', 'DE' => 'Denver', 'DS' => 'Desay', + 'DSD' => 'DSDevices', 'DSI' => 'DSIC', 'DW' => 'DeWalt', 'DX' => 'DEXP', @@ -421,6 +428,7 @@ abstract class AbstractDeviceParser extends AbstractParser 'DU' => 'Dune HD', 'UD' => 'DUNNS Mobile', 'DUU' => 'Duubee', + 'DUR' => 'Durabook', 'DTE' => 'D-Tech', 'DLI' => 'D-Link', 'ENO' => 'eNOVA', @@ -469,6 +477,7 @@ abstract class AbstractDeviceParser extends AbstractParser 'ENT' => 'Entity', 'ENV' => 'Envizen', '8E' => 'Epik One', + 'EPK' => 'Epic', 'XP' => 'Epson', 'EPH' => 'Ephone', 'E7' => 'Ergo', @@ -504,6 +513,7 @@ abstract class AbstractDeviceParser extends AbstractParser 'UF' => 'EYU', 'UE1' => 'UE', '5F' => 'F150', + 'FPS' => 'F+', 'F6' => 'Facebook', 'FAC' => 'Facetel', 'FA1' => 'Facime', @@ -541,6 +551,7 @@ abstract class AbstractDeviceParser extends AbstractParser 'FO' => 'Foxconn', 'FOD' => 'FoxxD', 'FJ' => 'FOODO', + 'FOS' => 'FOSSiBOT', 'FT' => 'Freetel', 'FRU' => 'Frunsi', 'F4' => 'F&U', @@ -556,12 +567,14 @@ abstract class AbstractDeviceParser extends AbstractParser 'FXT' => 'Fxtec', 'GT' => 'G-TiDE', 'G9' => 'G-Touch', + 'GFO' => 'Gfone', 'GTM' => 'GTMEDIA', '0G' => 'GFive', 'GM' => 'Garmin-Asus', 'GA' => 'Gateway', '99' => 'Galaxy Innovations', 'GA1' => 'Galactic', + 'GAM' => 'Gamma', 'GAZ' => 'Gazer', 'GEA' => 'Geanee', 'GEN' => 'Geant', @@ -604,6 +617,8 @@ abstract class AbstractDeviceParser extends AbstractParser 'G6' => 'Gree', 'GRA' => 'Great Asia', '3G' => 'Greentel', + 'GRO' => 'Green Orange', + 'GR1' => 'GroBerwert', 'GF' => 'Gretel', '82' => 'Gresso', 'GU' => 'Grundig', @@ -684,8 +699,10 @@ abstract class AbstractDeviceParser extends AbstractParser 'IB' => 'iBall', 'IY' => 'iBerry', '7I' => 'iBrit', + 'IBO' => 'ibowin', 'I2' => 'IconBIT', 'IC' => 'iDroid', + 'IDI' => 'iDino', '6Z' => 'iData', 'IG' => 'iGet', 'IH' => 'iHunt', @@ -805,6 +822,7 @@ abstract class AbstractDeviceParser extends AbstractParser 'KV' => 'Kivi', '64' => 'Kvant', '0K' => 'Klipad', + 'KNM' => 'KN Mobile', 'KC' => 'Kocaso', 'KK' => 'Kodak', 'KG' => 'Kogan', @@ -867,6 +885,7 @@ abstract class AbstractDeviceParser extends AbstractParser 'LIN' => 'Linsay', 'LF' => 'Lifemaxx', 'LI' => 'Lingwin', + 'LIM' => 'Lime', 'LJ' => 'L-Max', 'LW' => 'Linnex', 'JJ' => 'Listo', @@ -956,6 +975,7 @@ abstract class AbstractDeviceParser extends AbstractParser 'MIW' => 'MIWANG', 'ML' => 'MLLED', 'LS' => 'MLS', + 'MLA' => 'MLAB', '5H' => 'MMI', '4M' => 'Mobicel', 'M6' => 'Mobiistar', @@ -966,6 +986,7 @@ abstract class AbstractDeviceParser extends AbstractParser '6W' => 'MobiWire', '9M' => 'Mobo', 'MOB' => 'Mobell', + 'MVO' => 'Mobvoi', 'M4' => 'Modecom', 'MF' => 'Mofut', 'MR' => 'Motorola', @@ -983,6 +1004,7 @@ abstract class AbstractDeviceParser extends AbstractParser '72' => 'M-Tech', '9H' => 'M-Horse', '1R' => 'Multilaser', + 'MPS' => 'MultiPOS', '1M' => 'MYFON', 'MY' => 'MyPhone', '51' => 'Myros', @@ -1005,6 +1027,7 @@ abstract class AbstractDeviceParser extends AbstractParser '7R' => 'NavRoad', 'NAS' => 'NASCO', 'NP' => 'Naomi Phone', + 'NAN' => 'Nanho', 'NE' => 'NEC', 'NDP' => 'Nedaphone', '8N' => 'Necnot', @@ -1060,6 +1083,7 @@ abstract class AbstractDeviceParser extends AbstractParser '5N' => 'Nos', 'NO' => 'Nous', 'NQ' => 'Novex', + 'NOD' => 'noDROPOUT', 'NJ' => 'NuAns', 'NL' => 'NUU Mobile', 'N0' => 'Nuvo', @@ -1130,6 +1154,8 @@ abstract class AbstractDeviceParser extends AbstractParser 'PA' => 'Panasonic', 'PT' => 'Pantech', 'PAN' => 'Pano', + 'PA1' => 'Panoramic', + 'PLT' => 'Platoon', '94' => 'Packard Bell', 'H9' => 'Parrot Mobile', 'PAR' => 'Partner Mobile', @@ -1179,6 +1205,7 @@ abstract class AbstractDeviceParser extends AbstractParser '3F' => 'Porsche', 'P3' => 'PPTV', 'FP' => 'Premio', + 'PR1' => 'Premier', 'PR' => 'Prestigio', 'P9' => 'Primepad', 'PRM' => 'PRIME', @@ -1353,12 +1380,14 @@ abstract class AbstractDeviceParser extends AbstractParser 'SOD' => 'Soda', '16' => 'Solone', 'OI' => 'Sonim', + 'SVE' => 'Sveon', 'SO' => 'Sony', 'SE' => 'Sony Ericsson', 'X2' => 'Soundmax', '8S' => 'Soyes', '77' => 'SONOS', '68' => 'Soho Style', + 'SOB' => 'SobieTech', 'PK' => 'Spark', 'FS' => 'SPC', '6S' => 'Spectrum', @@ -1390,6 +1419,7 @@ abstract class AbstractDeviceParser extends AbstractParser '5Y' => 'Sunny', 'W8' => 'SUNWIND', 'SBX' => 'SuperBOX', + 'SBR' => 'Sber', 'SU' => 'SuperSonic', '79' => 'SuperTab', 'S5' => 'Supra', @@ -1421,6 +1451,7 @@ abstract class AbstractDeviceParser extends AbstractParser 'H4' => 'Technicolor', 'TEA' => 'TeachTouch', 'Z5' => 'Technika', + 'TE1' => 'TechSmart', 'TX' => 'TechniSat', 'TT' => 'TechnoTrend', 'TP' => 'TechPad', @@ -1467,6 +1498,7 @@ abstract class AbstractDeviceParser extends AbstractParser 'T1' => 'Tolino', '0T' => 'Tone', 'TY' => 'Tooky', + 'TOO' => 'TOOGO', 'T9' => 'Top House', 'DK' => 'Topelotek', '42' => 'Topway', @@ -1526,6 +1558,7 @@ abstract class AbstractDeviceParser extends AbstractParser 'UU' => 'Unonu', 'UN' => 'Unowhy', 'UY' => 'UNNO', + 'UOO' => 'UOOGOU', 'UNB' => 'Unblock Tech', 'UK' => 'UTOK', '3U' => 'IUNI', @@ -1551,10 +1584,12 @@ abstract class AbstractDeviceParser extends AbstractParser 'VR' => 'Vernee', 'VX' => 'Vertex', 'VE' => 'Vertu', + 'VET' => 'VETAS', 'VL' => 'Verykool', 'QV' => 'Verssed', 'VER' => 'Versus', 'V8' => 'Vesta', + 'VEK' => 'Vekta', 'VT' => 'Vestel', '48' => 'Vexia', 'V6' => 'VGO TEL', @@ -1583,6 +1618,7 @@ abstract class AbstractDeviceParser extends AbstractParser 'VIZ' => 'Vizmo', 'VIT' => 'Vityaz', '9V' => 'Vision Touch', + 'VIL' => 'Visual Land', 'VK' => 'VK Mobile', 'JM' => 'v-mobile', 'VHO' => 'V-HOPE', @@ -1610,6 +1646,7 @@ abstract class AbstractDeviceParser extends AbstractParser 'VU' => 'Vulcan', '3V' => 'VVETIME', 'ZC' => 'VUCATIMES', + 'VO2' => 'VOLKANO', 'VUE' => 'Vue Micro', 'WA' => 'Walton', 'WAF' => 'WAF', @@ -1657,6 +1694,7 @@ abstract class AbstractDeviceParser extends AbstractParser 'X88' => 'X88', 'X96' => 'X96', '96Q' => 'X96Q', + 'A95' => 'A95X', 'XG' => 'Xgody', 'QX' => 'XGIMI', 'XL' => 'Xiaolajiao', @@ -1670,6 +1708,7 @@ abstract class AbstractDeviceParser extends AbstractParser 'X8' => 'Xtratech', 'XCR' => 'Xcruiser', 'XCO' => 'XCOM', + 'XCL' => 'Xcell', 'XWA' => 'Xwave', 'YD' => 'Yandex', 'YA' => 'Yarvik', @@ -1701,6 +1740,7 @@ abstract class AbstractDeviceParser extends AbstractParser 'ZAM' => 'Zamolxe', 'ZEA' => 'Zealot', 'PZ' => 'Zebra', + 'ZE1' => 'Zeblaze', 'ZE' => 'Zeemi', 'WZ' => 'Zeeker', 'ZN' => 'Zen', @@ -1844,6 +1884,16 @@ public function parse(): ?array $resultClientHint = $this->parseClientHints(); $deviceModel = $resultClientHint['model'] ?? ''; + // is freeze user-agent then restoring the original UA for the device definition + if ('' !== $deviceModel && \preg_match('~Android 10[.\d]*; K(?: Build/|[;)])~i', $this->userAgent)) { + $osVersion = $this->clientHints->getOperatingSystemVersion(); + $this->setUserAgent(\preg_replace( + '(Android 10[.\d]*; K)', + \sprintf('Android %s; %s', '' !== $osVersion ? $osVersion : '10', $deviceModel), + $this->userAgent + )); + } + if ('' === $deviceModel && $this->hasDesktopFragment()) { return $this->getResult(); } diff --git a/includes/libraries/udd/Parser/OperatingSystem.php b/includes/libraries/udd/Parser/OperatingSystem.php index c5384b6..52f37d9 100644 --- a/includes/libraries/udd/Parser/OperatingSystem.php +++ b/includes/libraries/udd/Parser/OperatingSystem.php @@ -122,6 +122,7 @@ class OperatingSystem extends AbstractParser 'ORD' => 'Ordissimo', 'PAR' => 'Pardus', 'PCL' => 'PCLinuxOS', + 'PIC' => 'PICO OS', 'PLA' => 'Plasma Mobile', 'PSP' => 'PlayStation Portable', 'PS3' => 'PlayStation', @@ -156,6 +157,7 @@ class OperatingSystem extends AbstractParser 'TOS' => 'TmaxOS', 'UBT' => 'Ubuntu', 'WAS' => 'watchOS', + 'WER' => 'Wear OS', 'WTV' => 'WebTV', 'WHS' => 'Whale OS', 'WIN' => 'Windows', @@ -182,7 +184,7 @@ class OperatingSystem extends AbstractParser protected static $osFamilies = [ 'Android' => [ 'AND', 'CYN', 'FIR', 'REM', 'RZD', 'MLD', 'MCD', 'YNS', 'GRI', 'HAR', - 'ADR', 'CLR', 'BOS', 'REV', 'LEN', 'SIR', 'RRS', + 'ADR', 'CLR', 'BOS', 'REV', 'LEN', 'SIR', 'RRS', 'WER', 'PIC', ], 'AmigaOS' => ['AMG', 'MOR'], 'BlackBerry' => ['BLB', 'QNX'], diff --git a/includes/libraries/udd/regexes/bots.yml b/includes/libraries/udd/regexes/bots.yml index eee974c..33a0194 100644 --- a/includes/libraries/udd/regexes/bots.yml +++ b/includes/libraries/udd/regexes/bots.yml @@ -712,7 +712,15 @@ name: 'Visual Meta' url: 'https://www.shopalike.cz/' -- regex: 'AdsBot-Google|Adwords-(DisplayAds|Express|Instant)|Google Web Preview|Google[ -]Publisher[ -]Plugin|Google-(Ads-Conversions|Ads-Qualify|Adwords|AMPHTML|Assess|HotelAdsVerifier|Read-Aloud|Shopping-Quality|Site-Verification|speakr|Stale-Content-Probe|Test|Youtube-Links)|(APIs|DuplexWeb|Feedfetcher|Mediapartners)-Google|Googlebot|Google(?:AdSenseInfeed|AssociationService|Prober|Producer)|Google.*/\+/web/snippet' +- regex: 'AdsBot-Google|Adwords-(DisplayAds|Express|Instant)|Google Web Preview|Google[ -]Publisher[ -]Plugin|Google-(Ads-Conversions|Ads-Qualify|Adwords|AMPHTML|Assess|HotelAdsVerifier|InspectionTool|Read-Aloud|Shopping-Quality|Site-Verification|speakr|Stale-Content-Probe|Test|Youtube-Links)|(APIs|DuplexWeb|Feedfetcher|Mediapartners)-Google|Googlebot|Google(?:AdSenseInfeed|AssociationService|Other|Prober|Producer)|Google.*/\+/web/snippet' + name: 'Googlebot' + category: 'Search bot' + url: 'http://www.google.com/bot.html' + producer: + name: 'Google Inc.' + url: 'http://www.google.com' + +- regex: '^Google$' name: 'Googlebot' category: 'Search bot' url: 'http://www.google.com/bot.html' @@ -735,6 +743,11 @@ name: 'HubSpot Inc.' url: 'https://www.hubspot.com' +- regex: 'vuhuvBot' + name: 'Vuhuv Bot' + category: 'Crawler' + url: 'http://vuhuv.com/bot.html' + - regex: 'HTTPMon' name: 'HTTPMon' category: 'Site Monitor' @@ -1757,7 +1770,15 @@ - regex: 'Y!J-BRW' name: 'Yahoo! Japan BRW' category: 'Crawler' - url: 'https://www.yahoo-help.jp/app/answers/detail/p/595/a_id/42716/~/ウェブページにアクセスするシステムのユーザーエージェントについて' + url: 'https://support.yahoo-net.jp/PccSearch/s/article/H000007955' + producer: + name: 'Yahoo! Japan Corp.' + url: 'https://www.yahoo.co.jp/' + +- regex: 'Y!J-WSC' + name: 'Yahoo! Japan WSC' + category: 'Crawler' + url: 'https://support.yahoo-net.jp/PccSearch/s/article/H000007955' producer: name: 'Yahoo! Japan Corp.' url: 'https://www.yahoo.co.jp/' @@ -1982,7 +2003,7 @@ - regex: 'RSSRadio \(Push Notification Scanner;support@dorada\.co\.uk\)' name: 'RSSRadio Bot' -- regex: '(A6-Indexer|nuhk|TsolCrawler|Yammybot|Openbot|Gulper Web Bot|grub-client|Download Demon|SearchExpress|Microsoft URL Control|borg|altavista|dataminr.com|tweetedtimes.com|TrendsmapResolver|teoma|blitzbot|oegp|furlbot|http%20client|polybot|htdig|mogimogi|larbin|scrubby|searchsight|seekbot|semanticdiscovery|snappy|vortex(?!(?: Build|Plus))|zeal(?!ot)|fast-webcrawler|converacrawler|dataparksearch|findlinks|BrowserMob|HttpMonitor|ThumbShotsBot|URL2PNG|ZooShot|GomezA|Google SketchUp|Read%20Later|RackspaceBot|robots|SeopultContentAnalyzer|7Siters|centuryb.o.t9|InterNaetBoten|EasyBib AutoCite|Bidtellect|tomnomnom/meg|My User Agent|cortex|CF-UC User Agent|Re-re Studio|adreview|AHC/|NameOfAgent|Request-Promise|ALittle Client|Hello,? world|wp_is_mobile|0xAbyssalDoesntExist|Anarchy99|daumoa,damoa,daum,daumos,duamoa,duam,duamos|^revolt|nvd0rz|xfa1|Hakai|gbrmss|fuck-your-hp|IDBTE4M CODE87|Antoine|Insomania|Hells-Net|b3astmode|Linux Gnu \(cow\)|custom_user_agent|Test Certificate Info|iplabel)' +- regex: '(A6-Indexer|nuhk|TsolCrawler|Yammybot|Openbot|Gulper Web Bot|grub-client|Download Demon|SearchExpress|Microsoft URL Control|borg|altavista|dataminr.com|tweetedtimes.com|TrendsmapResolver|teoma|blitzbot|oegp|furlbot|http%20client|polybot|htdig|mogimogi|larbin|scrubby|searchsight|seekbot|semanticdiscovery|snappy|vortex(?!(?: Build|Plus))|zeal(?!ot)|fast-webcrawler|converacrawler|dataparksearch|findlinks|BrowserMob|HttpMonitor|ThumbShotsBot|URL2PNG|ZooShot|GomezA|Google SketchUp|Read%20Later|RackspaceBot|robots|SeopultContentAnalyzer|7Siters|centuryb.o.t9|InterNaetBoten|EasyBib AutoCite|Bidtellect|tomnomnom/meg|My User Agent|cortex|CF-UC User Agent|Re-re Studio|adreview|AHC/|NameOfAgent|Request-Promise|ALittle Client|Hello,? world|wp_is_mobile|0xAbyssalDoesntExist|Anarchy99|daumoa,damoa,daum,daumos,duamoa,duam,duamos|^revolt|nvd0rz|xfa1|Hakai|gbrmss|fuck-your-hp|IDBTE4M CODE87|Antoine|Insomania|Hells-Net|b3astmode|Linux Gnu \(cow\)|custom_user_agent|Test Certificate Info|iplabel|Magellan)' name: 'Generic Bot' - regex: '^sentry' @@ -2041,7 +2062,15 @@ name: 'WooRank sprl' url: 'https://www.woorank.com/' -- regex: '(Match|LinkCheck) by Siteimprove.com' +- regex: 'by Siteimprove\.com' + name: 'Siteimprove' + category: 'Search bot' + url: 'https://siteimprove.com/' + producer: + name: 'Siteimprove GmbH' + url: 'https://siteimprove.com/' + +- regex: 'Image size by Siteimprove\.com' name: 'Siteimprove' category: 'Search bot' url: 'https://siteimprove.com/' @@ -2587,6 +2616,14 @@ category: 'Security Checker' url: 'https://github.com/LeakIX/l9explore' +- regex: 'l9scan/|^Lkx-(.*)/([\d+.]+)' + name: 'LeakIX' + category: 'Security Checker' + url: 'https://leakix.net/' + producer: + name: 'BaDaaS SRL' + url: 'https://leakix.net/' + - regex: 'MegaIndex.ru/([\d+\.])' name: 'MegaIndex' category: 'Crawler' @@ -3078,14 +3115,6 @@ name: 'New Work SE' url: 'https://www.xing.com/' -- regex: '^Lkx-(.*)/([\d+.]+)' - name: 'LeakIX' - category: 'Security Checker' - url: 'https://leakix.net/' - producer: - name: 'BaDaaS SRL' - url: 'https://leakix.net/' - - regex: 'RepoLookoutBot/([\d+.]+)' name: 'Repo Lookout' category: 'Security Checker' @@ -3342,6 +3371,70 @@ url: 'https://github.com/diem-project/sfFeed2Plugin' category: 'Feed Fetcher' +- regex: 'cyberscan.io' + name: 'Cyberscan' + category: 'Security Checker' + url: 'https://www.cyberscan.io/' + producer: + name: 'DGC Verwaltungs GmbH' + url: 'https://dgc.org/' + +- regex: 'deepcrawl\.com' + name: 'Lumar' + category: 'Crawler' + url: 'https://deepcrawl.com/bot' + producer: + name: 'Lumar' + url: 'https://www.lumar.io/' + +- regex: 'RepoLookoutBot' + name: 'Repo Lookout' + category: 'Crawler' + url: 'https://www.repo-lookout.org/' + producer: + name: 'Crissy Field GmbH' + url: 'https://www.crissyfield.de/' + +- regex: 'researchscan.comsys.rwth-aachen.de' + name: 'Research Scan' + category: 'Crawler' + url: 'http://researchscan.comsys.rwth-aachen.de/' + producer: + name: 'RWTH Aachen University' + url: 'https://www.comsys.rwth-aachen.de/' + +- regex: 'newspaper/([\d+.]+)' + name: 'Scraping Robot' + category: 'Crawler' + url: 'https://scrapingrobot.com/' + producer: + name: 'Sprious LLC' + url: 'https://sprious.com/' + +- regex: 'GPTBot/([\d+.]+)' + name: 'GPTBot' + category: 'Crawler' + url: 'https://platform.openai.com/docs/gptbot' + producer: + name: 'OpenAI OpCo, LLC' + url: 'https://openai.com/' + +- regex: 'Ant.com beta/([\d+.]+)' + name: 'Ant' + category: 'Crawler' + url: 'https://www.ant.com/' + producer: + name: 'Ant.com Ltd.' + url: 'https://www.ant.com/' + +- regex: 'WebwikiBot/([\d+.]+)' + name: 'Webwiki' + category: 'Crawler' + url: 'https://www.webwiki.com/' + producer: + name: 'webwiki GmbH' + url: 'https://www.webwiki.com/' + # Generic detections - regex: '[a-z0-9\-_]*((?