PluginProbe ʕ •ᴥ•ʔ
Post Views Counter / trunk
Post Views Counter vtrunk
1.7.13 1.7.12 1.7.11 trunk 1.0.0 1.0.1 1.0.10 1.0.11 1.0.12 1.0.2 1.0.3 1.0.4 1.0.5 1.0.6 1.0.7 1.0.8 1.0.9 1.1.0 1.1.1 1.1.2 1.1.3 1.1.4 1.2.0 1.2.1 1.2.10 1.2.11 1.2.12 1.2.13 1.2.14 1.2.2 1.2.3 1.2.4 1.2.5 1.2.6 1.2.7 1.2.8 1.2.9 1.3 1.3.1 1.3.10 1.3.11 1.3.12 1.3.13 1.3.2 1.3.2.1 1.3.3 1.3.4 1.3.5 1.3.6 1.3.7 1.3.8 1.3.9 1.4 1.4.1 1.4.2 1.4.3 1.4.4 1.4.5 1.4.6 1.4.7 1.4.8 1.5.0 1.5.1 1.5.2 1.5.3 1.5.4 1.5.5 1.5.6 1.5.7 1.5.8 1.5.9 1.6.0 1.6.1 1.7.0 1.7.1 1.7.10 1.7.2 1.7.3 1.7.4 1.7.5 1.7.6 1.7.7 1.7.8 1.7.9
post-views-counter / includes / class-crawler-detect.php
post-views-counter / includes Last commit date
class-admin.php 3 months ago class-columns-modal.php 1 month ago class-columns.php 2 weeks ago class-counter.php 2 months ago class-crawler-detect.php 7 months ago class-cron.php 1 month ago class-dashboard.php 1 month ago class-emails-mailer.php 1 month ago class-emails-period.php 1 month ago class-emails-query.php 1 month ago class-emails-scheduler.php 1 month ago class-emails-template.php 1 month ago class-emails.php 1 month ago class-frontend.php 2 weeks ago class-functions.php 1 year ago class-import.php 2 months ago class-integration-gutenberg.php 6 months ago class-integrations.php 2 months ago class-query.php 2 months ago class-settings-api.php 1 month ago class-settings-display.php 4 months ago class-settings-emails.php 1 month ago class-settings-general.php 1 month ago class-settings-integrations.php 5 months ago class-settings-other.php 1 month ago class-settings-reports.php 1 month ago class-settings.php 1 month ago class-toolbar.php 3 months ago class-traffic-signals.php 2 months ago class-update.php 1 month ago class-widgets.php 1 month ago functions.php 1 month ago
class-crawler-detect.php
1735 lines
1 <?php
2 // exit if accessed directly
3 if ( ! defined( 'ABSPATH' ) )
4 exit;
5
6 /**
7 * Post_Views_Counter_Crawler_Detect class.
8 *
9 * Based on CrawlerDetect php class adjusted to PHP 5.2
10 * https://github.com/JayBizzle/Crawler-Detect/blob/master/src/CrawlerDetect.php
11 *
12 * @since 1.2.4
13 * @version 1.3.0
14 * @class Post_Views_Counter_Crawler_Detect
15 */
16 class Post_Views_Counter_Crawler_Detect {
17
18 /**
19 * The user agent.
20 *
21 * @var null
22 */
23 protected $user_agent = null;
24
25 /**
26 * Headers that contain a user agent.
27 *
28 * @var array
29 */
30 protected $http_headers = [];
31
32 /**
33 * Store regex matches.
34 *
35 * @var array
36 */
37 protected $matches = [];
38
39 /**
40 * Crawlers object.
41 *
42 * @var object
43 */
44 protected $crawlers = [];
45
46 /**
47 * Exclusions object.
48 *
49 * @var object
50 */
51 protected $exclusions = [];
52
53 /**
54 * Headers object.
55 *
56 * @var object
57 */
58 protected $ua_http_headers;
59
60 /**
61 * Class constructor.
62 *
63 * @return void
64 */
65 public function __construct() {
66 $this->crawlers = $this->get_crawlers_list();
67 $this->exclusions = $this->get_exclusions_list();
68
69 add_action( 'after_setup_theme', [ $this, 'init' ] );
70 }
71
72 /**
73 * Initialize class.
74 *
75 * @return void
76 */
77 public function init() {
78 // break on admin side
79 if ( is_admin() && ! wp_doing_ajax() )
80 return;
81
82 $this->ua_http_headers = $this->get_headers_list();
83 $this->set_http_headers();
84 $this->set_user_agent();
85 }
86
87 /**
88 * Set HTTP headers.
89 *
90 * @param array $http_headers
91 * @return void
92 */
93 public function set_http_headers( $http_headers = null ) {
94 // use global _SERVER if $http_headers aren't defined
95 if ( ! is_array( $http_headers ) || ! count( $http_headers ) )
96 $http_headers = $_SERVER;
97
98 // clear existing headers
99 $this->http_headers = [];
100
101 // only save HTTP headers - in PHP land, that means only _SERVER vars that start with HTTP_.
102 foreach ( $http_headers as $key => $value ) {
103 if ( substr( $key, 0, 5 ) === 'HTTP_' )
104 $this->http_headers[$key] = $value;
105 }
106 }
107
108 /**
109 * Return user agent headers.
110 *
111 * @return array
112 */
113 public function get_ua_http_headers() {
114 return $this->ua_http_headers;
115 }
116
117 /**
118 * Return the user agent.
119 *
120 * @return string
121 */
122 public function get_user_agent() {
123 return $this->user_agent;
124 }
125
126 /**
127 * Set the user agent.
128 *
129 * @param string $user_agent
130 * @return string
131 */
132 public function set_user_agent( $user_agent = null ) {
133 if ( false === empty( $user_agent ) )
134 return $this->user_agent = $user_agent;
135 else {
136 $this->user_agent = null;
137
138 foreach ( $this->get_ua_http_headers() as $alt_header ) {
139 if ( false === empty( $this->http_headers[$alt_header] ) ) // @todo: should use get_http_header(), but it would be slow.
140 $this->user_agent .= $this->http_headers[$alt_header] . ' ';
141 }
142
143 return $this->user_agent = ( ! empty( $this->user_agent ) ? trim( $this->user_agent ) : null );
144 }
145 }
146
147 /**
148 * Build the user agent regex.
149 *
150 * @param array $crawlers
151 *
152 * @return string
153 */
154 public function get_regex( $crawlers = [] ) {
155 $list = empty( $crawlers ) ? $this->crawlers : $crawlers;
156
157 // Allow to intercept the regex
158 $regex = apply_filters( 'pvc_get_crawler_regex', null, $list );
159
160 if ( $regex !== null ) {
161 return $regex;
162 }
163
164 return '(' . implode( '|', $list ) . ')';
165 }
166
167 /**
168 * Build the replacement regex.
169 *
170 * @return string
171 */
172 public function get_exclusions() {
173 // Allow to intercept the exclusions regex
174 $regex = apply_filters( 'pvc_get_exclusions_regex', null, $this->exclusions );
175
176 if ( $regex !== null ) {
177 return $regex;
178 }
179
180 return '(' . implode( '|', $this->exclusions ) . ')';
181 }
182
183 /**
184 * Check user agent string against the regex.
185 *
186 * @param string $user_agent
187 * @return bool
188 */
189 public function is_crawler( $user_agent = null ) {
190 // update crawlers
191 $crawlers = apply_filters( 'pvc_crawlers_list', $this->crawlers );
192
193 $agent = (string)( is_null( $user_agent ) ? $this->user_agent : $user_agent );
194
195 // Treat empty or missing user agent as bot (security measure)
196 if ( strlen( trim( $agent ) ) === 0 )
197 return true;
198
199 $agent = preg_replace( '/' . $this->get_exclusions() . '/i', '', $agent );
200
201 if ( strlen( trim( $agent ) ) === 0 )
202 return true;
203 else
204 $result = preg_match( '/' . $this->get_regex( $crawlers ) . '/i', trim( $agent ), $matches );
205
206 if ( $matches )
207 $this->matches = $matches;
208
209 return (bool) $result;
210 }
211
212 /**
213 * Return the matches.
214 *
215 * @return string
216 */
217 public function get_matches() {
218 return isset( $this->matches[0] ) ? $this->matches[0] : null;
219 }
220
221 /**
222 * Return the regular expressions to match against the user agent.
223 *
224 * @return array
225 */
226 protected function get_crawlers_list() {
227 return [
228 ' YLT',
229 '^Aether',
230 '^Amazon Simple Notification Service Agent$',
231 '^Amazon-Route53-Health-Check-Service',
232 '^Amazon CloudFront',
233 '^b0t$',
234 '^bluefish ',
235 '^Calypso v\/',
236 '^COMODO DCV',
237 '^Corax',
238 '^DangDang',
239 '^DavClnt',
240 '^DHSH',
241 '^docker\/[0-9]',
242 '^Expanse',
243 '^FDM ',
244 '^git\/',
245 '^Goose\/',
246 '^Grabber',
247 '^Gradle\/',
248 '^HTTPClient\/',
249 '^HTTPing',
250 '^Java\/',
251 '^Jeode\/',
252 '^Jetty\/',
253 '^Mail\/',
254 '^Mget',
255 '^Microsoft URL Control',
256 '^Mikrotik\/',
257 '^Netlab360',
258 '^NG\/[0-9\.]',
259 '^NING\/',
260 '^npm\/',
261 '^Nuclei',
262 '^PHP-AYMAPI\/',
263 '^PHP\/',
264 '^pip\/',
265 '^pnpm\/',
266 '^RMA\/',
267 '^Ruby|Ruby\/[0-9]',
268 "^symbolicator\\/",
269 '^Swurl ',
270 '^TLS tester ',
271 '^twine\/',
272 '^ureq',
273 '^VSE\/[0-9]',
274 '^WordPress\.com',
275 '^XRL\/[0-9]',
276 '^ZmEu',
277 '008\/',
278 '13TABS',
279 '192\.comAgent',
280 '2GDPR\/',
281 '2ip\.ru',
282 '404enemy',
283 '7Siters',
284 '80legs',
285 'a3logics\.in',
286 'A6-Indexer',
287 'Abonti',
288 'Aboundex',
289 'aboutthedomain',
290 'Accoona-AI-Agent',
291 'acebookexternalhit\/',
292 'acoon',
293 'acrylicapps\.com\/pulp',
294 'Acunetix',
295 'AdAuth\/',
296 'adbeat',
297 'AddThis',
298 'ADmantX',
299 'AdminLabs',
300 'adressendeutschland',
301 'adreview\/',
302 'adscanner',
303 'adstxt-worker',
304 'Adstxtaggregator',
305 'adstxt\.com',
306 'Adyen HttpClient',
307 'AffiliateLabz\/',
308 'affilimate-puppeteer',
309 'agentslug',
310 'AHC',
311 'aihit',
312 'aiohttp\/',
313 'Airmail',
314 'akka-http\/',
315 'akula\/',
316 'alertra',
317 'alexa site audit',
318 'Alibaba\.Security\.Heimdall',
319 'Alligator',
320 'allloadin',
321 'AllSubmitter',
322 'alyze\.info',
323 'amagit',
324 'Anarchie',
325 'AndroidDownloadManager',
326 'Anemone',
327 'AngleSharp',
328 'annotate_google',
329 'Anthill',
330 'Anturis Agent',
331 'Ant\.com',
332 'AnyEvent-HTTP\/',
333 'Apache Ant\/',
334 'Apache Droid',
335 'Apache OpenOffice',
336 'Apache-HttpAsyncClient',
337 'Apache-HttpClient',
338 'ApacheBench',
339 'Apexoo',
340 'apimon\.de',
341 'APIs-Google',
342 'AportWorm\/',
343 'AppBeat\/',
344 'AppEngine-Google',
345 'AppleSyndication',
346 'Aprc\/[0-9]',
347 'Arachmo',
348 'arachnode',
349 'Arachnophilia',
350 'aria2',
351 'Arukereso',
352 'asafaweb',
353 'Asana\/',
354 'Ask Jeeves',
355 'AskQuickly',
356 'ASPSeek',
357 'Asterias',
358 'Astute',
359 'asynchttp',
360 'Attach',
361 'attohttpc',
362 'autocite',
363 'AutomaticWPTester',
364 'Autonomy',
365 'awin\.com',
366 'AWS Security Scanner',
367 'axios\/',
368 'a\.pr-cy\.ru',
369 'B-l-i-t-z-B-O-T',
370 'Backlink-Ceck',
371 'BacklinkHttpStatus',
372 'BackStreet',
373 'BackupLand',
374 'BackWeb',
375 'Bad-Neighborhood',
376 'Badass',
377 'baidu\.com',
378 'Bandit',
379 'Barracuda Sentinel \(EE\)',
380 'basicstate',
381 'BatchFTP',
382 'Battleztar Bazinga',
383 'baypup\/',
384 'BazQux',
385 'BBBike',
386 'BCKLINKS',
387 'BDFetch',
388 'BegunAdvertising',
389 'Bewica-security-scan',
390 'Bidtellect',
391 'BigBozz',
392 'Bigfoot',
393 'biglotron',
394 'BingLocalSearch',
395 'BingPreview',
396 'binlar',
397 'biNu image cacher',
398 'Bitacle',
399 'Bitrix link preview',
400 'biz_Directory',
401 'BKCTwitterUnshortener\/',
402 'Black Hole',
403 'Blackboard Safeassign',
404 'BlackWidow',
405 'BlockNote\.Net',
406 'BlogBridge',
407 'Bloglines',
408 'Bloglovin',
409 'BlogPulseLive',
410 'BlogSearch',
411 'Blogtrottr',
412 'BlowFish',
413 'boitho\.com-dc',
414 'Boost\.Beast',
415 'BPImageWalker',
416 'Braintree-Webhooks',
417 'Branch Metrics API',
418 'Branch-Passthrough',
419 'Brandprotect',
420 'Brandwatch',
421 'Brodie\/',
422 'Browsershots',
423 'BUbiNG',
424 'Buck\/',
425 'Buddy',
426 'BuiltWith',
427 'Bullseye',
428 'BunnySlippers',
429 'Burf Search',
430 'Butterfly\/',
431 'BuzzSumo',
432 'CAAM\/[0-9]',
433 'caam dot crwlr at gmail dot com',
434 'CakePHP',
435 'Calculon',
436 'Canary%20Mail',
437 'CaretNail',
438 'catexplorador',
439 'CC Metadata Scaper',
440 'Cegbfeieh',
441 'censys',
442 'centuryb.o.t9[at]gmail.com',
443 'Cerberian Drtrs',
444 'CERT\.at-Statistics-Survey',
445 'cf-facebook',
446 'cg-eye',
447 'changedetection',
448 'ChangesMeter',
449 'Charlotte',
450 'chatterino-api-cache',
451 'CheckHost',
452 'checkprivacy',
453 'CherryPicker',
454 'ChinaClaw',
455 'Chirp\/',
456 'chkme\.com',
457 'Chlooe',
458 'Chromaxa',
459 'CirrusExplorer',
460 'CISPA Vulnerability Notification',
461 'CISPA Web Analyser',
462 'Citoid',
463 'CJNetworkQuality',
464 'Clarsentia',
465 'clips\.ua\.ac\.be',
466 'Cloud mapping',
467 'CloudEndure',
468 'CloudFlare-AlwaysOnline',
469 'Cloudflare-Healthchecks',
470 'Cloudinary',
471 'cmcm\.com',
472 'coccoc',
473 'cognitiveseo',
474 'ColdFusion',
475 'colly -',
476 'CommaFeed',
477 'Commons-HttpClient',
478 'commonscan',
479 'contactbigdatafr',
480 'contentkingapp',
481 'Contextual Code Sites Explorer',
482 'convera',
483 'CookieReports',
484 'copyright sheriff',
485 'CopyRightCheck',
486 'Copyscape',
487 'cortex\/',
488 'Cosmos4j\.feedback',
489 'Covario-IDS',
490 'Craw\/',
491 'Crescent',
492 'Criteo',
493 'Crowsnest',
494 'CSHttp',
495 'CSSCheck',
496 'Cula\/',
497 'curb',
498 'Curious George',
499 'curl',
500 'cuwhois\/',
501 'cybo\.com',
502 'DAP\/NetHTTP',
503 'DareBoost',
504 'DatabaseDriverMysqli',
505 'DataCha0s',
506 'DatadogSynthetics',
507 'Datafeedwatch',
508 'Datanyze',
509 'DataparkSearch',
510 'dataprovider',
511 'DataXu',
512 'Daum(oa)?[ \/][0-9]',
513 'dBpoweramp',
514 'ddline',
515 'deeris',
516 'delve\.ai',
517 'Demon',
518 'DeuSu',
519 'developers\.google\.com\/\+\/web\/snippet\/',
520 'Devil',
521 'Digg',
522 'Digincore',
523 'DigitalPebble',
524 'Dirbuster',
525 'Discourse Forum Onebox',
526 'Dispatch\/',
527 'Disqus\/',
528 'DittoSpyder',
529 'dlvr',
530 'DMBrowser',
531 'DNSPod-reporting',
532 'docoloc',
533 'Dolphin http client',
534 'DomainAppender',
535 'DomainLabz',
536 'Domains Project\/',
537 'Donuts Content Explorer',
538 'dotMailer content retrieval',
539 'dotSemantic',
540 'downforeveryoneorjustme',
541 'Download Wonder',
542 'downnotifier',
543 'DowntimeDetector',
544 'Drip',
545 'drupact',
546 'Drupal \(\+http:\/\/drupal\.org\/\)',
547 'DTS Agent',
548 'dubaiindex',
549 'DuplexWeb-Google',
550 'DynatraceSynthetic',
551 'EARTHCOM',
552 'Easy-Thumb',
553 'EasyDL',
554 'Ebingbong',
555 'ec2linkfinder',
556 'eCairn-Grabber',
557 'eCatch',
558 'ECCP',
559 'eContext\/',
560 'Ecxi',
561 'EirGrabber',
562 'ElectricMonk',
563 'elefent',
564 'EMail Exractor',
565 'EMail Wolf',
566 'EmailWolf',
567 'Embarcadero',
568 'Embed PHP Library',
569 'Embedly',
570 'endo\/',
571 'europarchive\.org',
572 'evc-batch',
573 'EventMachine HttpClient',
574 'Everwall Link Expander',
575 'Evidon',
576 'Evrinid',
577 'ExactSearch',
578 'ExaleadCloudview',
579 'Excel\/',
580 'exif',
581 'ExoRank',
582 'Exploratodo',
583 'Express WebPictures',
584 'Extreme Picture Finder',
585 'EyeNetIE',
586 'ezooms',
587 'facebookcatalog',
588 'facebookexternalhit',
589 'facebookexternalua',
590 'facebookplatform',
591 'fairshare',
592 'Faraday v',
593 'fasthttp',
594 'Faveeo',
595 'Favicon downloader',
596 'faviconarchive',
597 'faviconkit',
598 'FavOrg',
599 'Feed Wrangler',
600 'Feedable\/',
601 'Feedbin',
602 'FeedBooster',
603 'FeedBucket',
604 'FeedBunch\/',
605 'FeedBurner',
606 'feeder',
607 'Feedly',
608 'FeedshowOnline',
609 'Feedshow\/',
610 'Feedspot',
611 'FeedViewer\/',
612 'Feedwind\/',
613 'FeedZcollector',
614 'feeltiptop',
615 'Fetch API',
616 'Fetch\/[0-9]',
617 'Fever\/[0-9]',
618 'FHscan',
619 'Fiery%20Feeds',
620 'Filestack',
621 'Fimap',
622 'findlink',
623 'findthatfile',
624 'FlashGet',
625 'FlipboardBrowserProxy',
626 'FlipboardProxy',
627 'FlipboardRSS',
628 'Flock\/',
629 'Florienzh\/',
630 'fluffy',
631 'Flunky',
632 'flynxapp',
633 'forensiq',
634 'ForusP',
635 'FoundSeoTool',
636 'fragFINN\.de',
637 'free thumbnails',
638 'Freeuploader',
639 'FreshRSS',
640 'frontman',
641 'Funnelback',
642 'Fuzz Faster U Fool',
643 'G-i-g-a-b-o-t',
644 'g00g1e\.net',
645 'ganarvisitas',
646 'gdnplus\.com',
647 'GeedoProductSearch',
648 'geek-tools',
649 'Genieo',
650 'GentleSource',
651 'GetCode',
652 'Getintent',
653 'GetLinkInfo',
654 'getprismatic',
655 'GetRight',
656 'getroot',
657 'GetURLInfo\/',
658 'GetWeb',
659 'Geziyor',
660 'Ghost Inspector',
661 'GigablastOpenSource',
662 'GIS-LABS',
663 'github-camo',
664 'GitHub-Hookshot',
665 'github\.com',
666 'Go http package',
667 'Go [\d\.]* package http',
668 'Go!Zilla',
669 'Go-Ahead-Got-It',
670 'Go-http-client',
671 'go-mtasts\/',
672 'gobuster',
673 'gobyus',
674 'Gofeed',
675 'gofetch',
676 'Goldfire Server',
677 'GomezAgent',
678 'gooblog',
679 'Goodzer\/',
680 'Google AppsViewer',
681 'Google Desktop',
682 'Google favicon',
683 'Google Keyword Suggestion',
684 'Google Keyword Tool',
685 'Google Page Speed Insights',
686 'Google PP Default',
687 'Google Search Console',
688 'Google Web Preview',
689 'Google-Ads',
690 'Google-Adwords',
691 'Google-Apps-Script',
692 'Google-Calendar-Importer',
693 'Google-HotelAdsVerifier',
694 'Google-HTTP-Java-Client',
695 'Google-InspectionTool',
696 'Google-Podcast',
697 'Google-Publisher-Plugin',
698 'Google-Read-Aloud',
699 'Google-SearchByImage',
700 'Google-Site-Verification',
701 'Google-SMTP-STS',
702 'Google-speakr',
703 'Google-Structured-Data-Testing-Tool',
704 'Google-Transparency-Report',
705 'google-xrawler',
706 'Google-Youtube-Links',
707 'GoogleDocs',
708 'GoogleHC\/',
709 'GoogleOther',
710 'GoogleProber',
711 'GoogleProducer',
712 'GoogleSites',
713 'Gookey',
714 'GoSpotCheck',
715 'gosquared-thumbnailer',
716 'Gotit',
717 'GoZilla',
718 'grabify',
719 'GrabNet',
720 'Grafula',
721 'Grammarly',
722 'GrapeFX',
723 'GreatNews',
724 'Gregarius',
725 'GRequests',
726 'grokkit',
727 'grouphigh',
728 'grub-client',
729 'gSOAP\/',
730 'GT::WWW',
731 'GTmetrix',
732 'GuzzleHttp',
733 'gvfs\/',
734 'HAA(A)?RTLAND http client',
735 'Haansoft',
736 'hackney\/',
737 'Hadi Agent',
738 'HappyApps-WebCheck',
739 'Hardenize',
740 'Hatena',
741 'Havij',
742 'HaxerMen',
743 'HEADMasterSEO',
744 'HeartRails_Capture',
745 'help@dataminr\.com',
746 'heritrix',
747 'Hexometer',
748 'historious',
749 'hkedcity',
750 'hledejLevne\.cz',
751 'Hloader',
752 'HMView',
753 'Holmes',
754 'HonesoSearchEngine',
755 'HootSuite Image proxy',
756 'Hootsuite-WebFeed',
757 'hosterstats',
758 'HostTracker',
759 'ht:\/\/check',
760 'htdig',
761 'HTMLparser',
762 'htmlyse',
763 'HTTP Banner Detection',
764 'http-get',
765 'HTTP-Header-Abfrage',
766 'http-kit',
767 'http-request\/',
768 'HTTP-Tiny',
769 'HTTP::Lite',
770 'http:\/\/www.neomo.de\/', // 'Francis [Bot]'
771 'HttpComponents',
772 'httphr',
773 'HTTPie',
774 'HTTPMon',
775 'httpRequest',
776 'httpscheck',
777 'httpssites_power',
778 'httpunit',
779 'HttpUrlConnection',
780 'http\.rb\/',
781 'HTTP_Compression_Test',
782 'http_get',
783 'http_request2',
784 'http_requester',
785 'httrack',
786 'huaweisymantec',
787 'HubSpot ',
788 'HubSpot-Link-Resolver',
789 'Humanlinks',
790 'i2kconnect\/',
791 'Iblog',
792 'ichiro',
793 'Id-search',
794 'IdeelaborPlagiaat',
795 'IDG Twitter Links Resolver',
796 'IDwhois\/',
797 'Iframely',
798 'igdeSpyder',
799 'iGooglePortal',
800 'IlTrovatore',
801 'Image Fetch',
802 'Image Sucker',
803 'ImageEngine\/',
804 'ImageVisu\/',
805 'Imagga',
806 'imagineeasy',
807 'imgsizer',
808 'InAGist',
809 'inbound\.li parser',
810 'InDesign%20CC',
811 'Indy Library',
812 'InetURL',
813 'infegy',
814 'infohelfer',
815 'InfoTekies',
816 'InfoWizards Reciprocal Link',
817 'inpwrd\.com',
818 'instabid',
819 'Instapaper',
820 'Integrity',
821 'integromedb',
822 'Intelliseek',
823 'InterGET',
824 'Internet Ninja',
825 'InternetSeer',
826 'internetVista monitor',
827 'internetwache',
828 'internet_archive',
829 'intraVnews',
830 'IODC',
831 'IOI',
832 'Inboxb0t',
833 'iplabel',
834 'ips-agent',
835 'IPS\/[0-9]',
836 'IPWorks HTTP\/S Component',
837 'iqdb\/',
838 'Iria',
839 'Irokez',
840 'isitup\.org',
841 'iskanie',
842 'isUp\.li',
843 'iThemes Sync\/',
844 'IZaBEE',
845 'iZSearch',
846 'JAHHO',
847 'janforman',
848 'Jaunt\/',
849 'Java.*outbrain',
850 'javelin\.io',
851 'Jbrofuzz',
852 'Jersey\/',
853 'JetCar',
854 'Jigsaw',
855 'Jobboerse',
856 'JobFeed discovery',
857 'Jobg8 URL Monitor',
858 'jobo',
859 'Jobrapido',
860 'Jobsearch1\.5',
861 'JoinVision Generic',
862 'JolokiaPwn',
863 'Joomla',
864 'Jorgee',
865 'JS-Kit',
866 'JungleKeyThumbnail',
867 'JustView',
868 'Kaspersky Lab CFR link resolver',
869 'Kelny\/',
870 'Kerrigan\/',
871 'KeyCDN',
872 'Keyword Density',
873 'Keywords Research',
874 'khttp\/',
875 'KickFire',
876 'KimonoLabs\/',
877 'Kml-Google',
878 'knows\.is',
879 'KOCMOHABT',
880 'kouio',
881 'krawler\.dk',
882 'kube-probe',
883 'kubectl',
884 'kulturarw3',
885 'KumKie',
886 'Larbin',
887 'Lavf\/',
888 'leakix\.net',
889 'LeechFTP',
890 'LeechGet',
891 'letsencrypt',
892 'Lftp',
893 'LibVLC',
894 'LibWeb',
895 'Libwhisker',
896 'libwww',
897 'Licorne',
898 'Liferea\/',
899 'Lighthouse',
900 'Lightspeedsystems',
901 'Likse',
902 'limber\.io',
903 'Link Valet',
904 'LinkAlarm\/',
905 'LinkAnalyser',
906 'link-check',
907 'linkCheck',
908 'linkdex',
909 'LinkExaminer',
910 'linkfluence',
911 'linkpeek',
912 'LinkPreview',
913 'LinkScan',
914 'LinksManager',
915 'LinkTiger',
916 'LinkWalker',
917 'link_thumbnailer',
918 'Lipperhey',
919 'Litemage_walker',
920 'livedoor ScreenShot',
921 'LoadImpactRload',
922 'localsearch-web',
923 'LongURL API',
924 'longurl-r-package',
925 'looid\.com',
926 'looksystems\.net',
927 'lscache_runner',
928 'ltx71',
929 'lua-resty-http',
930 'Lucee \(CFML Engine\)',
931 'Lush Http Client',
932 'lwp-request',
933 'lwp-trivial',
934 'LWP::Simple',
935 'lycos',
936 'LYT\.SR',
937 'L\.webis',
938 'mabontland',
939 'MacOutlook\/',
940 'MagentaNews\/',
941 'Mag-Net',
942 'MagpieRSS',
943 'Mail::STS',
944 'MailChimp',
945 'Mail\.Ru',
946 'Majestic12',
947 'makecontact\/',
948 'Mandrill',
949 'MapperCmd',
950 'marketinggrader',
951 'MarkMonitor',
952 'MarkWatch',
953 'Mass Downloader',
954 'masscan\/',
955 'Mata Hari',
956 'mattermost',
957 'MatchorySearch\/',
958 'Mediametric',
959 'Mediapartners-Google',
960 'mediawords',
961 'MegaIndex\.ru',
962 'MeltwaterNews',
963 'Melvil Rawi',
964 'MemGator',
965 'Metaspinner',
966 'MetaURI',
967 'MFC_Tear_Sample',
968 'Microsearch',
969 'Microsoft Data Access',
970 'Microsoft Office',
971 'Microsoft Outlook',
972 'Microsoft Windows Network Diagnostics',
973 'Microsoft-WebDAV-MiniRedir',
974 'Microsoft\.Data\.Mashup',
975 'MicrosoftPreview',
976 'MIDown tool',
977 'MIIxpc',
978 'Mindjet',
979 'Miniature\.io',
980 'Miniflux',
981 'mio_httpc',
982 'Miro-HttpClient',
983 'Mister PiX',
984 'mixdata dot com',
985 'mixed-content-scan',
986 'mixnode',
987 'Mnogosearch',
988 'mogimogi',
989 'Mojeek',
990 'Mojolicious \(Perl\)',
991 'Mollie',
992 'monitis',
993 'Monitority\/',
994 'Monit\/',
995 'montastic',
996 'MonSpark',
997 'MonTools',
998 'Moreover',
999 'Morfeus Fucking Scanner',
1000 'Morning Paper',
1001 'MovableType',
1002 'mowser',
1003 'Mrcgiguy',
1004 'Mr\.4x3 Powered',
1005 'MS Web Services Client Protocol',
1006 'MSFrontPage',
1007 'mShots',
1008 'MuckRack\/',
1009 'muhstik-scan',
1010 'MVAClient',
1011 'MxToolbox\/',
1012 'myseosnapshot',
1013 'nagios',
1014 'Najdi\.si',
1015 'Name Intelligence',
1016 'NameFo\.com',
1017 'Nameprotect',
1018 'nationalarchives',
1019 'Navroad',
1020 'nbertaupete95',
1021 'NearSite',
1022 'Needle',
1023 'Nessus',
1024 'Net Vampire',
1025 'NetAnts',
1026 'NETCRAFT',
1027 'NetLyzer',
1028 'NetMechanic',
1029 'NetNewsWire',
1030 'Netpursual',
1031 'netresearch',
1032 'NetShelter ContentScan',
1033 'Netsparker',
1034 'NetSystemsResearch',
1035 'nettle',
1036 'NetTrack',
1037 'Netvibes',
1038 'NetZIP',
1039 'Neustar WPM',
1040 'NeutrinoAPI',
1041 'NewRelicPinger',
1042 'NewsBlur .*Finder',
1043 'NewsGator',
1044 'newsme',
1045 'newspaper\/',
1046 'Nexgate Ruby Client',
1047 'NG-Search',
1048 'nghttp2',
1049 'Nibbler',
1050 'NICErsPRO',
1051 'NihilScio',
1052 'Nikto',
1053 'nineconnections',
1054 'NLNZ_IAHarvester',
1055 'Nmap Scripting Engine',
1056 'node-fetch',
1057 'node-superagent',
1058 'node-urllib',
1059 'Nodemeter',
1060 'NodePing',
1061 'node\.io',
1062 'nominet\.org\.uk',
1063 'nominet\.uk',
1064 'Norton-Safeweb',
1065 'Notifixious',
1066 'notifyninja',
1067 'NotionEmbedder',
1068 'nuhk',
1069 'nutch',
1070 'Nuzzel',
1071 'nWormFeedFinder',
1072 'nyawc\/',
1073 'Nymesis',
1074 'NYU',
1075 'Observatory\/',
1076 'Ocelli\/',
1077 'Octopus',
1078 'oegp',
1079 'Offline Explorer',
1080 'Offline Navigator',
1081 'OgScrper',
1082 'okhttp',
1083 'omgili',
1084 'OMSC',
1085 'Online Domain Tools',
1086 'Open Source RSS',
1087 'OpenCalaisSemanticProxy',
1088 'Openfind',
1089 'OpenLinkProfiler',
1090 'Openstat\/',
1091 'OpenVAS',
1092 'OPPO A33',
1093 'Optimizer',
1094 'Orbiter',
1095 'OrgProbe\/',
1096 'orion-semantics',
1097 'Outlook-Express',
1098 'Outlook-iOS',
1099 'Owler',
1100 'Owlin',
1101 'ownCloud News',
1102 'ow\.ly',
1103 'OxfordCloudService',
1104 'page scorer',
1105 'Page Valet',
1106 'page2rss',
1107 'PageFreezer',
1108 'PageGrabber',
1109 'PagePeeker',
1110 'PageScorer',
1111 'Pagespeed\/',
1112 'PageThing',
1113 'page_verifier',
1114 'Panopta',
1115 'panscient',
1116 'Papa Foto',
1117 'parsijoo',
1118 'Pavuk',
1119 'PayPal IPN',
1120 'pcBrowser',
1121 'Pcore-HTTP',
1122 'PDF24 URL To PDF',
1123 'Pearltrees',
1124 'PECL::HTTP',
1125 'peerindex',
1126 'Peew',
1127 'PeoplePal',
1128 'Perlu -',
1129 'PhantomJS Screenshoter',
1130 'PhantomJS\/',
1131 'Photon\/',
1132 'php-requests',
1133 'phpservermon',
1134 'Pi-Monster',
1135 'Picscout',
1136 'Picsearch',
1137 'PictureFinder',
1138 'Pimonster',
1139 'Pingability',
1140 'PingAdmin\.Ru',
1141 'Pingdom',
1142 'Pingoscope',
1143 'PingSpot',
1144 'ping\.blo\.gs',
1145 'pinterest\.com',
1146 'Pixray',
1147 'Pizilla',
1148 'Plagger\/',
1149 'Pleroma ',
1150 'Ploetz \+ Zeller',
1151 'Plukkie',
1152 'plumanalytics',
1153 'PocketImageCache',
1154 'PocketParser',
1155 'Pockey',
1156 'PodcastAddict\/',
1157 'POE-Component-Client-HTTP',
1158 'Polymail\/',
1159 'Pompos',
1160 'Porkbun',
1161 'Port Monitor',
1162 'postano',
1163 'postfix-mta-sts-resolver',
1164 'PostmanRuntime',
1165 'postplanner\.com',
1166 'PostPost',
1167 'postrank',
1168 'PowerPoint\/',
1169 'Prebid',
1170 'Prerender',
1171 'Priceonomics Analysis Engine',
1172 'PrintFriendly',
1173 'PritTorrent',
1174 'Prlog',
1175 'probely\.com',
1176 'probethenet',
1177 'Project ?25499',
1178 'Project-Resonance',
1179 'prospectb2b',
1180 'Protopage',
1181 'ProWebWalker',
1182 'proximic',
1183 'PRTG Network Monitor',
1184 'pshtt, https scanning',
1185 'PTST ',
1186 'PTST\/[0-9]+',
1187 'pulsetic\.com',
1188 'Pump',
1189 'Python-httplib2',
1190 'python-httpx',
1191 'python-requests',
1192 'Python-urllib',
1193 'Qirina Hurdler',
1194 'QQDownload',
1195 'QrafterPro',
1196 'Qseero',
1197 'Qualidator',
1198 'QueryN Metasearch',
1199 'queuedriver',
1200 'quic-go-HTTP\/',
1201 'QuiteRSS',
1202 'Quora Link Preview',
1203 'Qwantify',
1204 'Radian6',
1205 'RadioPublicImageResizer',
1206 'Railgun\/',
1207 'RankActive',
1208 'RankFlex',
1209 'RankSonicSiteAuditor',
1210 'RapidLoad\/',
1211 'Re-re Studio',
1212 'ReactorNetty',
1213 'Readability',
1214 'RealDownload',
1215 'RealPlayer%20Downloader',
1216 'RebelMouse',
1217 'Recorder',
1218 'RecurPost\/',
1219 'redback\/',
1220 'ReederForMac',
1221 'Reeder\/',
1222 'ReGet',
1223 'RepoMonkey',
1224 'request\.js',
1225 'reqwest\/',
1226 'ResponseCodeTest',
1227 'RestSharp',
1228 'Riddler',
1229 'Rival IQ',
1230 'Robosourcer',
1231 'Robozilla',
1232 'ROI Hunter',
1233 'RPT-HTTPClient',
1234 'RSSMix\/',
1235 'RSSOwl',
1236 'RuxitSynthetic',
1237 'RyowlEngine',
1238 'safe-agent-scanner',
1239 'SalesIntelligent',
1240 'Saleslift',
1241 'SAP NetWeaver Application Server',
1242 'SauceNAO',
1243 'SBIder',
1244 'sc-downloader',
1245 'scalaj-http',
1246 'Scamadviser-Frontend',
1247 'ScanAlert',
1248 'scan\.lol',
1249 'Scoop',
1250 'scooter',
1251 'ScopeContentAG-HTTP-Client',
1252 'ScoutJet',
1253 'ScoutURLMonitor',
1254 'ScrapeBox Page Scanner',
1255 'Scrapy',
1256 'Screaming',
1257 'ScreenShotService',
1258 'Scrubby',
1259 'Scrutiny\/',
1260 'Search37',
1261 'searchenginepromotionhelp',
1262 'Searchestate',
1263 'SearchExpress',
1264 'SearchSight',
1265 'SearchWP',
1266 'search\.thunderstone',
1267 'Seeker',
1268 'semanticdiscovery',
1269 'semanticjuice',
1270 'Semiocast HTTP client',
1271 'Semrush',
1272 'Sendsay\.Ru',
1273 'sentry\/',
1274 'SEO Browser',
1275 'Seo Servis',
1276 'seo-nastroj\.cz',
1277 'seo4ajax',
1278 'Seobility',
1279 'SEOCentro',
1280 'SeoCheck',
1281 'seocompany',
1282 'SEOkicks',
1283 'SEOlizer',
1284 'Seomoz',
1285 'SEOprofiler',
1286 'seoscanners',
1287 'SEOsearch',
1288 'seositecheckup',
1289 'SEOstats',
1290 'servernfo',
1291 'sexsearcher',
1292 'Seznam',
1293 'Shelob',
1294 'Shodan',
1295 'Shoppimon',
1296 'ShopWiki',
1297 'ShortLinkTranslate',
1298 'shortURL lengthener',
1299 'shrinktheweb',
1300 'Sideqik',
1301 'Siege',
1302 'SimplePie',
1303 'SimplyFast',
1304 'Siphon',
1305 'SISTRIX',
1306 'Site Sucker',
1307 'Site-Shot\/',
1308 'Site24x7',
1309 'SiteBar',
1310 'Sitebeam',
1311 'Sitebulb\/',
1312 'SiteCondor',
1313 'SiteExplorer',
1314 'SiteGuardian',
1315 'Siteimprove',
1316 'SiteIndexed',
1317 'Sitemap(s)? Generator',
1318 'SitemapGenerator',
1319 'SiteMonitor',
1320 'Siteshooter B0t',
1321 'SiteSnagger',
1322 'SiteSucker',
1323 'SiteTruth',
1324 'Sitevigil',
1325 'sitexy\.com',
1326 'SkypeUriPreview',
1327 'Slack\/',
1328 'sli-systems\.com',
1329 'slider\.com',
1330 'slurp',
1331 'SlySearch',
1332 'SmartDownload',
1333 'SMRF URL Expander',
1334 'SMUrlExpander',
1335 'Snake',
1336 'Snappy',
1337 'SnapSearch',
1338 'Snarfer\/',
1339 'SniffRSS',
1340 'sniptracker',
1341 'Snoopy',
1342 'SnowHaze Search',
1343 'sogou web',
1344 'SortSite',
1345 'Sottopop',
1346 'sovereign\.ai',
1347 'SpaceBison',
1348 'SpamExperts',
1349 'Spammen',
1350 'Spanner',
1351 'Spawning-AI',
1352 'spaziodati',
1353 'SPDYCheck',
1354 'Specificfeeds',
1355 'SpeedKit',
1356 'speedy',
1357 'SPEng',
1358 'Spinn3r',
1359 'spray-can',
1360 'Sprinklr ',
1361 'spyonweb',
1362 'sqlmap',
1363 'Sqlworm',
1364 'Sqworm',
1365 'SSL Labs',
1366 'ssl-tools',
1367 'StackRambler',
1368 'Statastico\/',
1369 'Statically-',
1370 'StatusCake',
1371 'Steeler',
1372 'Stratagems Kumo',
1373 'Stripe\/',
1374 'Stroke\.cz',
1375 'StudioFACA',
1376 'StumbleUpon',
1377 'suchen',
1378 'Sucuri',
1379 'summify',
1380 'SuperHTTP',
1381 'Surphace Scout',
1382 'Suzuran',
1383 'swcd ',
1384 'Symfony BrowserKit',
1385 'Symfony2 BrowserKit',
1386 'Synapse\/',
1387 'Syndirella\/',
1388 'SynHttpClient-Built',
1389 'Sysomos',
1390 'sysscan',
1391 'Szukacz',
1392 'T0PHackTeam',
1393 'tAkeOut',
1394 'Tarantula\/',
1395 'Taringa UGC',
1396 'TarmotGezgin',
1397 'tchelebi\.io',
1398 'techiaith\.cymru',
1399 'Teleport',
1400 'Telesoft',
1401 'Telesphoreo',
1402 'Telesphorep',
1403 'Tenon\.io',
1404 'teoma',
1405 'terrainformatica',
1406 'Test Certificate Info',
1407 'testuri',
1408 'Tetrahedron',
1409 'TextRazor Downloader',
1410 'The Drop Reaper',
1411 'The Expert HTML Source Viewer',
1412 'The Intraformant',
1413 'The Knowledge AI',
1414 'theinternetrules',
1415 'TheNomad',
1416 'Thinklab',
1417 'Thumbor',
1418 'Thumbshots',
1419 'ThumbSniper',
1420 'timewe\.net',
1421 'TinEye',
1422 'Tiny Tiny RSS',
1423 'TLSProbe\/',
1424 'Toata',
1425 'topster',
1426 'touche\.com',
1427 'Traackr\.com',
1428 'tracemyfile',
1429 'Trackuity',
1430 'TrapitAgent',
1431 'Trendiction',
1432 'Trendsmap',
1433 'trendspottr',
1434 'truwoGPS',
1435 'TryJsoup',
1436 'TulipChain',
1437 'Turingos',
1438 'Turnitin',
1439 'tweetedtimes',
1440 'Tweetminster',
1441 'Tweezler\/',
1442 'twibble',
1443 'Twice',
1444 'Twikle',
1445 'Twingly',
1446 'Twisted PageGetter',
1447 'Typhoeus',
1448 'ubermetrics-technologies',
1449 'uclassify',
1450 'UdmSearch',
1451 'ultimate_sitemap_parser',
1452 'unchaos',
1453 'unirest-java',
1454 'UniversalFeedParser',
1455 'unshortenit',
1456 'Unshorten\.It',
1457 'Untiny',
1458 'UnwindFetchor',
1459 'updated',
1460 'updown\.io daemon',
1461 'Upflow',
1462 'Uptimia',
1463 'URL Verifier',
1464 'Urlcheckr',
1465 'URLitor',
1466 'urlresolver',
1467 'Urlstat',
1468 'URLTester',
1469 'UrlTrends Ranking Updater',
1470 'URLy Warning',
1471 'URLy\.Warning',
1472 'URL\/Emacs',
1473 'Vacuum',
1474 'Vagabondo',
1475 'VB Project',
1476 'vBSEO',
1477 'VCI',
1478 'Verity',
1479 'via ggpht\.com GoogleImageProxy',
1480 'Virusdie',
1481 'visionutils',
1482 'Visual Rights Group',
1483 'vkShare',
1484 'VoidEYE',
1485 'Voil',
1486 'voltron',
1487 'voyager\/',
1488 'VSAgent\/',
1489 'VSB-TUO\/',
1490 'Vulnbusters Meter',
1491 'VYU2',
1492 'w3af\.org',
1493 'W3C-checklink',
1494 'W3C-mobileOK',
1495 'W3C_Unicorn',
1496 'WAC-OFU',
1497 'WakeletLinkExpander',
1498 'WallpapersHD',
1499 'Wallpapers\/[0-9]+',
1500 'wangling',
1501 'Wappalyzer',
1502 'WatchMouse',
1503 'WbSrch\/',
1504 'WDT\.io',
1505 'Web Auto',
1506 'Web Collage',
1507 'Web Enhancer',
1508 'Web Fetch',
1509 'Web Fuck',
1510 'Web Pix',
1511 'Web Sauger',
1512 'Web spyder',
1513 'Web Sucker',
1514 'web-capture\.net',
1515 'Web-sniffer',
1516 'Webalta',
1517 'Webauskunft',
1518 'WebAuto',
1519 'WebCapture',
1520 'WebClient\/',
1521 'webcollage',
1522 'WebCookies',
1523 'WebCopier',
1524 'WebCorp',
1525 'WebDataStats',
1526 'WebDoc',
1527 'WebEnhancer',
1528 'WebFetch',
1529 'WebFuck',
1530 'WebGazer',
1531 'WebGo IS',
1532 'WebImageCollector',
1533 'WebImages',
1534 'WebIndex',
1535 'webkit2png',
1536 'WebLeacher',
1537 'webmastercoffee',
1538 'webmon ',
1539 'WebPix',
1540 'WebReaper',
1541 'WebSauger',
1542 'webscreenie',
1543 'Webshag',
1544 'Webshot',
1545 'Website Quester',
1546 'websitepulse agent',
1547 'WebsiteQuester',
1548 'Websnapr',
1549 'WebSniffer',
1550 'Webster',
1551 'WebStripper',
1552 'WebSucker',
1553 'webtech\/',
1554 'WebThumbnail',
1555 'Webthumb\/',
1556 'WebWhacker',
1557 'WebZIP',
1558 'WeLikeLinks',
1559 'WEPA',
1560 'WeSEE',
1561 'wf84',
1562 'Wfuzz\/',
1563 'wget',
1564 'WhatCMS',
1565 'WhatsApp',
1566 'WhatsMyIP',
1567 'WhatWeb',
1568 'WhereGoes\?',
1569 'Whibse',
1570 'WhoAPI\/',
1571 'WhoRunsCoinHive',
1572 'Whynder Magnet',
1573 'Windows-RSS-Platform',
1574 'WinHttp-Autoproxy-Service',
1575 'WinHTTP\/',
1576 'WinPodder',
1577 'wkhtmlto',
1578 'wmtips',
1579 'Woko',
1580 'Wolfram HTTPClient',
1581 'woorankreview',
1582 'WordPress\/',
1583 'WordupinfoSearch',
1584 'Word\/',
1585 'worldping-api',
1586 'wotbox',
1587 'WP Engine Install Performance API',
1588 'wpif',
1589 'wprecon\.com survey',
1590 'WPScan',
1591 'wscheck',
1592 'Wtrace',
1593 'WWW-Collector-E',
1594 'WWW-Mechanize',
1595 'WWW::Document',
1596 'WWW::Mechanize',
1597 'WWWOFFLE',
1598 'www\.monitor\.us',
1599 'x09Mozilla',
1600 'x22Mozilla',
1601 'XaxisSemanticsClassifier',
1602 'XenForo\/',
1603 'Xenu Link Sleuth',
1604 'XING-contenttabreceiver',
1605 'xpymep([0-9]?)\.exe',
1606 'Y!J-[A-Z][A-Z][A-Z]',
1607 'Yaanb',
1608 'yacy',
1609 'Yahoo Link Preview',
1610 'YahooCacheSystem',
1611 'YahooMailProxy',
1612 'YahooYSMcm',
1613 'YandeG',
1614 'Yandex(?!Search)',
1615 'yanga',
1616 'yeti',
1617 'Yo-yo',
1618 'Yoleo Consumer',
1619 'yomins\.com',
1620 'yoogliFetchAgent',
1621 'YottaaMonitor',
1622 'Your-Website-Sucks',
1623 'yourls\.org',
1624 'YoYs\.net',
1625 'YP\.PL',
1626 'Zabbix',
1627 'Zade',
1628 'Zao',
1629 'Zapier',
1630 'Zauba',
1631 'Zemanta Aggregator',
1632 'Zend\\\\Http\\\\Client',
1633 'Zend_Http_Client',
1634 'Zermelo',
1635 'Zeus ',
1636 'zgrab',
1637 'ZnajdzFoto',
1638 'ZnHTTP',
1639 'Zombie\.js',
1640 'Zoom\.Mac',
1641 'ZoteroTranslationServer',
1642 'ZyBorg',
1643 '[a-z0-9\-_]*(bot|crawl|headless|archiver|transcoder|spider|uptime|validator|fetcher|cron|checker|reader|extractor|monitoring|analyzer|scraper)'
1644 ];
1645 }
1646
1647 /**
1648 * Return the list of strings to remove from the user agent before running the crawler regex.
1649 *
1650 * @return array
1651 */
1652 public function get_exclusions_list() {
1653 return [
1654 'Safari.[\d\.]*',
1655 'Firefox.[\d\.]*',
1656 ' Chrome.[\d\.]*',
1657 'Chromium.[\d\.]*',
1658 'MSIE.[\d\.]',
1659 'Opera\/[\d\.]*',
1660 'Mozilla.[\d\.]*',
1661 'AppleWebKit.[\d\.]*',
1662 'Trident.[\d\.]*',
1663 'Windows NT.[\d\.]*',
1664 'Android [\d\.]*',
1665 'Macintosh.',
1666 'Ubuntu',
1667 'Linux',
1668 '[ ]Intel',
1669 'Mac OS X [\d_]*',
1670 '(like )?Gecko(.[\d\.]*)?',
1671 'KHTML,',
1672 'CriOS.[\d\.]*',
1673 'CPU iPhone OS ([0-9_])* like Mac OS X',
1674 'CPU OS ([0-9_])* like Mac OS X',
1675 'iPod',
1676 'compatible',
1677 'x86_..',
1678 'i686',
1679 'x64',
1680 'X11',
1681 'rv:[\d\.]*',
1682 'Version.[\d\.]*',
1683 'WOW64',
1684 'Win64',
1685 'Dalvik.[\d\.]*',
1686 ' \.NET CLR [\d\.]*',
1687 'Presto.[\d\.]*',
1688 'Media Center PC',
1689 'BlackBerry',
1690 'Build',
1691 'Opera Mini\/\d{1,2}\.\d{1,2}\.[\d\.]*\/\d{1,2}\.',
1692 'Opera',
1693 ' \.NET[\d\.]*',
1694 'cubot',
1695 '; M bot',
1696 '; CRONO',
1697 '; B bot',
1698 '; IDbot',
1699 '; ID bot',
1700 '; POWER BOT',
1701 'OCTOPUS-CORE',
1702 'htc_botdugls',
1703 'super\/\d+\/Android\/\d+',
1704 '"Yandex"',
1705 'YandexModule2'
1706 ];
1707 }
1708
1709 /**
1710 * Return all possible HTTP headers that represent the User-Agent string.
1711 *
1712 * @return array
1713 */
1714 public function get_headers_list() {
1715 return [
1716 // The default User-Agent string.
1717 'HTTP_USER_AGENT',
1718 // Header can occur on devices using Opera Mini.
1719 'HTTP_X_OPERAMINI_PHONE_UA',
1720 // Vodafone specific header: http://www.seoprinciple.com/mobile-web-community-still-angry-at-vodafone/24/
1721 'HTTP_X_DEVICE_USER_AGENT',
1722 'HTTP_X_ORIGINAL_USER_AGENT',
1723 'HTTP_X_SKYFIRE_PHONE',
1724 'HTTP_X_BOLT_PHONE_UA',
1725 'HTTP_DEVICE_STOCK_UA',
1726 'HTTP_X_UCBROWSER_DEVICE_UA',
1727 // Sometimes, bots (especially Google) use a genuine user agent, but fill this header in with their email address
1728 'HTTP_FROM',
1729 'HTTP_X_SCANNER', // Seen in use by Netsparker
1730 // Observed that Facebook will omit identifying itself in User Agent headers but will persist HeadlessChrome in this header for mobile requests
1731 'HTTP_SEC_CH_UA'
1732 ];
1733 }
1734 }
1735