Wie erkennt man Suchmaschinen-Bots mit PHP?


Antworten:


74

Hier ist ein Suchmaschinenverzeichnis mit Spinnennamen

Dann $_SERVER['HTTP_USER_AGENT'];überprüfen Sie, ob der Agent die Spinne ist.

if(strstr(strtolower($_SERVER['HTTP_USER_AGENT']), "googlebot"))
{
    // what to do
}

if ((eregi ("yahoo", $ this-> USER_AGENT)) && (eregi ("slurp", $ this-> USER_AGENT)) {$ this-> Browser = "Yahoo! Slurp"; $ this-> Type = "robot"; } Wird das gut funktionieren?
grandioser

3
Da strpos 0 (die Position) zurückgeben kann, strstr bei einem Fehler FALSE zurückgibt, können Sie strpos verwenden, wenn Sie am Ende eine! == false-Prüfung hinzufügen.
Ólafur Waage

2
Ähm, strposkehrt auch FALSEnach dem Scheitern zurück. Es ist jedoch schneller und effizienter (keine Vorverarbeitung und kein O (m) -Speicher).
Damon

6
Was ist mit gefälschten Useragenten?!

2
Und was wäre, wenn jemand seinen Benutzeragenten mit einem falschen Namen ändern und ihn wie "Googlebot" nennen könnte? Ich denke, die Überprüfung des IP-Bereichs ist vertrauenswürdiger!
Mojtaba Rezaeian

235

Ich verwende den folgenden Code, der anscheinend gut funktioniert:

function _bot_detected() {

  return (
    isset($_SERVER['HTTP_USER_AGENT'])
    && preg_match('/bot|crawl|slurp|spider|mediapartners/i', $_SERVER['HTTP_USER_AGENT'])
  );
}

Update 16-06-2017 https://support.google.com/webmasters/answer/1061943?hl=de

Mediapartner hinzugefügt


2
Geht dies davon aus, dass sich Bots als solche offenbaren?
Jeromie Devera

2
Stimmen Sie ab, User Agent kann in Chrome-Einstellungen geändert werden, Firefox,
Barwnikk

23
Ja, der Useragent kann geändert werden, aber wenn jemand ihn so ändert, dass er "Bot", "Crawl", "Slurp" oder "Spider" enthält, weiß er, was auf ihn zukommt. Es hängt auch vom Nutzen ab. Ich würde dies nicht verwenden, um das gesamte CSS zu entfernen, aber ich würde dies verwenden, um keine Cookies zu speichern, die Standortprotokollierung zu ignorieren oder eine Zielseite zu überspringen.
JonShipman

2
Ist mir nicht jemand einverstanden, dass dies ein Weg zu einer großen Auswahl ist?
Daan

Ich habe Ihre Funktion jetzt seit mehr als einem Tag verwendet und sie scheint zu funktionieren. Aber ich bin mir nicht sicher. Wie kann ich Test-Bots senden, um zu testen, ob es funktioniert?
FarrisFahad

19

Überprüfen Sie die $_SERVER['HTTP_USER_AGENT']Zeichenfolge auf einige der hier aufgeführten Zeichenfolgen:

http://www.useragentstring.com/pages/useragentstring.php

Oder genauer gesagt für Crawler:

http://www.useragentstring.com/pages/useragentstring.php?typ=Crawler

Wenn Sie die Anzahl der Besuche der meisten gängigen Suchmaschinen-Crawler protokollieren möchten, können Sie diese verwenden

$interestingCrawlers = array( 'google', 'yahoo' );
$pattern = '/(' . implode('|', $interestingCrawlers) .')/';
$matches = array();
$numMatches = preg_match($pattern, strtolower($_SERVER['HTTP_USER_AGENT']), $matches, 'i');
if($numMatches > 0) // Found a match
{
  // $matches[1] contains an array of all text matches to either 'google' or 'yahoo'
}

16

Sie können überprüfen, ob es sich um eine Suchmaschine mit dieser Funktion handelt:

<?php
function crawlerDetect($USER_AGENT)
{
$crawlers = array(
'Google' => 'Google',
'MSN' => 'msnbot',
      'Rambler' => 'Rambler',
      'Yahoo' => 'Yahoo',
      'AbachoBOT' => 'AbachoBOT',
      'accoona' => 'Accoona',
      'AcoiRobot' => 'AcoiRobot',
      'ASPSeek' => 'ASPSeek',
      'CrocCrawler' => 'CrocCrawler',
      'Dumbot' => 'Dumbot',
      'FAST-WebCrawler' => 'FAST-WebCrawler',
      'GeonaBot' => 'GeonaBot',
      'Gigabot' => 'Gigabot',
      'Lycos spider' => 'Lycos',
      'MSRBOT' => 'MSRBOT',
      'Altavista robot' => 'Scooter',
      'AltaVista robot' => 'Altavista',
      'ID-Search Bot' => 'IDBot',
      'eStyle Bot' => 'eStyle',
      'Scrubby robot' => 'Scrubby',
      'Facebook' => 'facebookexternalhit',
  );
  // to get crawlers string used in function uncomment it
  // it is better to save it in string than use implode every time
  // global $crawlers
   $crawlers_agents = implode('|',$crawlers);
  if (strpos($crawlers_agents, $USER_AGENT) === false)
      return false;
    else {
    return TRUE;
    }
}
?>

Dann können Sie es wie folgt verwenden:

<?php $USER_AGENT = $_SERVER['HTTP_USER_AGENT'];
  if(crawlerDetect($USER_AGENT)) return "no need to lang redirection";?>

2
Ich denke, diese Liste ist veraltet, ich sehe kein "Slurp" zum Beispiel, das ist Yahoo, es ist Spider Help.yahoo.com/kb/SLN22600.html
Daan

11

Ich benutze dies, um Bots zu erkennen:

if (preg_match('/bot|crawl|curl|dataprovider|search|get|spider|find|java|majesticsEO|google|yahoo|teoma|contaxe|yandex|libwww-perl|facebookexternalhit/i', $_SERVER['HTTP_USER_AGENT'])) {
    // is bot
}

Außerdem verwende ich eine Whitelist, um unerwünschte Bots zu blockieren:

if (preg_match('/apple|baidu|bingbot|facebookexternalhit|googlebot|-google|ia_archiver|msnbot|naverbot|pingdom|seznambot|slurp|teoma|twitter|yandex|yeti/i', $_SERVER['HTTP_USER_AGENT'])) {
    // allowed bot
}

Ein unerwünschter Bot (= falsch positiver Benutzer) kann dann ein Captcha lösen, um sich für 24 Stunden zu entsperren. Und da niemand dieses Captcha löst, weiß ich, dass es keine falsch positiven Ergebnisse erzeugt. Die Bot-Erkennung scheint also perfekt zu funktionieren.

Hinweis: Meine Whitelist basiert auf Facebooks robots.txt .


Sie haben einen Abschluss )in Ihrem ersten Code vergessen .
Ludo - Off the record

10

Da jeder Client den Benutzeragenten auf das einstellen kann, was er möchte, ist die Suche nach "Googlebot", "Bingbot" usw. nur die halbe Miete.

Der zweite Teil überprüft die IP des Clients. Früher mussten IP-Listen gepflegt werden. Alle Listen, die Sie online finden, sind veraltet. Die Top-Suchmaschinen unterstützen offiziell die Überprüfung über DNS, wie von Google https://support.google.com/webmasters/answer/80553 und Bing http://www.bing.com/webmaster/help/how-to-verify erläutert -bingbot-3905dc26

Führen Sie zunächst eine Reverse-DNS-Suche der Client-IP durch. Für Google bringt dies einen Hostnamen unter googlebot.com, für Bing unter search.msn.com. Da dann jemand ein solches Reverse-DNS für seine IP festlegen könnte, müssen Sie dies mit einer Forward-DNS-Suche für diesen Hostnamen überprüfen. Wenn die resultierende IP mit der des Besuchers der Site identisch ist, ist es sicher ein Crawler dieser Suchmaschine.

Ich habe eine Bibliothek in Java geschrieben, die diese Überprüfungen für Sie durchführt. Fühlen Sie sich frei, es auf PHP zu portieren. Es ist auf GitHub: https://github.com/optimaize/webcrawler-verifier


1
Alle anderen Antworten mit User-Agent-Zeichenfolgen sind nur zur Hälfte vorhanden. Beeindruckend.
mlissner

1
Es gibt viele Kommentare darüber, dass die Prüfung durch Benutzeragenten nur die Hälfte der Prüfung ist. Dies ist wahr, aber denken Sie daran, dass die vollständige DNS- und Reverse-DNS-Suche enorme Auswirkungen auf die Leistung hat. Es hängt alles von der Sicherheit ab, die Sie benötigen, um Ihren Anwendungsfall zu unterstützen. Dies ist zu 100% sicher auf Kosten der Leistung. Sie müssen entscheiden, welches Gleichgewicht (und damit die beste Lösung) für Ihre Situation geeignet ist.
Brady Emerson

Es gibt keine "großen Auswirkungen auf die Leistung". Erstens wird die umgekehrte DNS-Suche nur für Besucher durchgeführt, die sich als Suchmaschine identifizieren. Alle Menschen sind überhaupt nicht betroffen. Diese Suche wird dann nur einmal pro IP durchgeführt. Das Ergebnis wird zwischengespeichert. Suchmaschinen verwenden sehr lange dieselben IP-Bereiche und treffen normalerweise nur eine Site mit einer oder wenigen IPs. Außerdem: Sie könnten die Validierung verzögert durchführen. Lassen Sie die erste Anfrage durch und validieren Sie sie im Hintergrund. Und wenn negativ, verhindern Sie aufeinanderfolgende Anfragen. (Ich würde davon abraten, da Erntemaschinen jetzt große IP-Pools haben ...)
Fabian Kessler

Gibt es eine ähnliche Bibliothek in PHP geschrieben?
Userlond

8

Ich benutze diese Funktion ... ein Teil des regulären Ausdrucks stammt von Prestashop, aber ich habe noch einen Bot hinzugefügt.

    public function isBot()
{
    $bot_regex = '/BotLink|bingbot|AhrefsBot|ahoy|AlkalineBOT|anthill|appie|arale|araneo|AraybOt|ariadne|arks|ATN_Worldwide|Atomz|bbot|Bjaaland|Ukonline|borg\-bot\/0\.9|boxseabot|bspider|calif|christcrawler|CMC\/0\.01|combine|confuzzledbot|CoolBot|cosmos|Internet Cruiser Robot|cusco|cyberspyder|cydralspider|desertrealm, desert realm|digger|DIIbot|grabber|downloadexpress|DragonBot|dwcp|ecollector|ebiness|elfinbot|esculapio|esther|fastcrawler|FDSE|FELIX IDE|ESI|fido|H�m�h�kki|KIT\-Fireball|fouineur|Freecrawl|gammaSpider|gazz|gcreep|golem|googlebot|griffon|Gromit|gulliver|gulper|hambot|havIndex|hotwired|htdig|iajabot|INGRID\/0\.1|Informant|InfoSpiders|inspectorwww|irobot|Iron33|JBot|jcrawler|Teoma|Jeeves|jobo|image\.kapsi\.net|KDD\-Explorer|ko_yappo_robot|label\-grabber|larbin|legs|Linkidator|linkwalker|Lockon|logo_gif_crawler|marvin|mattie|mediafox|MerzScope|NEC\-MeshExplorer|MindCrawler|udmsearch|moget|Motor|msnbot|muncher|muninn|MuscatFerret|MwdSearch|sharp\-info\-agent|WebMechanic|NetScoop|newscan\-online|ObjectsSearch|Occam|Orbsearch\/1\.0|packrat|pageboy|ParaSite|patric|pegasus|perlcrawler|phpdig|piltdownman|Pimptrain|pjspider|PlumtreeWebAccessor|PortalBSpider|psbot|Getterrobo\-Plus|Raven|RHCS|RixBot|roadrunner|Robbie|robi|RoboCrawl|robofox|Scooter|Search\-AU|searchprocess|Senrigan|Shagseeker|sift|SimBot|Site Valet|skymob|SLCrawler\/2\.0|slurp|ESI|snooper|solbot|speedy|spider_monkey|SpiderBot\/1\.0|spiderline|nil|suke|http:\/\/www\.sygol\.com|tach_bw|TechBOT|templeton|titin|topiclink|UdmSearch|urlck|Valkyrie libwww\-perl|verticrawl|Victoria|void\-bot|Voyager|VWbot_K|crawlpaper|wapspider|WebBandit\/1\.0|webcatcher|T\-H\-U\-N\-D\-E\-R\-S\-T\-O\-N\-E|WebMoose|webquest|webreaper|webs|webspider|WebWalker|wget|winona|whowhere|wlm|WOLP|WWWC|none|XGET|Nederland\.zoek|AISearchBot|woriobot|NetSeer|Nutch|YandexBot|YandexMobileBot|SemrushBot|FatBot|MJ12bot|DotBot|AddThis|baiduspider|SeznamBot|mod_pagespeed|CCBot|openstat.ru\/Bot|m2e/i';
    $userAgent = empty($_SERVER['HTTP_USER_AGENT']) ? FALSE : $_SERVER['HTTP_USER_AGENT'];
    $isBot = !$userAgent || preg_match($bot_regex, $userAgent);

    return $isBot;
}

Achten Sie auf jeden Fall darauf, dass einige Bots einen Browser wie einen Benutzeragenten verwenden, um ihre Identität zu fälschen
(ich habe viele russische IP-Adressen, die dieses Verhalten auf meiner Website aufweisen).

Eine Besonderheit der meisten Bot ist, dass sie keine Cookies enthalten und daher keine Sitzung mit ihnen verbunden ist.
(Ich bin nicht sicher, wie, aber dies ist sicher der beste Weg, um sie zu verfolgen)


6

Sie können den Benutzeragenten ( $_SERVER['HTTP_USER_AGENT']) analysieren oder die IP-Adresse ( $_SERVER['REMOTE_ADDR']) des Clients mit einer Liste von IP-Adressen von Suchmaschinen-Bots vergleichen .


2
Die IP-Liste ist sicherer, wenn Sie sicherstellen möchten, dass der Name des Benutzeragenten wirklich ein Suchmaschinen-Bot ist, da es möglich ist, gefälschte Benutzeragenten nach Namen zu erstellen.
Mojtaba Rezaeian


4
 <?php // IPCLOACK HOOK
if (CLOAKING_LEVEL != 4) {
    $lastupdated = date("Ymd", filemtime(FILE_BOTS));
    if ($lastupdated != date("Ymd")) {
        $lists = array(
        'http://labs.getyacg.com/spiders/google.txt',
        'http://labs.getyacg.com/spiders/inktomi.txt',
        'http://labs.getyacg.com/spiders/lycos.txt',
        'http://labs.getyacg.com/spiders/msn.txt',
        'http://labs.getyacg.com/spiders/altavista.txt',
        'http://labs.getyacg.com/spiders/askjeeves.txt',
        'http://labs.getyacg.com/spiders/wisenut.txt',
        );
        foreach($lists as $list) {
            $opt .= fetch($list);
        }
        $opt = preg_replace("/(^[\r\n]*|[\r\n]+)[\s\t]*[\r\n]+/", "\n", $opt);
        $fp =  fopen(FILE_BOTS,"w");
        fwrite($fp,$opt);
        fclose($fp);
    }
    $ip = isset($_SERVER['REMOTE_ADDR']) ? $_SERVER['REMOTE_ADDR'] : '';
    $ref = isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : '';
    $agent = isset($_SERVER['HTTP_USER_AGENT']) ? $_SERVER['HTTP_USER_AGENT'] : '';
    $host = strtolower(gethostbyaddr($ip));
    $file = implode(" ", file(FILE_BOTS));
    $exp = explode(".", $ip);
    $class = $exp[0].'.'.$exp[1].'.'.$exp[2].'.';
    $threshold = CLOAKING_LEVEL;
    $cloak = 0;
    if (stristr($host, "googlebot") && stristr($host, "inktomi") && stristr($host, "msn")) {
        $cloak++;
    }
    if (stristr($file, $class)) {
        $cloak++;
    }
    if (stristr($file, $agent)) {
        $cloak++;
    }
    if (strlen($ref) > 0) {
        $cloak = 0;
    }

    if ($cloak >= $threshold) {
        $cloakdirective = 1;
    } else {
        $cloakdirective = 0;
    }
}
?>

Das wäre der ideale Weg, um sich für Spinnen zu tarnen. Es stammt aus einem Open-Source-Skript namens [YACG] - http://getyacg.com

Benötigt ein bisschen Arbeit, aber definitiv den richtigen Weg.


2

Ich habe eine gute und schnelle Funktion dafür gemacht

function is_bot(){

        if(isset($_SERVER['HTTP_USER_AGENT']))
        {
            return preg_match('/rambler|abacho|acoi|accona|aspseek|altavista|estyle|scrubby|lycos|geona|ia_archiver|alexa|sogou|skype|facebook|twitter|pinterest|linkedin|naver|bing|google|yahoo|duckduckgo|yandex|baidu|teoma|xing|java\/1.7.0_45|bot|crawl|slurp|spider|mediapartners|\sask\s|\saol\s/i', $_SERVER['HTTP_USER_AGENT']);
        }

        return false;
    }

Dies deckt 99% aller möglichen Bots, Suchmaschinen usw. ab.


1

Ich benutze diesen Code, ziemlich gut. Sie werden sehr leicht wissen, dass Benutzeragenten Ihre Website besucht haben. Dieser Code öffnet eine Datei und schreibt den user_agent in die Datei. Sie können diese Datei jeden Tag überprüfen, indem Sie sich yourdomain.com/useragent.txtüber neue user_agents informieren und sie in den Zustand der if-Klausel versetzen.

$user_agent = strtolower($_SERVER['HTTP_USER_AGENT']);
if(!preg_match("/Googlebot|MJ12bot|yandexbot/i", $user_agent)){
    // if not meet the conditions then
    // do what you need

    // here open a file and write the user_agent down the file. You can check each day this file useragent.txt and know about new user_agents and put them in your condition of if clause
    if($user_agent!=""){
        $myfile = fopen("useragent.txt", "a") or die("Unable to open file useragent.txt!");
        fwrite($myfile, $user_agent);
        $user_agent = "\n";
        fwrite($myfile, $user_agent);
        fclose($myfile);
    }
}

Dies ist der Inhalt von useragent.txt

Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)
Mozilla/5.0 (compatible; MJ12bot/v1.4.6; http://mj12bot.com/)Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)
Mozilla/5.0 (Linux; Android 6.0.1; Nexus 5X Build/MMB29P) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.96 Mobile Safari/537.36 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)mozilla/5.0 (compatible; yandexbot/3.0; +http://yandex.com/bots)
mozilla/5.0 (compatible; yandexbot/3.0; +http://yandex.com/bots)
mozilla/5.0 (compatible; yandexbot/3.0; +http://yandex.com/bots)
mozilla/5.0 (compatible; yandexbot/3.0; +http://yandex.com/bots)
mozilla/5.0 (compatible; yandexbot/3.0; +http://yandex.com/bots)
mozilla/5.0 (iphone; cpu iphone os 9_3 like mac os x) applewebkit/601.1.46 (khtml, like gecko) version/9.0 mobile/13e198 safari/601.1
mozilla/5.0 (windows nt 6.1; wow64) applewebkit/537.36 (khtml, like gecko) chrome/53.0.2785.143 safari/537.36
mozilla/5.0 (compatible; linkdexbot/2.2; +http://www.linkdex.com/bots/)
mozilla/5.0 (windows nt 6.1; wow64; rv:49.0) gecko/20100101 firefox/49.0
mozilla/5.0 (windows nt 6.1; wow64; rv:33.0) gecko/20100101 firefox/33.0
mozilla/5.0 (windows nt 6.1; wow64; rv:49.0) gecko/20100101 firefox/49.0
mozilla/5.0 (windows nt 6.1; wow64; rv:33.0) gecko/20100101 firefox/33.0
mozilla/5.0 (windows nt 6.1; wow64; rv:49.0) gecko/20100101 firefox/49.0
mozilla/5.0 (windows nt 6.1; wow64; rv:33.0) gecko/20100101 firefox/33.0
mozilla/5.0 (windows nt 6.1; wow64; rv:49.0) gecko/20100101 firefox/49.0
mozilla/5.0 (windows nt 6.1; wow64; rv:33.0) gecko/20100101 firefox/33.0
mozilla/5.0 (windows nt 6.1; wow64) applewebkit/537.36 (khtml, like gecko) chrome/53.0.2785.143 safari/537.36
mozilla/5.0 (windows nt 6.1; wow64) applewebkit/537.36 (khtml, like gecko) chrome/53.0.2785.143 safari/537.36
mozilla/5.0 (compatible; baiduspider/2.0; +http://www.baidu.com/search/spider.html)
zoombot (linkbot 1.0 http://suite.seozoom.it/bot.html)
mozilla/5.0 (windows nt 10.0; wow64) applewebkit/537.36 (khtml, like gecko) chrome/44.0.2403.155 safari/537.36 opr/31.0.1889.174
mozilla/5.0 (windows nt 10.0; wow64) applewebkit/537.36 (khtml, like gecko) chrome/44.0.2403.155 safari/537.36 opr/31.0.1889.174
sogou web spider/4.0(+http://www.sogou.com/docs/help/webmasters.htm#07)
mozilla/5.0 (windows nt 10.0; wow64) applewebkit/537.36 (khtml, like gecko) chrome/44.0.2403.155 safari/537.36 opr/31.0.1889.174

Was wäre dein (if_clause) String-Stück dafür? mozilla / 5.0 (iphone; cpu iphone os 9_3 wie mac os x) applewebkit / 601.1.46 (khtml, wie gecko) version / 9.0 mobile / 13e198 safari / 601.1
Durchschnittlicher Joe

1

100% funktionierender Bot-Detektor. Es funktioniert erfolgreich auf meiner Website.

function isBotDetected() {

    if ( preg_match('/abacho|accona|AddThis|AdsBot|ahoy|AhrefsBot|AISearchBot|alexa|altavista|anthill|appie|applebot|arale|araneo|AraybOt|ariadne|arks|aspseek|ATN_Worldwide|Atomz|baiduspider|baidu|bbot|bingbot|bing|Bjaaland|BlackWidow|BotLink|bot|boxseabot|bspider|calif|CCBot|ChinaClaw|christcrawler|CMC\/0\.01|combine|confuzzledbot|contaxe|CoolBot|cosmos|crawler|crawlpaper|crawl|curl|cusco|cyberspyder|cydralspider|dataprovider|digger|DIIbot|DotBot|downloadexpress|DragonBot|DuckDuckBot|dwcp|EasouSpider|ebiness|ecollector|elfinbot|esculapio|ESI|esther|eStyle|Ezooms|facebookexternalhit|facebook|facebot|fastcrawler|FatBot|FDSE|FELIX IDE|fetch|fido|find|Firefly|fouineur|Freecrawl|froogle|gammaSpider|gazz|gcreep|geona|Getterrobo-Plus|get|girafabot|golem|googlebot|\-google|grabber|GrabNet|griffon|Gromit|gulliver|gulper|hambot|havIndex|hotwired|htdig|HTTrack|ia_archiver|iajabot|IDBot|Informant|InfoSeek|InfoSpiders|INGRID\/0\.1|inktomi|inspectorwww|Internet Cruiser Robot|irobot|Iron33|JBot|jcrawler|Jeeves|jobo|KDD\-Explorer|KIT\-Fireball|ko_yappo_robot|label\-grabber|larbin|legs|libwww-perl|linkedin|Linkidator|linkwalker|Lockon|logo_gif_crawler|Lycos|m2e|majesticsEO|marvin|mattie|mediafox|mediapartners|MerzScope|MindCrawler|MJ12bot|mod_pagespeed|moget|Motor|msnbot|muncher|muninn|MuscatFerret|MwdSearch|NationalDirectory|naverbot|NEC\-MeshExplorer|NetcraftSurveyAgent|NetScoop|NetSeer|newscan\-online|nil|none|Nutch|ObjectsSearch|Occam|openstat.ru\/Bot|packrat|pageboy|ParaSite|patric|pegasus|perlcrawler|phpdig|piltdownman|Pimptrain|pingdom|pinterest|pjspider|PlumtreeWebAccessor|PortalBSpider|psbot|rambler|Raven|RHCS|RixBot|roadrunner|Robbie|robi|RoboCrawl|robofox|Scooter|Scrubby|Search\-AU|searchprocess|search|SemrushBot|Senrigan|seznambot|Shagseeker|sharp\-info\-agent|sift|SimBot|Site Valet|SiteSucker|skymob|SLCrawler\/2\.0|slurp|snooper|solbot|speedy|spider_monkey|SpiderBot\/1\.0|spiderline|spider|suke|tach_bw|TechBOT|TechnoratiSnoop|templeton|teoma|titin|topiclink|twitterbot|twitter|UdmSearch|Ukonline|UnwindFetchor|URL_Spider_SQL|urlck|urlresolver|Valkyrie libwww\-perl|verticrawl|Victoria|void\-bot|Voyager|VWbot_K|wapspider|WebBandit\/1\.0|webcatcher|WebCopier|WebFindBot|WebLeacher|WebMechanic|WebMoose|webquest|webreaper|webspider|webs|WebWalker|WebZip|wget|whowhere|winona|wlm|WOLP|woriobot|WWWC|XGET|xing|yahoo|YandexBot|YandexMobileBot|yandex|yeti|Zeus/i', $_SERVER['HTTP_USER_AGENT'])
    ) {
        return true; // 'Above given bots detected'
    }

    return false;

} // End :: isBotDetected()

1

Wenn Sie GOOGLE-Engine-Bots wirklich erkennen müssen, sollten Sie sich niemals auf die Adresse "user_agent" oder "IP" verlassen, da "user_agent" gemäß den Angaben von Google in: Überprüfen von Googlebot geändert werden kann

So überprüfen Sie Googlebot als Anrufer:

1. Führen Sie mit dem Befehl host eine Reverse-DNS- Suche für die IP-Adresse aus Ihren Protokollen aus.

2.Überprüfen Sie, ob sich der Domainname in googlebot.com oder google.com befindet

3. Führen Sie eine DNS-Weiterleitungssuche für den in Schritt 1 abgerufenen Domänennamen mit dem Befehl host für den abgerufenen Domänennamen aus. Stellen Sie sicher, dass es mit der ursprünglichen IP-Adresse aus Ihren Protokollen übereinstimmt.

Hier ist mein getesteter Code:

<?php
$remote_add=$_SERVER['REMOTE_ADDR'];
$hostname = gethostbyaddr($remote_add);
$googlebot = 'googlebot.com';
$google = 'google.com';
if (stripos(strrev($hostname), strrev($googlebot)) === 0 or stripos(strrev($hostname),strrev($google)) === 0 ) 
{
//add your code
}

?>

In diesem Code überprüfen wir "Hostname", der "googlebot.com" oder "google.com" am Ende von "Hostname" enthalten sollte, was wirklich wichtig ist, um die genaue Domain und nicht die Subdomain zu überprüfen. Ich hoffe es gefällt dir ;)


0

Für Google verwende ich diese Methode.

function is_google() {
    $ip   = $_SERVER['REMOTE_ADDR'];
    $host = gethostbyaddr( $ip );
    if ( strpos( $host, '.google.com' ) !== false || strpos( $host, '.googlebot.com' ) !== false ) {

        $forward_lookup = gethostbyname( $host );

        if ( $forward_lookup == $ip ) {
            return true;
        }

        return false;
    } else {
        return false;
    }

}

var_dump( is_google() );

Credits: https://support.google.com/webmasters/answer/80553


-1
function bot_detected() {

  if(preg_match('/bot|crawl|slurp|spider|mediapartners/i', $_SERVER['HTTP_USER_AGENT']){
    return true;
  }
  else{
    return false;
  }
}
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.