UNPKG

ua-parser2

Version:
1,849 lines (1,696 loc) 237 kB
update_url: 'https://raw.github.com/commenthol/ua-parser2/master/regexes.yaml' # replacement pattern pattern: __VERSION__: '(\d{1,10})(?:\.(\d{1,10})|)(?:\.([a-z\d]{1,20})|)' __VERSION_2_DIGITS__: '(\d{1,10})\.(\d{1,10})(?:\.(\d{1,10})|)' __VERSION_3_DIGITS__: '(\d{1,10})\.(\d{1,10})\.(\d{1,10})' __VERSION_DIGITS__: '(\d{1,10})(?:\.(\d{1,10})|)(?:\.(\d{1,10})|)' __VERSION_DIGITS_UNDERSCORE__: '(\d{1,10})(?:[._](\d{1,10})|)(?:[._](\d{1,10})|)' __VERSION_MOZILLA__: '(\d{1,10})(?:\.(\d{1,10})|)(?:\.?([a-z\d]{1,111})|)' __VERSION_OS__: '(\d{1,10})(?:\.(\d{1,10})|)(?:\.(\d{1,10})|)(?:\.(\d{1,10})|)' __VERSION_OS_UNDERSCORE__: '(\d{1,10})(?:[._](\d{1,10})|)(?:[._](\d{1,10})|)' __BUILD__: '(?: Build|[;)])' __LOCALE__: '[A-Za-z]{2}[_\-][A-Za-z]{0,2}' #### Browser #### user_agent_parsers: ### iOS / OSX Applications - regex: '\b(CFNetwork|CaptiveNetworkSupport)' group: - regex: '^((?:(?! CFNetwork|/).){1,111})(?:/(\d{1,10})(?:\.([a-z\d]{1,111})|)(?:\.([a-z\d]{1,111})|)(?:.{1,300}|)|) CFNetwork/' type: 'app' - regex: '(CFNetwork)(?:/__VERSION__|.|$)' type: 'app' - regex: '(CaptiveNetworkSupport)-(\d{1,10})' type: 'app' #### Bots #### - regex: "(\ ^FDM|\ ^insomnia|\ ^integrity|\ @|\ Acoon|\ ai-agent|\ adbeat|\ AHC|\ aggregator|\ analyzer|\ anonymous|\ ApacheBench|\ Arachmo|\ archiver|\ aws-|\ [a-z]{3,30}\\.com|\ Azureus|\ BDFetch|\ BingWeb|\ BingPreview|\ blog|\ BlogBridge|\ \\bNG\\b|\ bot|\ boost|\ catalog|\ insomnia|\ Cerberian Drtrs|\ charlotte|\ check|\ checker|\ Clarsentia|\ cloud|\ crawl|\ Datanyze|\ diagnostic|\ \\bdig\\b|\ discovery|\ Download Demon|\ Evidon|\ ExaleadCloudview|\ explorer|\ extract|\ facebookexternalhit|\ faviconGenieo|\ FavOrg|\ GigablastOpenSource|\ gomezagent|\ google|\ GTmetrix|\ HatenaScreenshot|\ health|\ history|\ http[^:]{0,2}?://|\ httpunit|\ indexer|\ inspect|\ InternetSeer\\.com|\ intraVnews|\ ips-agent|\ JetBrains|\ JetS3t|\ Jigsaw|\ JNLP|\ KHTE|\ KTXN|\ larbin|\ link|\ LinkAlarm|\ lycos|\ Mail\\.Ru|\ marketing|\ MetaURI API|\ Microsoft URL Control|\ monitor|\ Moozilla|\ MovableType|\ netcraft|\ Neustar WPM|\ NING|\ \\boBot|\ PAN GlobalProtect|\ PayPal|\ Photon|\ Pingdom|\ Pinterest|\ pompos|\ Powermarks|\ probe|\ proxy|\ PRTG|\ PTST|\ QQDownload|\ Reaper|\ NewRelicPinger|\ Retreiver|\ Rival IQ|\ Robozilla|\ s3fs|\ scan|\ Scooter|\ scope|\ scrap|\ screenshot|\ search|\ seek|\ Shelob|\ site|\ sitecon|\ slurp|\ snap|\ Snoopy|\ SpaceBison|\ spider|\ Squrl Java|\ StackRambler|\ StatusCake|\ StumbleUpon|\ survey|\ synthetic|\ Tableau|\ teoma|\ TLSProber|\ Tumblr|\ validator|\ vortex|\ voyager|\ web-capture.net|\ WebMon|\ Webster Pro|\ WhatsApp/|\ WhatWeb|\ WinHTTP|\ WordPress|\ www[.-]|\ Xenu|\ zyborg\ )" regex_flag: 'i' group: # Pingdom - regex: '(Pingdom\.com_bot_version_)(\d{1,10})\.(\d{1,10})' family: 'PingdomBot' type: 'bot' # Google Plus - regex: 'Google.{0,300}/\+/web/snippet' family: 'GooglePlusBot' type: 'bot' # Pinterestbot - regex: '(Pinterest(?:bot|))\/(\d{1,10})(?:\.(\d{1,10})|[^\.]).{0,300}https?:\/\/' type: 'bot' # Add loadbalancer, monitoring, health-checks - regex: '(ELB-HealthChecker|SiteScope)(?:[/ ]__VERSION__|.|$)' regex_flag: 'i' type: 'bot::healthcheck' - regex: "(\ PRTG Network Monitor|\ PAN GlobalProtect|\ PingdomTMS\ )(?:[/ ]__VERSION__|.|$)" regex_flag: 'i' type: 'bot::monitor' # AWS S3 Clients - regex: '\b(Boto3?|JetS3t|aws-(?:cli|sdk-(?:cpp|go|java|nodejs|ruby2?|dotnet-(?:\d{1,2}|core)))|s3fs)/(?:__VERSION__|)' type: 'bot' - regex: '(PTST)[/ ]__VERSION__' family: 'SpeedCurve WebPage Test' type: 'bot' - regex: '(NAVER)\(inapp; search(?:; \d{1,10}|)(?:; __VERSION_DIGITS__|)[;)]' type: 'app' - regex: '^(PHP) ' type: 'bot' - regex: 'aggregator:(\\w{1,111})' type: 'bot' - regex: '/(Nutch)-__VERSION_2_DIGITS__' type: 'bot' # sort by length # BAD REGEX - regex: "(\ Ask ?Jeeves/Teoma|\ ^teoma|\ (?:[a-z]{1,20}-|)Googlebot(?:-[a-z]{1,20}|)|\ Microsoft Windows Network Diagnostics|\ Microsoft [A-Za-z ]{6,50} Discovery|\ BoardReader Favicon Fetcher\\s{0,5}|\ BoardReader Blog Indexer|\ baidu[a-z]{0,20}(?:spider|Mobaider)|\ Netcraft (?:Web|SSL) Server Survey|\ Sogou \\w{1,20} (?:Robot|Spider)|\ AdsBot-Google(?:-[a-z]{1,20}|)|\ Automattic Analytics Crawler|\ Google Page Speed Insights|\ SynapticSearch/AI Crawler|\ msnbot(?:-media\\s{0,5}|)|\ IlTrovatore(?:-Setaccio|)|\ XaxisSemanticsClassifier|\ www\\.WebSearch.com\\.au|\ HubSpot Marketing Grader|\ Google-Site-Verification|\ \\bYeti(?:-[a-z]{0,20}|)|\ Advanced Email Extractor|\ Xenu(?:.s|) Link Sleuth|\ Google-HTTP-Java-Client|\ Daumoa(?:-feedfetcher|)|\ collection@infegy\\.com|\ Yahoo[a-z]{0,20}Seeker|\ Slackbot-LinkExpanding|\ NetShelter ContentScan|\ Free ScreenShotService|\ SEARCHALOT(?:\\.COM|)|\ SafariBookmarkChecker|\ Peeplo Screenshot Bot|\ Microsoft URL Control|\ Google Search Console|\ FlipboardBrowserProxy|\ Flamingo_SearchEngine|\ \\b\\w{0,33}favicon\\w{0,33}\\b|\ BrokenLinkCheck\\.com|\ Y!J(?:-[A-Z]{1,30}|)|\ Windows Phone Search|\ websitepulse checker|\ TrialPay URL checker|\ Rackspace Monitoring|\ Mediapartners-Google|\ Google-SearchByImage|\ archive.{0,30}\\.org_bot|\ ZeBot_www\\.ze\\.bz|\ Yahoo! SearchMonkey|\ www\\.alertra\\.com|\ RetrevoPageAnalyzer|\ NetcraftSurveyAgent|\ GigablastOpenSource|\ facebookexternalhit|\ Catchpoint(?: bot|)|\ CloudEndure Scanner|\ shrinktheweb\\.com|\ Shoppimon Analyzer|\ PlantyNet_WebRobot|\ NetLyzer FastProbe|\ mixed-content-scan|\ Mail\\.RU(?:_Bot|)|\ Innovazion Crawler|\ ichiro(?:/mobile|)|\ Google Web Preview|\ Comodo SSL Checker|\ 1470\\.net crawler|\ WEB\\.DE MailCheck|\ Siteimprove\\.com|\ seoscanners\\.net|\ semanticdiscovery|\ notifyninja\\.com|\ Microsoft .{0,30} Bot|\ IP2[a-z]{1,20}Bot|\ CostaCider Search|\ SeznamEmailProxy|\ sureseeker\\.com|\ Offline Explorer|\ ^Nutch[^/]{0,30}|\ Newneon BlogBorg|\ InternetSeer.com|\ HatenaScreenshot|\ GoogleImageProxy|\ ExaleadCloudview|\ AppEngine-Google|\ web-capture.net|\ Thumbshots\\.ru|\ SiteTruth\\.com|\ searchuk.comBot|\ panscient\\.com|\ Minstrel-Browse|\ JemmaTheTourist|\ InternetArchive|\ Google SketchUp|\ Ghost Inspector|\ Feed Seeker Bot|\ fast-webcrawler|\ Cerberian Drtrs|\ agentslug\\.com|\ Adsense-Snapshot-Google|\ Accoona-AI-Agent|\ Amazon CloudFront|\ 8bo Crawler Bot|\ WorldWideWeb-X|\ trendictionbot|\ Slack-ImgProxy|\ SearchIt\\.Bot|\ RuxitSynthetic|\ PaxleFramework|\ PagesInventory|\ NewsGator[^/]{0,33}|\ FollowSite Bot|\ FlipboardProxy|\ Download Demon|\ dataparksearch|\ ConveraCrawler|\ Buscaplus Robi|\ NewRelicPinger|\ WWW-Mechanize|\ YottaaMonitor|\ WDG_Validator|\ voila(?:bot|)|\ ThumbShotsBot|\ socbot search|\ ObjectsSearch|\ http%20client|\ GoogleToolbar|\ Bot-TailTrend|\ boitho.com-dc|\ BlogPulseLive|\ YFSJ crawler|\ Yahoo! Slurp|\ WeSEE:Search|\ WASALive.Bot|\ TheUsefulbot|\ StackRambler|\ search:robot|\ Read%20Later|\ masidani_bot|\ Isara-Search|\ HistoryHound|\ BilgiBetaBot|\ adbeat\\.com|\ Webster Pro|\ StumbleUpon|\ Websearch4u|\ Taringa UGC|\ searchsight|\ SearchByUsa|\ robotgenius|\ Neustar WPM|\ netresearch|\ MSIECrawler|\ MovableType|\ MnoGoSearch|\ MetaURI API|\ LinkedInBot|\ Linkchecker|\ Linguee Bot|\ HttpMonitor|\ BoardReader|\ BingPreview|\ ApacheBench|\ Add Catalog|\ LinkWalker|\ Powermarks|\ Yandex\\w{1,111}|\ YahooYSMcm|\ TwitterBot|\ StatusCake|\ Squrl Java|\ SpaceBison|\ QQDownload|\ PayPal IPN|\ PagePeeker|\ KiwiStatus|\ ^integrity|\ intraVnews|\ GuzzleHttp|\ GomezAgent|\ Discordbot|\ Clarsentia|\ Checklinks|\ BlogBridge|\ \\bKTXN\\b|\ \\bKHTE\\b|\ ^anonymous|\ A6-Indexer|\ WordPress|\ Votay bot|\ TLSProber|\ Site-Shot|\ Robozilla|\ RMSnapKit|\ Retreiver|\ RedCarpet|\ Popdexter|\ NG-Search|\ LinkAlarm|\ LesnikBot|\ JetBrains|\ ^insomnia|\ i?seekbot|\ ips-agent|\ findlinks|\ DareBoost|\ charlotte|\ Butterfly|\ BuiltWith|\ Altresium|\ altavista|\ Datanyze|\ WebThumb|\ ^voyager|\ ShopWiki|\ ScoutJet|\ Rival IQ|\ Qwantify|\ OSSProxy|\ Netvibes|\ NerdyBot|\ MuckRack|\ Moozilla|\ mogimogi|\ Lite Bot|\ IQSearch|\ InfuzApp|\ IconSurf|\ Icarus6j|\ httpunit|\ HooWWWer|\ heritrix|\ GTmetrix|\ clumboot|\ \\bNG\\b|\ blitzbot|\ archiver|\ adidxbot|\ AcoonBot|\ Tableau|\ ZooShot|\ WinHTTP|\ WhatWeb|\ ^vortex|\ URL2PNG|\ Spinn3r|\ SiteCon|\ Semager|\ scrubby|\ scooter|\ Riddler|\ polybot|\ Plukkie|\ ^Photon|\ Orbiter|\ openbot|\ NetSurf|\ masscan|\ Lsearch|\ jbot\\b|\ ^INGRID|\ gigabot|\ furlbot|\ Filangy|\ BotSeer|\ \\boBot|\ BingWeb|\ bingbot|\ BDFetch|\ Azureus|\ Arachmo|\ 50\\.nu|\ ZyBorg|\ zimeno|\ Wotbox|\ WebMon|\ ^Tumblr|\ speedy|\ Snoopy|\ snappy|\ Shelob|\ Scrapy|\ Reaper|\ pompos|\ ^Oblio|\ msrbot|\ mozDex|\ m65bot|\ larbin|\ Kurzor|\ Kraken|\ Jigsaw|\ holmes|\ GomezA|\ Genieo|\ FavOrg|\ Evidon|\ EasyDL|\ \\b008|\ Slurp|\ Nutch|\ ^NING|\ lycos|\ Llaut|\ htdig|\ Giant|\ Evaal|\ ^ECCP|\ DeuSu|\ Argus|\ Acoon|\ ^zao|\ Yepi|\ WIRE|\ JNLP|\ ^FDM|\ ^AHC\ )(?:[ /-]__VERSION__|)" regex_flag: 'i' type: 'bot' - regex: '^(bot)[^a-z](?:__VERSION__|)' regex_flag: 'i' type: 'bot' - regex: "^.{0,200}?(\ (?:[a-z][a-z. _-]{0,50}|)\ (?:\ crawler|crawl|scraper|spider|indexer|webbot|analyzer|whatsapp|robot\\b|\ (?:(?!cubot)[\\w-]{2})bot\\b|\ [\\w.]{1,10} bot\\b| bot(?=@)\\b\ )\ )(?:[ /-]__VERSION__|)" regex_flag: 'i' type: 'bot' - regex: "; (Daum)/__VERSION__" type: 'bot' - regex: 'MSIE \d{1,10}\..{0,100}?https?://((?:[\w\d-]{1,111}\.|)[\w\d-]{1,111}\.\w{1,111})' type: 'bot' ### iOS / OSX Applications - regex: '\b(iPhone|iPad|iPod)' group: - regex: '^([^/]{1,111})/__VERSION__ \((?:iPhone|iPad|iPod); iOS [0-9\.]{1,111}; Scale/[0-9\.]{1,111}\)' type: 'app' - regex: '^([^/]{1,111})/__VERSION__ iOS/[0-9\.]{1,111} model/(?:iPhone|iPad|iPod)' type: 'app' ### Mail - regex: "(\ [Mm]ail|\ Barca|\ \\bBat|\ DAV|\ ownCloud|\ Nextcloud|\ Exchange|\ Eudora|\ Evolution|\ Framabird|\ Icedove|\ Lightning|\ Lotus-Notes|\ MSOffice|\ Microsoft Office|\ Outlook|\ Shredder|\ Sparrow|\ Spicebird|\ Superhuman|\ Thunderbird|\ YahooMailProxy|\ YahooMobileMail|\ (?:Macintosh.{0,300} AppleWebKit|MailBar|Postbox|HipChat)\ )" group: # Outlook 2007 - regex: 'Microsoft Office Outlook 12\.\d{1,10}\.\d{1,10}|MSOffice 12' family: 'Outlook' v1: '2007' type: 'mail' # Outlook 2010 - regex: 'Microsoft Outlook 14\.\d{1,10}\.\d{1,10}|MSOffice 14' family: 'Outlook' v1: '2010' type: 'mail' # Outlook 2013 - regex: 'Microsoft Outlook 15\.\d{1,10}\.\d{1,10}' family: 'Outlook' v1: '2013' type: 'mail' # Outlook 2016 - regex: 'Microsoft Outlook (?:Mail |)16\.\d{1,10}\.\d{1,10}|MSOffice 16' family: 'Outlook' v1: '2016' type: 'mail' # Windows Live Mail - regex: 'Outlook-Express\/7\.0.{0,300}' family: 'Windows Live Mail' type: 'mail' # Mail Agents with version - regex: "(\ Evolution\ )/__VERSION__" type: 'mail' # Other Mail Agents - regex: "(\ Barca(?:Pro|)|\ Eudora|\ ExchangeServicesClient|\ ExchangeWebServices|\ Framabird|\ FossaMail|\ HipChat|\ kmail2|\ Lotus-Notes|\ MacOutlook|\ MailBar|\ Mail Free|\ Microsoft Outlook|\ Outlook-Express|\ Outlook-iOS-Android|\ Pocomail|\ Postbox|\ Slack_SSB|\ Sparrow|\ Superhuman|\ The Bat!(?: Voyager|)|\ YahooMailProxy|\ YahooMobileMail\ )(?:[/ ]__VERSION__|)" type: 'mail' # Apple Air Mail - regex: '(Airmail) __VERSION__' type: 'mail' - regex: '(Shredder|Spicebird)/__VERSION__' type: 'mail' # Apple Mail - regex: '^Mozilla\/5\.0 \(.{0,300} Mac OS X.{0,300}\(KHTML, like Gecko\)(?: Mobile\/[\S]{0,33}|)$' family: 'Apple Mail' type: 'mail' # Lightning (for Thunderbird) http://www.mozilla.org/projects/calendar/lightning/ - regex: 'Gecko/\d{1,10} (Lightning)/__VERSION_MOZILLA__' type: 'mail' # Thunderbird - regex: '(Thunderbird|Icedove)/__VERSION_MOZILLA__' family: 'Thunderbird' type: 'mail' - regex: '(mobmail) android __VERSION__' type: 'mail' # DAV - regex: '(mirall)/__VERSION__.{0,300}Nextcloud' family: 'Nextcloud' type: 'app::webdav' - regex: '(WEBDAV Client)' type: 'app::webdav' - regex: "\\b(\ RCM CardDAV plugin|\ DAVdroid|\ ownCloud-android|\ Microsoft-WebDAV-MiniRedir\ )/__VERSION__" type: 'app::webdav' - regex: '(Microsoft Office) \(Word\) (2014)' family: 'Microsoft Office Word' type: 'app' # Feedreader - regex: "\\b(\ AideRSS|\ Akregator|\ Apple-PubSub|\ Bloglovin|\ CITA RSS Aggregator|\ Custom-Feed Reader|\ Digg Feed Fetcher|\ Feedbin |\ FeedBlitz|\ FeedDa?emon|\ Feeddler|\ FeedForAll|\ Feedreader|\ JetBrains Omea Reader|\ Liferea|\ NetNewsWire|\ Mtps Feed Aggregation System|\ newsbeuter|\ newspaper|\ NewsBlur|\ Pulp|\ ReadKit|\ ReederForMac|\ RssBar|\ RSS Junkie|\ RSS Menu|\ RSSOwl|\ (?:RSS|Rss)Bandit|\ SimplePie|\ SimpleRSS|\ Stringer|\ Tiny Tiny RSS|\ UniversalFeedParser|\ Windows-RSS-Platform|\ Wizz RSS News Reader\ )(?:[ /]__VERSION__|)" type: 'feedreader' # podcast - regex: "(AppleCoreMedia)/__VERSION__" type: 'app' - regex: "\\b(\ AntennaPod|\ BashPodder|\ BeyondPod|\ bPod|\ DoggCatcher|\ Doppler|\ Downcast|\ ESPN Radio|\ Fancy Cloud Music|\ FancyMusic|\ gPodder|\ GoldenPod|\ iPodder|\ jPodder|\ Juice|\ MediaGo|\ Overcast|\ Peapod|\ philpodder|\ Player FM|\ PodCruncher|\ PocketTunes|\ Podcasts|\ Podkicker(?: Classic| Pro|)|\ podracer|\ RSS_?Radio\ )\\b(?:(?: v ?|[ /])__VERSION__|)" type: 'podcast' # mediaplayers - regex: "\\b( AlexaMediaPlayer|\ Banshee|\ Clementine|\ ExoPlayerLib|\ FlyCast|\ foobar2000|\ HTC Streaming Player|\ Instacast|\ iTunes(?:-iP\\w{1,111}(?:-\\w{1,111}|)|)|\ Kodi|\ LG Player|\ MediaMonkey|\ Nightingale|\ NSPlayer|\ RebelMouse|\ Songbird|\ spmc|\ Spotify|\ SubStream|\ vlc|\ VLC|\ amarok|\ VOX Music Player|\ Windows-Media-Player(?:-\\w{1,111}|)|\ WMPlayer|\ XBMC|\ Zune\ )\\b(?:[ /](\\d{1,10})(?:\\.(\\d{1,10})(?:\\.(\\d{1,10})|)(-[A-Z\\d]{1,111}|)|)|)" v3: '$4$5' type: 'mediaplayer' - regex: '(Lavf|Miro)/?__VERSION__' type: 'mediaplayer' - regex: '(QuickTime)(?:(?:(?:.{1,300}qtver=)|(?:(?: E-|)[\./]))__VERSION__|)' type: 'mediaplayer' # social networks - regex: 'Pinterest|\[FB' group: # Facebook - regex: '\[FB[^/]{1,5}?/(Groups|Messenger|FBPageAdmin)[^;]{0,10}?;FBAV/__VERSION__' regex_flag: 'i' family: 'Facebook $1' type: 'app' - regex: '\[FB.{0,300};(FB(?:AV|Version))/__VERSION__' family: 'Facebook' type: 'app' - regex: '\[FB.{0,300}/FB' family: 'Facebook' type: 'app' # Pinterest - regex: '\[(Pinterest)/[^\]]{1,10}\]' type: 'app' - regex: '(Pinterest)(?: for Android(?: Tablet|)|)/__VERSION__' type: 'app' # Apps - regex: '\b(MicroMessenger)/__VERSION__' family: 'WeChat' type: 'app' - regex: "\\b(\ ^Dalvik|\ 1Password|\ AdobeAIR|\ Alltop|\ baiduboxapp|\ BacaBerita App|\ Box|\ BoxNotes|\ Box Sync|\ Coursera-Mobile|\ CreativeCloud|\ Crowsnest|\ Cyberdog|\ Cyberduck|\ DDG-Android|\ Deezer|\ Dreamweaver|\ DuckDuckGo|\ Instagram|\ iWeb|\ kioclient|\ Kurio|\ Line|\ Microsoft Office|\ Microsoft Office Excel|\ Microsoft Office Mobile|\ Microsoft Office OneNote|\ Microsoft Office PowerPoint|\ Microsoft Office SyncProc|\ Microsoft Office Upload Center|\ Microsoft Office Visio|\ Microsoft Office Word|\ Microsoft Office Word|\ Mobicip|\ MS ?FrontPage|\ NewsArticle|\ NewsFire|\ OpenOffice|\ PowerPoint|\ Prince|\ RedFlagDealsApp|\ RobloxStudio|\ Sandvox|\ Snapchat|\ SohuNews|\ SoundCloud-Android|\ WebClip|\ Windows-Update-Agent|\ WindowsPowerShell\ )[ /-]__VERSION__" type: 'app' # Apps wo Version - regex: "\\b(\ AndroidDownloadManager|\ bingipadclient|\ Coda|\ David Client|\ Evernote|\ iBooks|\ LibreOffice|\ NewsFire|\ Raptr|\ Reddit|\ Sandvox|\ TubeTV|\ wkhtmltoimage|\ YJApp-ANDROID|\ wkhtmltopdf\ )\\b" type: 'app' # Weibo - regex: '_(weibo)_{1,2}__VERSION__' family: 'Weibo' type: 'app' #### SPECIAL CASES TOP #### # Gecko group - regex: 'Gecko|Treco|FxiOS|Cheshire' group: # Old Opera hides as Firefox - regex: '(Opera) __VERSION__' # Browsers using Gecko; must go before Firefox - regex: "Mozilla.{0,300}\\b(\ Beonex|\ Camino|\ Cheshire|\ Chimera|\ CometBird|\ Firebird(?: Browser|)|\ Fireweb Navigator|\ Flock|\ IceDragon|\ K-Ninja|\ KMLite|\ Light|\ lolifox|\ MultiZilla|\ Navigator|\ [Pp]rism|\ SailfishBrowser|\ SeaMonkey|\ Vonkeror\ )/__VERSION_MOZILLA__" - regex: '(MultiZilla) v__VERSION_MOZILLA__' # Firefox - regex: '(Fennec)/__VERSION_MOZILLA__' family: 'Firefox Mobile' - regex: '(?:Mobile[:;]|Tablet;).{0,300}(Firefox)/__VERSION_MOZILLA__' family: 'Firefox Mobile' - regex: '\b(BonEcho|GranParadiso|Lorentz|Minefield|Namoroka|Pale[Mm]oon|Shiretoko)/__VERSION_MOZILLA__' - regex: '(Firefox).{0,300}Tablet browser __VERSION_MOZILLA__' family: 'MicroB' - regex: '(MozillaDeveloperPreview)/__VERSION_MOZILLA__' - regex: '(FxiOS)/__VERSION_MOZILLA__' family: 'Firefox iOS' # Swiftfox - regex: '(Firefox)/__VERSION__ \(Swiftfox\)' family: 'Swiftfox' # Waterfox - regex: '(Waterfox)/__VERSION__' - regex: '(Firefox)/__VERSION_MOZILLA__ (Classilla)' family: '$5' - regex: '(Firefox)/__VERSION_MOZILLA__' - regex: '(MyIBrow)/__VERSION__' family: 'My Internet Browser' # UC Browser (needs to be checked before Opera Mini) - regex: '(UC? ?Browser|UCWEB|\bU3)[ /]?(\d{1,10})\.(\d{1,10})\.(\d{1,10})' family: 'UC Browser' # Opera group - regex: 'Opera|OPR|OPiOS|Coast| MMS/' group: # Opera will stop at 9.80 and hide the real version in the Version string. # see: http://dev.opera.com/articles/view/opera-ua-string-changes/ - regex: '(Opera Tablet).{0,300}Version/__VERSION_DIGITS__' - regex: '(Opera Mini)(?:/att|)/__VERSION_DIGITS__' - regex: '(Opera Mini)' - regex: '(Opera)/.{1,100}Opera Mobi.{1,100}Version/__VERSION_DIGITS__' family: 'Opera Mobile' - regex: '(Opera)/__VERSION__.{1,100}Opera Mobi' family: 'Opera Mobile' - regex: 'Opera Mobi.{1,100}(Opera)(?:\/|\s{1,2})__VERSION_DIGITS__' family: 'Opera Mobile' - regex: 'Opera Mobi' family: 'Opera Mobile' - regex: '(Opera)/9\.80.{0,300}Version/__VERSION_DIGITS__' # Opera 14 for Android uses a WebKit render engine. - regex: '(?:Mobile Safari).{1,300}( OPR)/__VERSION__' family: 'Opera Mobile' - regex: '(?:Android).{1,300}( OPR)/__VERSION__' family: 'Opera Mobile' # Opera 15 for Desktop is similar to Chrome but includes an "OPR" Version string. - regex: '(?:Safari|Chrome).{1,300}( OPR)/__VERSION__' family: 'Opera' # Opera Neon - regex: 'Chrome/.{1,300}( MMS)/__VERSION__' family: 'Opera Neon' # Opera Coast - regex: '(Coast)/__VERSION__' family: 'Opera Coast' # Opera Mini for iOS (from version 8.0.0) - regex: '(OPiOS)/__VERSION__' family: 'Opera Mini' # Palm WebOS looks a lot like Safari. - regex: '(hpw|web)OS/__VERSION__' family: 'webOS Browser' # LuaKit has no version info. # ref: http://luakit.org/projects/luakit/ - regex: '(luakit)' family: 'LuaKit' # Rekonq - regex: '(rekonq)(?:/__VERSION__ Safari|)' family: 'Rekonq' # Conkeror lowercase/uppercase # ref: http://conkeror.org/ - regex: '([Cc]onkeror)/__VERSION__' family: 'Conkeror' # catches lower case konqueror - regex: '([Kk]onqueror)/__VERSION__' family: 'Konqueror' - regex: '(WeTab)-Browser' - regex: '(Comodo[ _]Dragon)/__VERSION__' family: 'Comodo Dragon' - regex: '(Symphony) (\d{1,10})\.(\d{1,10})' # Yandex Browser - regex: '(YaBrowser)/__VERSION__' family: 'Yandex Browser' - regex: '(2345Explorer|2345chrome)(?:[ /]| v)__VERSION__' family: 2345Explorer - regex: '(NetFront NX) __VERSION__' family: 'NetFront NX' - regex: '(Nintendo Switch.{1,300}? NF)(?:/__VERSION__|)' family: 'NetFront NF' # PlayStation Vita should go before Amazon Silk - regex: '(PLAYSTATION 3.{1,300}WebKit|Nintendo 3DS|PlayStation Vita|AppleWebKit.{1,300} NX)(?:/__VERSION__|)' family: 'NetFront NX' - regex: '(PlayStation 4) __VERSION__' family: 'PlayStation Browser' # Amazon Silk, should go before Chrome Mobile and Safari - regex: '(Silk)/(\d{1,10})\.(\d{1,10})(?:\.([0-9\-]{1,111})|)' family: 'Amazon Silk' # Coc Coc browser, based on Chrome (used in Vietnam) - regex: '(coc_coc_browser|CoRom)/(\d{1,10})\.(\d{1,10})(?:\.(\d{1,10})|)' family: 'Coc Coc' # Edge Mobile - regex: 'Windows Phone .{0,200}(Edge)/(\d{1,10})\.(\d{1,10})' family: 'Edge Mobile' - regex: '\b(GSA|Listia|Flipboard)/__VERSION__' type: 'app' # HbbTV Group - regex: 'HbbTV' group: - regex: '(Web0S); Linux/SmartTV' family: 'LG Browser' - regex: '(Samsung;SmartTV)__VERSION__' family: 'Samsung SmartTV' - regex: '(Panasonic;VIERA )__VERSION__' family: 'SmartViera' - regex: 'Panasonic;(DIGA WebKit) M__VERSION__' - regex: '(Skykid)/__VERSION__' # QQ Browsers - regex: 'QQBrowser' group: - regex: '(MQQBrowser/Mini)(?:__VERSION__|)' family: 'QQ Browser Mini' - regex: '(MQQBrowser)(?:/__VERSION__|)' family: 'QQ Browser Mobile' - regex: '(QQBrowser)(?:/__VERSION__|)' family: 'QQ Browser' # Edge - regex: '\b(EdgA|EdgiOS)/__VERSION__' family: 'Edge' # Partly Chrome Based Browsers - regex: '\b(baidubrowser|BaiduHD|Focus|OculusBrowser|SamsungBrowser)/__VERSION__' - regex: '\bbd(browser_i18n|browserhd_i18n|browser_mini)/__VERSION__' family: 'baidu$1' - regex: '(MAXTHON|Maxthon|MxBrowser)[ /]__VERSION__' family: 'Maxthon' - regex: '(ACHEETAHI)[ /]__VERSION__' family: 'CM Browser' # Seznam.cz browser (based on WebKit) - regex: '(SznProhlizec)/__VERSION__' family: 'Seznam.cz' # Chrome Mobile - Chrome based - regex: 'CrMo|CriOS|Chrom|chromeframe' group: - regex: '\b(MiuiBrowser|Mint Browser)/__VERSION__' # Headless Chrome # https://chromium.googlesource.com/chromium/src/{1,111}/lkgr/headless/README.md - regex: '(HeadlessChrome)(?:/(\d{1,10})\.(\d{1,10})\.?(\d{1,10}|)|)' type: 'headless' - regex: ' (Nichrome)/self/(\d{1,10})' # Chrome Based Browsers - regex: "\\b(\ AlohaBrowser|\ Beamrise|\ BlueBrowser|\ Chedot|\ Chromium|\ Crosswalk|\ Diglo|\ Maxthon|\ Mb2345Browser|\ MobileIron|\ MxNitro|\ OverwolfClient|\ Polarity|\ Puffin|\ Qiyu|\ SamsungBrowser/CrossApp|\ SogouMobileBrowser|\ Superbird|\ SurfBrowser|\ Tenta|\ Whale|\ WhiteHat Aviator\ )/__VERSION__" # IE Mobile - strange MS ua contains Chrome - regex: '(IEMobile)/__VERSION__' family: 'IE Mobile' - regex: '(CrMo)/__VERSION__' family: 'Chrome Mobile' - regex: '(CriOS)/__VERSION__' family: 'Chrome Mobile iOS' - regex: '; wv\).{1,300}(Chrome)/__VERSION__.{1,300}\bMobile\b' family: 'Chrome Mobile Webview' - regex: '\b(Chrome)/__VERSION__.{1,300}\bMobile\b' family: 'Chrome Mobile' - regex: '\bMobile\b.{1,300}(Chrome)/__VERSION__' family: 'Chrome Mobile' # Chrome Frame must come before MSIE. - regex: '(chromeframe)/__VERSION__' family: 'Chrome Frame' # Mail.ru Amigo/Internet Browser (Chromium-based) - regex: '(Chrome)/__VERSION__.{0,100} MRCHROME' family: 'Mail.ru Chromium Browser' # Iron Browser ~since version 50 - regex: '(Chrome)/__VERSION__[\d.]{0,100} Iron[^/]' family: 'Iron' # Chrome based - regex: '\b(Chrome)\/__VERSION__.{0,100}\b(JuziBrowser|Salam Browser)\b' family: '$5' - regex: '\b(Chedot)\b.{0,100}\bChrome\/__VERSION__' family: '$1' # Tizen Browser (second case included in browser/major.minor regex) - regex: '(Tizen|SLP) Browser/__VERSION__' family: 'Tizen Browser' # Sogou Explorer 2.X - regex: '(SE 2\.X) MetaSr __VERSION__' family: 'Sogou Explorer' # Baidu Browsers (desktop spoofs chrome & IE, explorer is mobile) - regex: '(FlyFlow)/__VERSION__' family: 'Baidu Explorer' # Baidu Spark - regex: '((?:BD|)Spark|BIDUBrowser)[ /]__VERSION__' family: 'Baidu Spark' # AOL Browser - regex: '(AOL)[/ ](\d{1,10})\.(\d{1,10});? AOL(?:Build|BUILD)[ /]\d{1,10}' - regex: '(ADM)/' family: 'AOL' # OmniWeb - regex: '(OmniWeb)/v?__VERSION__' # Netscape - regex: '\b(Navigator|Netscape6)/(\d{1,10})(?:\.(\d{1,10})(?:\.?([ab]?\d{1,10}[a-z]{0,33})|)|)' family: 'Netscape' # Windows 10 IE version uses "Edge" and "Chrome" - regex: '\b(Edge)/(\d{1,10})(?:\.(\d{1,10})|)' family: 'Edge' # iOS Versions of Browsers - regex: '(Mercury|Puffin)/(\d{3,5})' # no version - regex: '\b(JuziBrowser)\b' # Browser/major_version.minor_version(.beta_version) # @note: Phoenix needs separate regex as conflicts with device "Fly Phoenix 2" - regex: '(Phoenix)/__VERSION__' # @note ArcGis - regex: 'ArcGIS|QGIS|JOSM|GeoEvent Server|FME' group: # ESRI Server products - regex: '(GeoEvent Server) (\d{1,111})(?:\.(\d{1,111})(?:\.(\d{1,111})|)|)' # ESRI ArcGIS Desktop Products - regex: '(ArcGIS Pro)(?: (\d{1,111})\.(\d{1,111})\.([^ ]{1,111})|)' - regex: 'ArcGIS Client Using WinInet' family: 'ArcMap' - regex: '(OperationsDashboard)-(?:Windows)-__VERSION_3_DIGITS__' family: 'Operations Dashboard for ArcGIS' - regex: '(arcgisearth)/__VERSION_2_DIGITS__' family: 'ArcGIS Earth' - regex: 'com.esri.(earth).phone/__VERSION_2_DIGITS__' family: 'ArcGIS Earth' # ESRI ArcGIS Mobile Products - regex: '(arcgis-explorer)/__VERSION_3_DIGITS__' family: 'Explorer for ArcGIS' - regex: 'arcgis-(collector|aurora)/__VERSION_3_DIGITS__' family: 'Collector for ArcGIS' - regex: '(arcgis-workforce)/__VERSION_3_DIGITS__' family: 'Workforce for ArcGIS' - regex: '(Collector|Explorer|Workforce)-(?:Android|iOS)-__VERSION_2_DIGITS__' family: '$1 for ArcGIS' # ESRI ArcGIS Runtimes - regex: 'ArcGISRuntime-(Android|iOS|NET|Qt)/__VERSION_2_DIGITS__' family: 'ArcGIS Runtime SDK for $1' - regex: 'ArcGIS\.?(iOS|Android|NET|Qt)(?:-|\.)__VERSION_2_DIGITS__' family: 'ArcGIS Runtime SDK for $1' - regex: 'ArcGIS\.Runtime\.(Qt)\.__VERSION_2_DIGITS__' family: 'ArcGIS Runtime SDK for $1' # SAFE FME - regex: '(FME)\/(\d{1,111}\.\d{1,111})\.(\d{1,111})\.(\d{1,111})' # QGIS - regex: '(QGIS)\/(\d)\.?0?(\d{1,2})\.?0?(\d{1,2})' # JOSM - regex: '(JOSM)/(\d{1,111})\.(\d{1,111})' # Other browsers - regex: "(\ 115Browser|\ 1stBrowser|\ 7Star|\ Abrowser|\ amaya|\ Amiga-AWeb|\ AmigaVoyager|\ ANTFresco|\ ANTGalio|\ Arora|\ AviraScout|\ BlackHawk|\ Bolt|\ BOLT|\ brave|\ Bunjalloo|\ Cent|\ Chedot|\ ChromePlus|\ Contiki|\ CoolNovo|\ Crazy Browser|\ Demeter|\ Dillo|\ Dolfin|\ Dolphin http client|\ Dorado WAP-Browser|\ Dragon|\ Electron|\ Epiphany|\ Espial|\ EspialTVBrowser|\ Fennec|\ FireWeb|\ Fluid|\ Fresco|\ Galeon|\ Google Earth(?: EC|)|\ hdplusinteraktiv|\ HotJava|\ IBrowse|\ iCab|\ Iceape|\ ICE Browser|\ IceCat|\ Ice[Ww]easel|\ iRider|\ Iris|\ Iron|\ Jasmine|\ Kapiko|\ Kazehakase|\ Kindle|\ Kinza|\ K-Meleon|\ Kuaiso|\ LG Browser|\ Lobo|\ Lunascape|\ Lynx|\ MacAppStore|\ Maemo Browser|\ mDolphin|\ Mercury|\ Midori|\ MiniBrowserMobile|\ Minimo|\ MiuiBrowser|\ MobileIron|\ mogimogi|\ Net[Ff]ront|\ NetFrontLifeBrowser|\ NetPositive|\ Netscape|\ NetSurf|\ NTENTBrowser|\ OmniWeb|\ OneBrowser|\ Opera|\ Opera Mini|\ Orca|\ Otter|\ PaleMoon|\ Planetweb|\ Polaris|\ Puffin|\ PyAMF|\ QtWebkit|\ Qt|\ QuickLook|\ QupZilla|\ qutebrowser|\ Raven for Mac|\ Roccat|\ RockMelt|\ SailfishBrowser|\ SalesforceMobileSDK|\ SeaMonkey|\ SecondLife|\ Seznam\\.cz|\ Shiira|\ Shrook|\ SkipStone|\ Skyfire|\ Sleipnir|\ Slimjet|\ Snowshoe|\ SogouMobileBrowser|\ Space Bison|\ SputnikBrowser|\ Stainless|\ Sunrise|\ SunriseBrowser|\ ThunderBrowse|\ TinyBrowser|\ TizenBrowser|\ ToshibaTP|\ TungstenBrowser|\ UP\\.Browser|\ Valve (?:Client|Steam \\w{1,111})|\ Vienna|\ Viera|\ Vivaldi|\ WebPilot|\ WebPirate|\ WebPositive|\ Whale|\ YoloBrowser|\ Xiino|\ zdesktop\ )[/ ]__VERSION_DIGITS__" # VmWare Airwatch - regex: '(AirWatch Browser) v__VERSION__' # Browser without version - regex: '(QIHU 360[SE]E|Sunrise|DiigoBrowser)' # Chrome needs to come after as it hides a lot of browsers from previous regex - regex: '(Chrome)[/ ]__VERSION__' - regex: '(Galeon|UP\.Browser)(?:[ /]__VERSION__|)' - regex: '(Openwave)(?:/__VERSION__|)' family: 'UP.Browser' # Dolphin Browser # @ref: http://www.dolphin.com - regex: '\b(Dolphin)(?: |/|HDCN/|/INT\-)__VERSION__' # @note: NexPlayer needs to come after "Dolfin" as part of Samsung Bada UAs - regex: '\b(stagefright)/__VERSION_DIGITS__' type: 'mediaplayer' - regex: '\b(NexPlayer)(?:[ /]?__VERSION__|)' type: 'mediaplayer' # IE Xbox # @ref: http://msdn.microsoft.com/en-us/library/ie/jj883727%28v=vs.85%29.aspx - regex: '(MSIE) __VERSION__.{0,100}Xbox[^\-]' family: 'IE Xbox' # IE Mobile - regex: '(IEMobile)[ /]__VERSION__' family: 'IE Mobile' # desktop mode # http://www.anandtech.com/show/3982/windows-phone-7-review - regex: '(MSIE) __VERSION__.{0,100}XBLWP7' family: 'IE Large Screen' #### END MAIN CASES #### #### SPECIAL CASES #### - regex: '(Obigo|OBIGO|Teleca)(?:InternetBrowser|\-?Browser|)(?:[^\d]{0,33}0{0,33}(\d{1,10})(?:.(\d{1,10})|)|)' family: 'Obigo' - regex: '(Maxthon|MyIE2|Uzbl|Shiira)' v1: '0' - regex: '(PLAYSTATION 3|PlayStation Portable)' family: 'NetFront' - regex: '(XBMC)/(\d{1,10})\.(\d{1,10})[-\w\s]{1,111}(r\d{1,10})' - regex: '(ABrowse) (\d{1,10})(?:\.(\d{1,10})|)' - regex: '(Acoo Browser)(?: __VERSION__|)' - regex: '(BrowseX) \(__VERSION__' - regex: '(NCSA[ _]Mosaic)(?:/(\d{1,10})[.-](\d{1,10})(?:[.-]?([a-z]?\d{1,10})|)|)' family: 'NCSA Mosaic' # Polaris/d.d is above - regex: '(POLARIS|Embider)/(\d{1,10})\.(\d{1,10})' family: 'Polaris' - regex: '(AvantGo) (\d{1,10})\.(\d{1,10})' - regex: '(Avant)' v1: '1' # This is the Tesla Model S (see similar entry in device parsers) - regex: '(QtCarBrowser)' v1: '1' - regex: 'ibrowse|iRAPP' regex_flag: 'i' group: - regex: '^(iBrowser/Mini)(\d{1,10})\.(\d{1,10})' family: 'iBrowser Mini' - regex: '^(iBrowser|iRAPP)/(\d{1,10})\.(\d{1,10})' - regex: '\b(IBrowse)(?:[ /](\d{1,10})\.(\d{1,10})|)' # nokia browsers # based on: http://www.developer.nokia.com/Community/Wiki/User-Agent_headers_for_Nokia_devices - regex: 'Series\d|Nokia|OviBrowser|BrowserNG' group: - regex: '(NokiaBrowser|BrowserNG)/(\d{1,10})\.__VERSION__' family: 'Nokia Browser' - regex: 'Symbian.{0,300}(Series60)/5\.0' family: 'Nokia Browser' v1: '7' v2: '0' - regex: '(S40OviBrowser)/__VERSION__(?:\.(\d{1,10})|)' family: 'Ovi Browser' - regex: '(Series60)/(\d{1,10})\.(\d{1,10}).{0,300}AppleWebKit' family: 'Nokia OSS Browser' - regex: '(Series60)/(\d{1,10})\.(\d{1,10})' family: 'Nokia Services (WAP) Browser' - regex: '^(Nokia)' family: 'Nokia Services (WAP) Browser' - regex: '(Series80|Series90)/(\d)\.(\d)' family: 'Nokia $1 Browser' # BlackBerry devices - regex: '(PlayBook).{1,300}RIM Tablet OS __VERSION__' family: 'BlackBerry WebKit' - regex: '(Black[bB]erry|BB10).{1,300}Version/__VERSION__' family: 'BlackBerry WebKit' - regex: '(Black[bB]erry)\s?(\d{1,10})' family: 'BlackBerry' # Palm - regex: 'Palm.{0,300}\b(Pre|Blazer|WebPro)\b(?:[ /](\d{1,10})(?:\.(\d{1,10})(?:\.(\d{1,10}[a-z]{0,33})|)|)|)' family: 'Palm $1' # Links/ Elinks - regex: '\b(E?[Ll]inks)(?: \(|\/)__VERSION__' - regex: '(QtWeb) Internet Browser/(\d{1,10})\.(\d{1,10})' # Phantomjs, should go before Safari - regex: '(PhantomJS|CocoonJS)/__VERSION__' type: 'headless' # AppleWebKit / WebKit Nightly - regex: '(AppleWebKit)/(\d{1,10})\.?(\d{1,10}|)\+ .{0,100} Safari' family: 'AppleWebKit' - regex: '(Callpod Keeper) for Android __VERSION__' type: 'app' # Browser major_version.minor_version (space instead of slash) - regex: '(Android) __VERSION__' - regex: '(Odyssey Web Browser); rv:__VERSION__' # iOS - regex: '(iPod|iPhone|iPad|watchOS)' group: # @ref http://stackoverflow.com/questions/2143763/ - regex: '\b(GSA)/__VERSION__' family: 'Google App' - regex: '\b(bline|DaumApps)/__VERSION__' family: '$1' type: 'app' - regex: '(?:iPod|iPhone|iPad).{1,200}Version/.{1,200}(MXiOS)/__VERSION__' family: 'Maxthon Mobile Safari' - regex: '(iPod|iPhone|iPad).{1,200}Version/__VERSION_2_DIGITS__.{0,200}[ +]Safari' family: 'Mobile Safari' - regex: '(?:iPod|iPhone|iPad).{1,200}?\b(AppleNews|News).{1,200}?Version/__VERSION_2_DIGITS__' family: 'AppleNews' type: 'app' - regex: '(?:iPod|iPhone|iPad).{1,200}?\b(Mobicip).{1,200}?Version/__VERSION_2_DIGITS__' family: 'AppleNews' type: 'app' - regex: '(iPod|iPhone|iPad).{1,200}Version/__VERSION_2_DIGITS__' family: 'Mobile Safari UI/WKWebView' type: 'app' - regex: '(iPod|iPhone|iPad);.{0,30}CPU.{0,30}OS[ +]__VERSION_DIGITS_UNDERSCORE__.{0,200}Mobile.{0,30}[ +]Safari' family: 'Mobile Safari' - regex: '(iPod|iPhone|iPad);.{0,30}CPU.{0,30}OS[ +]__VERSION_DIGITS_UNDERSCORE__.{0,200}Mobile' family: 'Mobile Safari UI/WKWebView' type: 'app' - regex: '(iPod|iPhone|iPad).{0,300}[ +]Safari' family: 'Mobile Safari' - regex: '(iPod|iPhone|iPad)' family: 'Mobile Safari UI/WKWebView' type: 'app' - regex: 'watchOS.{0,300}(Watch)(\d{1,10}),(\d{1,10})' family: 'Apple $1 App' type: 'app' # Safari - regex: '(Version)/__VERSION__.{0,100}Safari/' family: 'Safari' # Safari didn't provide "Version/d.d.d" prior to 3.0 - regex: '(Safari)/\d{1,10}' - regex: '(OLPC)/Update(\d{1,10})\.(\d{1,10})' - regex: '(OLPC)/Update()\.(\d{1,10})' v1: '0' - regex: '(SEMC\-Browser)/(?:__VERSION__|)' - regex: 'Trident(.{0,300})rv:(\d{1,10})\.(\d{1,10})' family: 'IE' # AFTER THE EDGE CASES ABOVE! # AFTER IE11 # BEFORE all other IE - regex: 'rv: ?(\d{1,10})\.(\d{1,10})\).{0,300}(Firefox)/[A-F0-9]{4}' family: '$3' v1: '$1' v2: '$2' v3: '' - regex: '(Firefox)/(\d{1,10})(?:\.(\d{1,10})(?:\.?(pre|[ab]?\d{1,10}[a-z]{0,33})|)|)' # Internet Explorer - regex: '(TeomaBar) (\d{1,10})\.0?(\d{1,10})' - regex: '(?:MS|)(IE)[ /](\d{1,10})\.(\d{1,10})' # AppleWebKit / WebKit Nightly - regex: '(AppleWebKit)/__VERSION__' family: 'AppleWebKit' # ViaFree streaming app https://www.viafree.{dk|se|no} - regex: '^(ViaFree|Viafree)-(?:tvOS-|)[A-Z]{2}/__VERSION_DIGITS__' family: 'ViaFree' type: app - regex: '(OC)/__VERSION__\.\d{1,10} \(Skype for Business\)' family: 'Skype' # headless agents - regex: '(Phantom)/V(\d{1,10})\.(\d{1,10})' family: 'Phantom Browser' type: 'headless' - regex: '(?:^|^Mozilla/\d{1,10}\.\d{1,10} (?:\([^\)]{1,111}\) |))(Java)[ /]?__VERSION__' type: 'headless' - regex: "\\b(\ akka-http|\ axios|\ aiohttp|\ Apache-Http(?:Async|)Client|\ BitTorrent|\ curl|\ fetch libfetch|\ Ghost|\ got|\ Go-http-client|\ HTMLParser|\ HTTrack|\ Jakarta Commons-HttpClient|\ jupdate|\ libcurl-agent|\ libwww-perl|\ lua-resty-http|\ lwp-trivial|\ Microsoft-CryptoAPI|\ Microsoft SkyDriveSync|\ node-superagent|\ okhttp|\ OpenBSD ftp|\ PHP|\ [Pp]ython-[^/]{1,111}|\ PycURL|\ restify|\ SophosAgent|\ SophosUpdateManager|\ urlgrabber|\ unirest-(?:java|python|ruby|nodejs|php|net)|\ (?:\\w{1,111}) APT-HTTP|\ Wget|\ Zend_Http_Client\ )\\b(?:[ /]__VERSION__|)" type: 'headless' # Storage Clients - regex: "\\b(\ ibm-cos-sdk-(?:core|java|js|python)|\ S3 Browser|\ S3Gof3r|\ rusoto|\ rclone\ )\\b(?:[ /]__VERSION__|)" type: 'storage' # Proxy - regex: '\b(Hatena-Mobile-Gateway|Privoxy)/__VERSION__' type: 'proxy' - regex: '\b(Synapse)' type: 'proxy' # generic catcher for bots - regex: '(binlar|lbot|visionutils|WebThumb)[_/]__VERSION__' type: 'bot' - regex: 'https?://((?:[\w\d-]{1,111}\.|)[\w\d-]{1,111}\.\w{1,111})' type: 'bot' - regex: 'Mozilla/[45]\.0 \(compatible;?\)' family: compatible type: 'bot' #### Engine #### engine_parsers: # MSIE compatibility modes - regex: 'Trident' group: # MSIE 8 !== Trident/4 - regex: 'MSIE ([^8])\.\d.{0,300} (Trident)[ /](4)\.(\d{1,10})(?:\.(\d{1,10})|)' family: '$2' v1: '$3' v2: '$4' v3: '$5' type: 'mode::MSIE $1' # MSIE 9 !== Trident/5 - regex: 'MSIE ([^9])\.\d.{0,300} (Trident)[ /](5)\.(\d{1,10})(?:\.(\d{1,10})|)' family: '$2' v1: '$3' v2: '$4' v3: '$5' type: 'mode::MSIE $1' # MSIE 10 !== Trident/6 - regex: 'MSIE ((?:(?!10)\d){1,111})\.\d.{0,300} (Trident)[ /](6)\.(\d{1,10})(?:\.(\d{1,10})|)' family: '$2' v1: '$3' v2: '$4' v3: '$5' type: 'mode::MSIE $1' # MSIE 11 !== Trident/7 - regex: 'MSIE ((?:(?!11)\d){1,111})\.\d.{0,300} (Trident)[ /](7)\.(\d{1,10})(?:\.(\d{1,10})|)' family: '$2' v1: '$3' v2: '$4' v3: '$5' type: 'mode::MSIE $1' - regex: '(Trident|Presto)[ /]__VERSION__' - regex: 'Opera' family: 'Presto' # Windows 10 IE version uses "Edge" and "Chrome" - regex: '\b(Edge)/(\d{1,10})(?:\.(\d{1,10})|)' family: 'EdgeHTML' # Edge for Android / iOS - regex: '\b(EdgA|EdgiOS)/__VERSION__' family: 'EdgeHTML' - regex: 'QtWebEngine/__VERSION__' family: 'Blink' type: 'QtWebEngine' - regex: '(Chrome)[/](\d{1,10})\.__VERSION__.{0,300}OPR/\d{1,10}' family: 'Blink' type: 'Opera' - regex: 'SamsungBrowser[/].{0,300}(Chrome)[/]__VERSION__' family: 'Blink' type: 'Samsung' - regex: 'Silk[/].{0,300}(Chrome)[/]__VERSION__' family: 'Blink' type: 'Silk' # https://developer.chrome.com/multidevice/user-agent - regex: '(?:; wv\) |)AppleWeb[Kk]it/.{0,300}Version/.{0,300}(Chrome)[/]__VERSION__' family: 'Blink' type: 'WebView' - regex: '(Chrome)[/]__VERSION__' family: 'Blink' - regex: '(HeadlessChrome)' family: 'Blink' - regex: '(TDEHTML)/__VERSION__' family: 'TDEHTML' - regex: '(KHTML|Konqueror)/__VERSION__' family: 'KHTML' # http://docs.aws.amazon.com/silk/latest/developerguide/user-agent.html - regex: '(Silk)/__VERSION__' family: 'Webkit' type: 'Silk' - regex: 'Web[Kk]it.{0,300}(NokiaBrowser|BrowserNG)/__VERSION__' family: 'Webkit' type: 'Nokia' - regex: '^Mozilla.{0,300}Android\b.{0,300}SAMSUNG.{0,300}(AppleWeb[Kk]it)/?__VERSION__' family: 'Webkit' type: 'Samsung' - regex: 'Android\b.{0,300}(AppleWeb[Kk]it)/?__VERSION__' family: 'Webkit' type: 'Android' - regex: 'DirectFB\b.{0,300}(AppleWeb[Kk]it)/?__VERSION__' family: 'Webkit' type: 'LG' - regex: '(AppleWeb[Kk]it)/?__VERSION__.{0,300}\b(NetCast|LG Browser)' family: 'Webkit' type: 'LG' - regex: 'Smart-?TV\b.{0,300}(AppleWeb[Kk]it)/?__VERSION__' family: 'Webkit' type: 'Samsung' - regex: '(Goanna)/.{0,300}PaleMoon/__VERSION__' - regex: '(rv:)(\d{1,10})\.(\d{1,10}[ab]?)\.?([ab]?\d{1,10}[a-z]{0,5}|)\.?(\d{1,10}[a-z]{0,5}|)[;\)].{0,300} Gecko(?:[ /]|$)' family: 'Gecko' - regex: '(Gecko)/20\d{6}' - regex: '(AppleWeb[Kk]it)(?:/__VERSION__|[ ,]|$)' family: 'Webkit' type: 'Apple' - regex: '(Web[Kk]it)(?:/__VERSION__|[ ,]|$)' family: 'Webkit' - regex: '(Net[Ff]ront)[ /]?__VERSION__' family: 'Netfront' - regex: '(UCBrowser)/__VERSION__' #### OS #### os_parsers: - regex: 'UCWEB|JUC' group: # UCWEB - regex: '^UCWEB.{0,300}; (Adr) (\d{1,10})\.(\d{1,10})(?:[.\-]([a-z0-9]{1,50})|);' family: 'Android' - regex: '^UCWEB.{0,300}; (iPa?d|iPh) OS __VERSION_OS_UNDERSCORE__;' family: 'iOS' - regex: '^UCWEB.{0,300}; (wds) __VERSION__;' family: 'Windows Phone' # JUC - regex: '^(JUC).{0,300}; ?U; ?(?:Android|)(\d{1,10})\.(\d{1,10})(?:[\.\-]([a-z0-9]{1,50})|)' family: 'Android' ########## # Chrome OS # if version 0.0.0, probably this stuff: # http://code.google.com/p/chromium-os/issues/detail?id=11573 # http://code.google.com/p/chromium-os/issues/detail?id=13790 ########## - regex: 'CrOS|CitrixChromeApp' group: - regex: '(CrOS) [a-z0-9_]{1,50} __VERSION__' family: 'Chrome OS' # Citrix Chrome App on Chrome OS - regex: '(x86_64|aarch64) __VERSION_DIGITS__.{0,100}Chrome.{0,100}(?:CitrixChromeApp)$' family: 'Chrome OS' ########## # Windows # http://en.wikipedia.org/wiki/Windows_NT#Releases # possibility of false positive when different marketing names share same NT kernel # e.g. windows server 2003 and windows xp # lots of ua strings have Windows NT 4.1 !?!?!?!? !?!? !? !????!?! !!! ??? !?!?! ? # (very) roughly ordered in terms of frequency of occurence of regex (win xp currently most frequent, etc) ########## - regex: 'Win|CYGWIN' group: # @note: Xbox also spoofs NT 6.1/Windows Phone (see http://msdn.microsoft.com/en-us/library/ie/jj883728(v=vs.85).aspx) # @note: Xbox spoofs "Xbox LIVE/2.5.1704 CFNetwork/672.0.8 /14.0.0" iPhone App - regex: '\b(Xbox)\b(?:(?!Darwin).){0,100}$' # ie mobile desktop mode # spoofs nt 6.1. must come before windows 7 - regex: '(XBLWP7)' family: 'Windows Phone' # @note: These need to come before Windows NT 6.1 - regex: '(Windows Phone) (?:OS[ /]|)(\d{1,10})\.(\d{1,10})' - regex: '(Windows ?Mobile)' family: 'Windows Mobile' - regex: '(Windows ?CE)' family: 'Windows CE' - regex: '(Windows NT 6\.4)' family: 'Windows 10' - regex: '(Windows NT 10\.0|Windows 10\.0)' family: 'Windows 10' - regex: '(Windows NT 6\.3; ARM;)' family: 'Windows RT 8.1' - regex: '(Windows NT 6\.3|CYGWIN_NT-6\.3|Windows 8\.1)' family: 'Windows 8.1' - regex: '(Windows NT 6\.2; ARM;)' family: 'Windows RT' - regex: