From f7d77f2fda3846adf6dd3c10e37bfad4e4f7dc50 Mon Sep 17 00:00:00 2001 From: Pierre Lannoy Date: Tue, 28 May 2024 13:59:11 +0200 Subject: [PATCH] Updates UDD from version 6.3.1 to version 6.3.2 --- CHANGELOG.md | 12 + includes/libraries/decalog-sdk/Engine.php | 30 +- .../libraries/decalog-sdk/EventsLogger.php | 2 +- includes/libraries/udd/DeviceDetector.php | 4 +- .../libraries/udd/Parser/Client/Browser.php | 6 +- .../Parser/Device/AbstractDeviceParser.php | 44 + .../libraries/udd/Parser/OperatingSystem.php | 7 +- includes/libraries/udd/regexes/bots.yml | 128 +- .../libraries/udd/regexes/client/browsers.yml | 18 +- .../udd/regexes/client/feed_readers.yml | 2 +- .../udd/regexes/client/hints/apps.yml | 4 +- .../udd/regexes/client/libraries.yml | 5 + .../udd/regexes/client/mobile_apps.yml | 80 +- includes/libraries/udd/regexes/client/pim.yml | 4 + .../libraries/udd/regexes/device/mobiles.yml | 1739 +++++++++++++---- includes/libraries/udd/regexes/oss.yml | 27 +- 16 files changed, 1661 insertions(+), 451 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index ade4776..cc49f35 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,18 @@ 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). +## [4.0.0] - 2024-05-xx + +### Added +- [BC] To enable installation on more heterogeneous platforms, the plugin now adapts its internal logging mode to already loaded libraries. + +### Changed +- Updated DecaLog SDK from version 4.1.0 to version 5.0.0. +- Upgraded UDD from version 6.3.1 to version 6.3.2: dozens of added and improved detections. + +### Fixed +- PHP error with some plugins like Woocommerce Paypal Payments. + ## [3.8.0] - 2024-05-07 ### Changed diff --git a/includes/libraries/decalog-sdk/Engine.php b/includes/libraries/decalog-sdk/Engine.php index cafbec4..f48cda3 100644 --- a/includes/libraries/decalog-sdk/Engine.php +++ b/includes/libraries/decalog-sdk/Engine.php @@ -26,7 +26,7 @@ class Engine { * @since 1.0.0 * @var string $version Maintains the engine version. */ - private static $version = '4.2.0'; + private static $version = '5.0.0'; /** * The logger instances and parameters. @@ -89,19 +89,27 @@ public static function getSdkVersion() { * @since 4.2.0 */ public static function getPsrVersion() { - if ( class_exists( '\Psr\Log\NullLogger') ) { - $reflection = new \ReflectionMethod(\Psr\Log\NullLogger::class, 'log'); - foreach ( $reflection->getParameters() as $param ) { - if ( 'message' === $param->getName() ) { - if ( str_contains($param->getType() ?? '', '|') ) { - return 3; + $required = 1; + if ( ! defined( 'DECALOG_PSR_LOG_VERSION') ) { + define( 'DECALOG_PSR_LOG_VERSION', 'V1' ); + } + switch ( strtolower( DECALOG_PSR_LOG_VERSION ) ) { + case 'v3': + $required = 3; + break; + case 'auto': + if ( class_exists( '\Psr\Log\NullLogger') ) { + $reflection = new \ReflectionMethod(\Psr\Log\NullLogger::class, 'log'); + foreach ( $reflection->getParameters() as $param ) { + if ( 'message' === $param->getName() ) { + if ( str_contains($param->getType() ?? '', '|') ) { + $required = 3; + } + } } } - } - } else { - return 0; } - return 1; + return $required; } /** diff --git a/includes/libraries/decalog-sdk/EventsLogger.php b/includes/libraries/decalog-sdk/EventsLogger.php index bbe90d7..7954270 100644 --- a/includes/libraries/decalog-sdk/EventsLogger.php +++ b/includes/libraries/decalog-sdk/EventsLogger.php @@ -266,7 +266,7 @@ public function log( $level, string|\Stringable $message, array $context = [] ): } } -} else { // if version in not detected or equal to 1 +} else { /** * DecaLog PSR-3 logger class. Failsafe for old PSR-3 versions. diff --git a/includes/libraries/udd/DeviceDetector.php b/includes/libraries/udd/DeviceDetector.php index af70527..ff7d390 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.3.1'; + public const VERSION = '6.3.2'; /** * Constant used as value for unknown browser / os @@ -776,7 +776,7 @@ protected function getOsAttribute(string $attr): string */ protected function hasAndroidTableFragment(): bool { - $regex = 'Android( [\.0-9]+)?; Tablet;|.*\-tablet$'; + $regex = 'Android( [\.0-9]+)?; Tablet;|Tablet(?! PC)|.*\-tablet$'; return !!$this->matchUserAgent($regex); } diff --git a/includes/libraries/udd/Parser/Client/Browser.php b/includes/libraries/udd/Parser/Client/Browser.php index 74edcc2..d90f701 100644 --- a/includes/libraries/udd/Parser/Client/Browser.php +++ b/includes/libraries/udd/Parser/Client/Browser.php @@ -403,6 +403,7 @@ class Browser extends AbstractClientParser 'MY' => 'Mypal', 'MR' => 'Monument Browser', 'MW' => 'MAUI WAP Browser', + 'N7' => 'Naenara Browser', 'NW' => 'Navigateur Web', 'NK' => 'Naked Browser', 'NA' => 'Naked Browser Pro', @@ -414,6 +415,7 @@ class Browser extends AbstractClientParser 'N2' => 'Norton Private Browser', 'NX' => 'Nox Browser', 'N1' => 'NOMone VR Browser', + 'N6' => 'NOOK Browser', 'NE' => 'NetSurf', 'NF' => 'NetFront', 'NL' => 'NetFront Life', @@ -723,7 +725,7 @@ class Browser extends AbstractClientParser 'IW', 'LH', 'LY', 'MB', 'MN', 'MO', 'MY', 'OA', 'OS', 'PI', 'PX', 'QA', 'S5', 'SX', 'TF', 'TO', 'WF', 'ZV', 'FP', 'AD', 'WL', '2I', 'P9', 'KJ', 'WY', 'VK', 'W5', - '7C', + '7C', 'N7', ], 'Internet Explorer' => ['IE', 'CZ', 'BZ', 'IM', 'PS', '3A', '4A', 'RN'], 'Konqueror' => ['KO'], @@ -761,7 +763,7 @@ class Browser extends AbstractClientParser 'H5', 'V3', 'G2', 'BG', 'OL', 'II', 'TL', 'M6', 'Y3', 'M7', 'GN', 'D3', 'IG', 'HW', '4O', 'OU', '5P', 'KE', '5A', 'TT', '6P', 'G3', '7P', 'VU', 'F8', 'L4', 'DK', - 'DP', 'KL', 'K4', + 'DP', 'KL', 'K4', 'N6', ]; /** diff --git a/includes/libraries/udd/Parser/Device/AbstractDeviceParser.php b/includes/libraries/udd/Parser/Device/AbstractDeviceParser.php index 9fa9448..591b060 100644 --- a/includes/libraries/udd/Parser/Device/AbstractDeviceParser.php +++ b/includes/libraries/udd/Parser/Device/AbstractDeviceParser.php @@ -99,6 +99,7 @@ abstract class AbstractDeviceParser extends AbstractParser 'ACC' => 'Accesstyle', 'AE' => 'Ace', 'AC' => 'Acer', + 'ACL' => 'Aceline', '3K' => 'Acteck', 'ACT' => 'actiMirror', 'A9' => 'Advan', @@ -155,6 +156,7 @@ abstract class AbstractDeviceParser extends AbstractParser '60' => 'Andowl', 'ANX' => 'ANXONIT', '6J' => 'Angelcare', + 'ANG' => 'AngelTech', '7A' => 'Anry', 'A0' => 'ANS', '74' => 'Anker', @@ -168,6 +170,7 @@ abstract class AbstractDeviceParser extends AbstractParser 'ARC' => 'Arçelik', 'AR' => 'Archos', 'AB' => 'Arian Space', + 'ARI' => 'Arival', 'A6' => 'Ark', '5A' => 'ArmPhone', 'AN' => 'Arnova', @@ -208,6 +211,7 @@ abstract class AbstractDeviceParser extends AbstractParser 'YR' => 'AYYA', 'XA' => 'Axioo', 'AM' => 'Azumi Mobile', + 'AZE' => 'Azeyou', 'WW' => 'Awow', 'AWO' => 'AWOX', 'XU' => 'AUX', @@ -296,6 +300,7 @@ abstract class AbstractDeviceParser extends AbstractParser 'Y8' => 'Bubblegum', 'BMW' => 'BMW', 'C9' => 'CAGI', + 'CAD' => 'CADENA', 'CT' => 'Capitel', 'G3' => 'CG Mobile', '37' => 'CGV', @@ -312,6 +317,7 @@ abstract class AbstractDeviceParser extends AbstractParser 'CNG' => 'Canguro', 'CNT' => 'CCIT', 'CEC' => 'Cecotec', + 'CEP' => 'CEPTER', 'CEI' => 'Ceibal', '02' => 'Cell-C', 'CEL' => 'Cellacom', @@ -328,12 +334,14 @@ abstract class AbstractDeviceParser extends AbstractParser 'C3' => 'China Mobile', 'U9' => 'China Telecom', 'CI' => 'Chico Mobile', + 'CIA' => 'C Idea', 'CIP' => 'CipherLab', 'CIT' => 'Citycall', '1C' => 'Chuwi', 'L8' => 'Clarmin', '25' => 'Claresta', 'CLA' => 'CLAYTON', + 'CLT' => 'Clovertek', '1J' => 'Cloud', 'CD' => 'Cloudfone', '6C' => 'Cloudpad', @@ -378,6 +386,7 @@ abstract class AbstractDeviceParser extends AbstractParser 'CTR' => 'Ctroniq', 'CU' => 'Cube', 'CB' => 'CUBOT', + 'CUI' => 'Cuiud', 'CV' => 'CVTE', 'CWO' => 'Cwowdefu', 'C4' => 'Cyrus', @@ -385,6 +394,7 @@ abstract class AbstractDeviceParser extends AbstractParser 'DA' => 'Danew', 'DAN' => 'Dany', 'DA1' => 'DangcapHD', + 'DAR' => 'Daria', 'DT' => 'Datang', 'D7' => 'Datawind', '7D' => 'Datamini', @@ -465,6 +475,7 @@ abstract class AbstractDeviceParser extends AbstractParser 'DLI' => 'D-Link', 'ENO' => 'eNOVA', 'IN2' => 'iNOVA', + 'IN3' => 'inovo', 'INH' => 'Inhon', 'EB' => 'E-Boda', 'EJ' => 'Engel', @@ -475,6 +486,7 @@ abstract class AbstractDeviceParser extends AbstractParser 'EAS' => 'EAS Electric', 'EP' => 'Easypix', 'EQ' => 'Eagle', + 'EGS' => 'EagleSoar', 'EA' => 'EBEST', 'YC' => 'EBEN', 'E4' => 'Echo Mobiles', @@ -543,6 +555,7 @@ abstract class AbstractDeviceParser extends AbstractParser 'EX' => 'Explay', 'EXP' => 'Express LUCK', 'E5' => 'Extrem', + 'EXL' => 'ExtraLink', 'EF' => 'EXCEED', 'QE' => 'EWIS', 'EI' => 'Ezio', @@ -579,6 +592,7 @@ abstract class AbstractDeviceParser extends AbstractParser 'FIL' => 'FILIX', 'FL' => 'Fly', 'QC' => 'FLYCAT', + 'FLY' => 'FLYCOAY', 'FLU' => 'Fluo', 'FN' => 'FNB', 'FOB' => 'Fobem', @@ -651,6 +665,7 @@ abstract class AbstractDeviceParser extends AbstractParser 'GB' => 'Gol Mobile', 'GL' => 'Goly', 'GOL' => 'GoldMaster', + 'GOB' => 'GOLDBERG', 'GX' => 'GLX', 'G5' => 'Gome', 'G1' => 'GoMobile', @@ -679,6 +694,7 @@ abstract class AbstractDeviceParser extends AbstractParser '9F' => 'HAOVM', 'HAQ' => 'HAOQIN', 'HA' => 'Haier', + 'HEC' => 'HEC', 'XH' => 'Haipai', 'HAN' => 'Handheld', 'HE' => 'HannSpree', @@ -695,9 +711,11 @@ abstract class AbstractDeviceParser extends AbstractParser 'ZH' => 'Hezire', 'HEX' => 'HexaByte', 'HEW' => 'HeadWolf', + 'HEI' => 'Heimat', 'HL' => 'Hi-Level', '3H' => 'Hi', 'HIB' => 'Hiberg', + 'HBY' => 'HiBy', 'HIH' => 'HiHi', 'HIK' => 'HiKing', 'H2' => 'Highscreen', @@ -718,6 +736,7 @@ abstract class AbstractDeviceParser extends AbstractParser 'H1' => 'Hoffmann', 'HOM' => 'Homatics', 'H0' => 'Hometech', + 'HLB' => 'HOLLEBERG', 'HM' => 'Homtom', 'HZ' => 'Hoozo', 'H7' => 'Horizon', @@ -841,6 +860,7 @@ abstract class AbstractDeviceParser extends AbstractParser 'JF' => 'JFone', 'JI' => 'Jiayu', 'JG' => 'Jinga', + 'JIN' => 'Jin Tu', 'JX' => 'Jio', 'VJ' => 'Jivi', 'JK' => 'JKL', @@ -871,6 +891,7 @@ abstract class AbstractDeviceParser extends AbstractParser 'KHA' => 'Khadas', 'KS' => 'Kempler & Strauss', 'K3' => 'Keneksi', + 'KHI' => 'KENSHI', 'KX' => 'Kenxinda', 'KEN' => 'Kenbo', 'KND' => 'Kendo', @@ -884,6 +905,7 @@ abstract class AbstractDeviceParser extends AbstractParser '46' => 'Kiowa', 'KV' => 'Kivi', '64' => 'Kvant', + 'KVA' => 'KVADRA', '0K' => 'Klipad', 'KNM' => 'KN Mobile', 'KC' => 'Kocaso', @@ -923,6 +945,7 @@ abstract class AbstractDeviceParser extends AbstractParser 'Z3' => 'Laurus', 'LEC' => 'Lectrus', 'LV' => 'Lava', + 'LVI' => 'Lville', 'LC' => 'LCT', 'L5' => 'Leagoo', 'U3' => 'Leben', @@ -950,6 +973,7 @@ abstract class AbstractDeviceParser extends AbstractParser 'LIN' => 'Linsay', 'LF' => 'Lifemaxx', 'LI' => 'Lingwin', + 'LIB' => 'Lingbo', 'LIM' => 'Lime', 'LJ' => 'L-Max', 'LW' => 'Linnex', @@ -978,6 +1002,7 @@ abstract class AbstractDeviceParser extends AbstractParser '92' => 'MAC AUDIO', 'MJ' => 'Majestic', 'FQ' => 'Mafe', + 'MAG' => 'MAG', '6Y' => 'Magicsee', '23' => 'Magnus', 'NH' => 'Manhattan', @@ -1008,6 +1033,7 @@ abstract class AbstractDeviceParser extends AbstractParser 'MAU' => 'Maunfeld', '28' => 'MBOX', 'FK' => 'MBI', + 'MBK' => 'MBK', '3D' => 'MDC Store', '1Y' => 'MDTV', '09' => 'meanIT', @@ -1030,6 +1056,7 @@ abstract class AbstractDeviceParser extends AbstractParser 'MEO' => 'MEO', 'MX' => 'MEU', 'MI' => 'MicroMax', + 'MIP' => 'mipo', 'MS' => 'Microsoft', '6Q' => 'Microtech', '1X' => 'Minix', @@ -1091,6 +1118,7 @@ abstract class AbstractDeviceParser extends AbstractParser 'MYG' => 'MygPad', 'MWA' => 'MwalimuPlus', 'NEO' => 'neoCore', + 'NER' => 'Neoregent', '08' => 'Nabi', 'N7' => 'National', 'NC' => 'Navcity', @@ -1145,6 +1173,7 @@ abstract class AbstractDeviceParser extends AbstractParser 'N1' => 'Noain', 'N6' => 'Nobby', 'NOC' => 'Novacom', + 'NOS' => 'NoviSea', 'NOV' => 'Novey', 'NO1' => 'NOVO', '57' => 'Nubia', @@ -1235,6 +1264,7 @@ abstract class AbstractDeviceParser extends AbstractParser '7P' => 'P-UP', 'PRA' => 'Pacific Research Alliance', 'PAG' => 'PAGRAER', + 'PAD' => 'Padpro', 'YP' => 'Paladin', 'PM' => 'Palm', 'PN' => 'Panacom', @@ -1319,6 +1349,7 @@ abstract class AbstractDeviceParser extends AbstractParser 'QH' => 'Q-Touch', 'QB' => 'Q.Bell', 'QI' => 'Qilive', + 'QIN' => 'QIN', 'QM' => 'QMobile', 'QT' => 'Qtek', 'Q9' => 'QTECH', @@ -1356,6 +1387,7 @@ abstract class AbstractDeviceParser extends AbstractParser 'RP' => 'Revo', 'REV' => 'Revomovil', '8R' => 'Retroid Pocket', + 'REN' => 'Renova', 'RIC' => 'Ricoh', 'RI' => 'Rikomagic', 'RM' => 'RIM', @@ -1387,6 +1419,7 @@ abstract class AbstractDeviceParser extends AbstractParser 'RY' => 'Ryte', 'X5' => 'Saba', '8L' => 'S-TELL', + '8L1' => 'S-Color', '4O' => 'S2Tel', '89' => 'Seatel', 'SEW' => 'Sewoo', @@ -1484,6 +1517,7 @@ abstract class AbstractDeviceParser extends AbstractParser 'SO' => 'Sony', 'SE' => 'Sony Ericsson', 'X2' => 'Soundmax', + 'SUL' => 'SoulLink', '8S' => 'Soyes', '77' => 'SONOS', '68' => 'Soho Style', @@ -1559,6 +1593,7 @@ abstract class AbstractDeviceParser extends AbstractParser 'TE1' => 'TechSmart', 'TX' => 'TechniSat', 'TT' => 'TechnoTrend', + 'TTS' => 'TECHNOSAT', 'TP' => 'TechPad', 'TPS' => 'TPS', '9E' => 'Techwood', @@ -1642,6 +1677,7 @@ abstract class AbstractDeviceParser extends AbstractParser '5T' => 'TurboKids', 'UR' => 'Turkcell', '4U' => 'TuCEL', + 'TUV' => 'Tuvio', '2U' => 'Türk Telekom', 'TV' => 'TVC', 'TW' => 'TWM', @@ -1691,6 +1727,7 @@ abstract class AbstractDeviceParser extends AbstractParser 'VAW' => 'VANWIN', 'VB' => 'VC', 'VN' => 'Venso', + 'VNP' => 'VNPT Technology', 'VEN' => 'Venstar', 'UV' => 'Venturer', 'VQ' => 'Vega', @@ -1735,6 +1772,7 @@ abstract class AbstractDeviceParser extends AbstractParser 'VIT' => 'Vityaz', '9V' => 'Vision Touch', 'VIL' => 'Visual Land', + 'VI1' => 'VILLAON', 'VK' => 'VK Mobile', 'JM' => 'v-mobile', 'VHO' => 'V-HOPE', @@ -1742,6 +1780,7 @@ abstract class AbstractDeviceParser extends AbstractParser 'VGE' => 'V-Gen', 'V0' => 'VKworld', 'VM' => 'Vodacom', + 'VOC' => 'VOCAL', 'VF' => 'Vodafone', '7W' => 'VOGA', 'V2' => 'Vonino', @@ -1769,8 +1808,11 @@ abstract class AbstractDeviceParser extends AbstractParser 'WAK' => 'Walker', 'WA' => 'Walton', 'WAF' => 'WAF', + 'WAO' => 'W&O', 'WAL' => 'Waltter', + 'WAI' => 'Wainyok', 'WHI' => 'White Mobile', + 'WHO' => 'Whoop', 'WBL' => 'We. by Loewe.', 'WCP' => 'WeChip', 'WM' => 'Weimei', @@ -1827,6 +1869,7 @@ abstract class AbstractDeviceParser extends AbstractParser 'XO' => 'Xolo', 'XR' => 'Xoro', 'XS' => 'Xshitou', + 'XSM' => 'Xsmart', '4X' => 'Xtouch', 'X8' => 'Xtratech', 'XCR' => 'Xcruiser', @@ -1890,6 +1933,7 @@ abstract class AbstractDeviceParser extends AbstractParser 'Z4' => 'ZH&K', 'OW' => 'öwn', 'WBF' => 'Webfleet', + 'WSS' => 'WS', // legacy brands, might be removed in future versions 'WB' => 'Web TV', 'XX' => 'Unknown', diff --git a/includes/libraries/udd/Parser/OperatingSystem.php b/includes/libraries/udd/Parser/OperatingSystem.php index 7bf60cb..d53c11e 100644 --- a/includes/libraries/udd/Parser/OperatingSystem.php +++ b/includes/libraries/udd/Parser/OperatingSystem.php @@ -147,6 +147,7 @@ class OperatingSystem extends AbstractParser 'PIO' => 'Raspberry Pi OS', 'RAS' => 'Raspbian', 'RHT' => 'Red Hat', + 'RST' => 'Red Star', 'RED' => 'RedOS', 'REV' => 'Revenge OS', 'ROS' => 'RISC OS', @@ -232,7 +233,7 @@ class OperatingSystem extends AbstractParser 'FOR', 'MON', 'KAN', 'ZEN', 'LND', 'LNS', 'CHN', 'AMZ', 'TEN', 'CST', 'NOV', 'ROU', 'ZOR', 'RED', 'KAL', 'ORA', 'VID', 'TIV', 'BSN', 'RAS', 'UOS', 'PIO', 'FRI', 'LIR', 'WEB', 'SER', 'ASP', 'AOS', 'LOO', 'EUL', - 'SCI', 'ALP', 'CLO', 'ROC', 'OVZ', 'PVE', + 'SCI', 'ALP', 'CLO', 'ROC', 'OVZ', 'PVE', 'RST', ], 'Mac' => ['MAC'], 'Mobile Gaming Console' => ['PSP', 'NDS', 'XBX'], @@ -667,7 +668,7 @@ protected function parsePlatform(): string } } - if ($this->matchUserAgent('arm|aarch64|Apple ?TV|Watch ?OS|Watch1,[12]')) { + if ($this->matchUserAgent('arm|.*arm64|aarch64|Apple ?TV|Watch ?OS|Watch1,[12]')) { return 'ARM'; } @@ -691,7 +692,7 @@ protected function parsePlatform(): string return 'x64'; } - if ($this->matchUserAgent('.+32bit|.+win32|(?:i[0-9]|x)86|i86pc')) { + if ($this->matchUserAgent('.*32bit|.*win32|(?:i[0-9]|x)86|i86pc')) { return 'x86'; } diff --git a/includes/libraries/udd/regexes/bots.yml b/includes/libraries/udd/regexes/bots.yml index afcc4c7..f5ef176 100644 --- a/includes/libraries/udd/regexes/bots.yml +++ b/includes/libraries/udd/regexes/bots.yml @@ -551,10 +551,10 @@ name: 'SEOmoz, Inc.' url: 'http://moz.com/' -- regex: 'facebookexternalhit|facebookplatform|facebookexternalua|facebookcatalog' - name: 'Facebook External Hit' +- regex: 'facebook(?:catalog|externalhit|externalua|platform|scraper)' + name: 'Facebook Crawler' category: 'Social Media Agent' - url: 'https://www.facebook.com/externalhit_uatext.php' + url: 'https://developers.facebook.com/docs/sharing/webmasters/crawler/' producer: name: 'Meta Platforms, Inc.' url: 'https://www.meta.com/' @@ -961,7 +961,7 @@ name: 'BIZON, OOO' url: 'https://bi.zone/' -- regex: 'masscan' +- regex: '.*masscan' name: 'masscan' url: 'https://github.com/robertdavidgraham/masscan' category: 'Crawler' @@ -2455,7 +2455,7 @@ name: 'PPC Labs LLC' url: 'https://www.adbeat.com/' -- regex: 'BW/[\d.]+' +- regex: '(?:BuiltWith|BW)/[\d.]+' name: 'BuiltWith' category: 'Crawler' url: 'https://builtwith.com/biup' @@ -3707,6 +3707,11 @@ category: 'Crawler' url: 'https://geedo.com/bot/' +- regex: 'GeedoProductSearch' + name: 'GeedoProductSearch' + category: 'Crawler' + url: 'https://geedo.com/product-search/' + - regex: 'BackupLand(?:/([\d+.]+))?' name: 'BackupLand' category: 'Crawler' @@ -4374,10 +4379,119 @@ name: 'Library and Archives Canada' url: 'https://library-archives.canada.ca/' +- regex: 'InsytfulBot/[\d.]+' + name: 'InsytfulBot' + category: 'Crawler' + url: 'https://www.insytful.com/' + producer: + name: 'Zengenti Limited' + url: 'https://www.zengenti.com/' + +- regex: 'statista\.com' + name: 'Statista' + category: 'Crawler' + url: 'https://www.statista.com/' + producer: + name: 'Statista, Inc.' + url: 'https://www.statista.com/' + +- regex: 'SubstackContentFetch/[\d.]+' + name: 'Substack Content Fetch' + category: 'Crawler' + url: 'https://substack.com/' + producer: + name: 'Substack, Inc.' + url: 'https://substack.com/' + +- regex: '^ds9' + name: 'Deep SEARCH 9' + category: 'Crawler' + url: 'https://www.copyright.com/blog/ccc-expands-corporate-solutions-offering-with-new-technology/' + producer: + name: 'Copyright Clearance Center, Inc.' + url: 'https://www.copyright.com/' + +- regex: 'LiveJournal\.com' + name: 'LiveJournal' + url: 'https://www.livejournal.com/' + category: 'Feed Fetcher' + producer: + name: 'ООО "СИМ"' + url: 'https://www.livejournal.com/' + +- regex: 'bitdiscovery' + name: 'Tenable.asm' + category: 'Security Checker' + url: 'https://bitdiscovery.com/' + producer: + name: 'Tenable, Inc.' + url: 'https://www.tenable.com/' + +- regex: 'Castopod/[\d.]+' + name: 'Castopod' + category: 'Crawler' + url: 'https://www.castopod.org/' + +- regex: 'Elastic/Synthetics' + name: 'Elastic Synthetics' + category: 'Site Monitor' + url: 'https://github.com/elastic/synthetics' + producer: + name: 'Elasticsearch B.V.' + url: 'https://www.elastic.co/' + +- regex: 'WDG_Validator/[\d.]+' + name: 'WDG HTML Validator' + category: 'Validator' + url: 'http://www.htmlhelp.com/tools/validator/' + +- regex: 'scan@aegis.network' + name: 'Aegis' + category: 'Crawler' + url: 'https://web.archive.org/web/20180910002802/http://www.aegis.network/' + +- regex: 'CrawlyProjectCrawler/[\d.]+' + name: 'Crawly Project' + category: 'Crawler' + url: 'https://web.archive.org/web/20240326141952/https://crawlyproject.digitaldragon.dev/' + +- regex: 'BDFetch' + name: 'BDFetch' + category: 'Crawler' + url: 'https://web.archive.org/web/20130821043949/http://www.branddimensions.com/' + +- regex: 'PunkMap' + name: 'Punk Map' + category: 'Security Checker' + url: 'https://github.com/openeasm/punkmap' + +- regex: 'GenomeCrawlerd/[\d.]+' + name: 'Deepfield Genome' + category: 'Crawler' + url: 'https://www.nokia.com/networks/ip-networks/deepfield/genome/' + producer: + name: 'Nokia Corporation' + url: 'https://www.nokia.com/' + +- regex: 'Gaisbot/[\d.]+' + name: 'Gaisbot' + category: 'Crawler' + url: 'https://web.archive.org/web/20090604121511/https://gais.cs.ccu.edu.tw/robot.php' + +- regex: 'FAST-WebCrawler/[\d.]+' + name: 'AlltheWeb' + category: 'Crawler' + url: 'https://web.archive.org/web/20041020050801/http://www.alltheweb.com/help/webmaster/crawler' + +- regex: 'ducks\.party' + name: 'ducks.party' + category: 'Security Checker' + url: 'https://ducks.party/' + # Generic bots -- regex: 'nuhk|grub-client|Download Demon|SearchExpress|Microsoft URL Control|borg|altavista|dataminr\.com|teoma|oegp|http%20client|htdig|mogimogi|larbin|scrubby|searchsight|semanticdiscovery|snappy|vortex(?!(?: Build|Plus))|zeal(?!ot)|dataparksearch|findlinks|BrowserMob|URL2PNG|ZooShot|GomezA|Google SketchUp|Read%20Later|7Siters|centuryb\.o\.t9|InterNaetBoten|EasyBib AutoCite|Bidtellect|tomnomnom/meg|cortex|Re-re Studio|adreview|AHC/|NameOfAgent|Request-Promise|ALittle Client|Hello,? world|wp_is_mobile|0xAbyssalDoesntExist|Anarchy99|^revolt|nvd0rz|xfa1|Hakai|gbrmss|fuck-your-hp|IDBTE4M CODE87|Antoine|Insomania|Hells-Net|b3astmode|Linux Gnu \(cow\)|Test Certificate Info|iplabel|Magellan|TheSafex?Internetx?Search|Searcherweb|kirkland-signature|LinkChain|survey-security-dot-txt|^xenu|^ZmEu|^(?:chrome|firefox|Zeus)$' +- regex: 'nuhk|grub-client|Download Demon|SearchExpress|Microsoft URL Control|borg|altavista|dataminr\.com|teoma|oegp|http%20client|htdig|mogimogi|larbin|scrubby|searchsight|semanticdiscovery|snappy|vortex(?!(?: Build|Plus| CM62| HD65))|zeal(?!ot)|dataparksearch|findlinks|BrowserMob|URL2PNG|ZooShot|GomezA|Google SketchUp|Read%20Later|7Siters|centuryb\.o\.t9|InterNaetBoten|EasyBib AutoCite|Bidtellect|tomnomnom/meg|cortex|Re-re Studio|adreview|AHC/|NameOfAgent|Request-Promise|ALittle Client|Hello,? world|wp_is_mobile|0xAbyssalDoesntExist|Anarchy99|^revolt|nvd0rz|xfa1|Hakai|gbrmss|fuck-your-hp|IDBTE4M CODE87|Antoine|Insomania|Hells-Net|b3astmode|Linux Gnu \(cow\)|Test Certificate Info|iplabel|Magellan|TheSafex?Internetx?Search|Searcherweb|kirkland-signature|LinkChain|survey-security-dot-txt|infrawatch|Time/|r00ts3c-owned-you|nvdorz|Root Slut|NiggaBalls|BotPoke|^xenu|^(?:chrome|firefox|Abcd|Dark|KvshClient|url|Zeus|ZmEu)$' name: 'Generic Bot' # Generic detections -- regex: '[a-z0-9_-]*(?:(?