jak wykryć boty wyszukiwarek za pomocą php?

118

Jak można wykryć boty wyszukiwarek za pomocą PHP?

przerażający
źródło

Odpowiedzi:

74

Oto katalog wyszukiwarek nazw pająków

Następnie używasz $_SERVER['HTTP_USER_AGENT'];do sprawdzenia, czy agentem jest wspomniany pająk.

if(strstr(strtolower($_SERVER['HTTP_USER_AGENT']), "googlebot"))
{
    // what to do
}
Ólafur Waage
źródło
if ((eregi ("yahoo", $ this-> USER_AGENT)) && (eregi ("slurp", $ this-> USER_AGENT))) {$ this-> Browser = "Yahoo! Slurp"; $ this-> Type = "robot"; } czy to będzie działać dobrze?
wspaniały
3
Ponieważ strpos może zwrócić 0 (pozycję), strstr zwraca FALSE w przypadku niepowodzenia, możesz użyć strpos, jeśli dodasz! == false check na końcu.
Ólafur Waage
2
Erm, również strposwraca FALSEpo porażce. Jest jednak szybszy i bardziej wydajny (bez przetwarzania wstępnego i przechowywania O (m)).
Damon
6
A co z fałszywymi agentami użytkownika ?!
2
A co by było, gdyby ktoś mógł zmienić jego klienta użytkownika na fałszywą nazwę i nazwać go „Googlebot”? Myślę, że sprawdzenie zakresu adresów IP jest bardziej godne zaufania!
Mojtaba Rezaeian
235

Używam następującego kodu, który wydaje się działać dobrze:

function _bot_detected() {

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

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

dodano mediapartners

minnur
źródło
2
Czy to zakłada, że ​​boty ujawniają się jako takie?
Jeromie Devera
2
Głosuj przeciw,
klienta
24
Tak, useragent można zmienić, ale jeśli ktoś zmienia go tak, by zawierał „bot”, „crawl”, „slurp” lub „spider”, wie, co się do niego zbliża. Zależy to również od użyteczności. Nie użyłbym tego do usunięcia całego CSS, ale użyłbym tego, aby nie przechowywać plików cookie, ignorować rejestrowanie lokalizacji lub pomijać stronę docelową.
JonShipman
2
Czy nikt nie zgadza się ze mną, że jest to sposób na dopasowanie do szerokiego zakresu?
Daan,
1
Wyrażenie regularne w tej odpowiedzi jest przyjemne, ponieważ jest proste i szerokie. W moim celu chcę działać szybko, ale nie obchodzi mnie, czy jest kilka fałszywie pozytywnych lub fałszywie negatywnych wyników.
Gregory,
19

Sprawdź $_SERVER['HTTP_USER_AGENT']niektóre z wymienionych tutaj ciągów:

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

A dokładniej dla robotów:

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

Jeśli chcesz -powiedzieć- rejestrować liczbę odwiedzin najpopularniejszych robotów wyszukiwarek, możesz użyć

$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'
}
Jukka Dahlbom
źródło
16

Możesz sprawdzić, czy jest to wyszukiwarka z tą funkcją:

<?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;
    }
}
?>

Następnie możesz go używać tak:

<?php $USER_AGENT = $_SERVER['HTTP_USER_AGENT'];
  if(crawlerDetect($USER_AGENT)) return "no need to lang redirection";?>
macherif
źródło
2
Myślę, że ta lista jest nieaktualna, nie widzę na przykład „slurp”, który jest Yahoo, to pająk help.yahoo.com/kb/SLN22600.html
Daan
11

Używam tego do wykrywania botów:

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
}

Dodatkowo używam białej listy do blokowania niechcianych botów:

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
}

Niechciany bot (= użytkownik fałszywie dodatni) jest następnie w stanie rozwiązać captcha, aby odblokować się na 24 godziny. Ponieważ nikt nie rozwiązuje tej captcha, wiem, że nie generuje ona fałszywych alarmów. Więc wykrywanie bota wydaje się działać idealnie.

Uwaga: moja biała lista jest oparta na pliku robots.txt Facebooka .

mgutt
źródło
zapomniałeś zamknięcia )w pierwszym fragmencie kodu.
Ludo -
10

Ponieważ każdy klient może ustawić klienta użytkownika tak, jak chce, szukanie „Googlebota”, „bingbota” itp. To tylko połowa pracy.

Druga część to weryfikacja adresu IP klienta. W dawnych czasach wymagało to prowadzenia list adresów IP. Wszystkie listy znalezione w Internecie są nieaktualne. Najlepsze wyszukiwarki oficjalnie obsługują weryfikację przez DNS, jak wyjaśniono w Google https://support.google.com/webmasters/answer/80553 i Bing http://www.bing.com/webmaster/help/how-to-verify -bingbot-3905dc26

Najpierw wykonaj odwrotne wyszukiwanie DNS adresu IP klienta. W przypadku Google oznacza to nazwę hosta pod googlebot.com, w przypadku Bing pod search.msn.com. Następnie, ponieważ ktoś mógłby ustawić taki zwrotny DNS na swoim IP, musisz zweryfikować to za pomocą wyszukiwania DNS do przodu na tej nazwie hosta. Jeśli wynikowy adres IP jest taki sam jak adres IP odwiedzającego witrynę, na pewno jest to robot z tej wyszukiwarki.

Napisałem bibliotekę w Javie, która wykonuje te testy za Ciebie. Zapraszam do przeniesienia go do PHP. Jest na GitHub: https://github.com/optimaize/webcrawler-verifier

Fabian Kessler
źródło
1
Wszystkie inne odpowiedzi wykorzystujące ciągi agentów użytkownika są tylko w połowie. Łał.
mlissner
1
Istnieje wiele komentarzy na temat sprawdzania klienta użytkownika, który jest tylko połową testu. To prawda, ale pamiętaj, że wykonywanie pełnego i wstecznego wyszukiwania DNS ma ogromny wpływ na wydajność. Wszystko zależy od poziomu pewności, jaki musisz uzyskać, aby wesprzeć swój przypadek użycia. Zapewnia to 100% pewności kosztem wydajności. Musisz zdecydować, jaka jest właściwa równowaga (a zatem najlepsze rozwiązanie) w Twojej sytuacji.
Brady Emerson
Nie ma „dużego wpływu na wydajność”. Po pierwsze, odwrotne wyszukiwanie dns jest wykonywane tylko na odwiedzających, którzy identyfikują się jako wyszukiwarka. W ogóle nie ma to wpływu na wszystkich ludzi. Następnie to wyszukiwanie jest wykonywane tylko raz na IP. Wynik jest zapisywany w pamięci podręcznej. Wyszukiwarki używają tych samych zakresów adresów IP przez bardzo długi czas i zwykle trafiają do jednej witryny z jednym lub kilkoma adresami IP. Ponadto: sprawdzanie poprawności można przeprowadzić z opóźnieniem. Przepuść pierwsze żądanie, a następnie sprawdź poprawność w tle. A jeśli negatywne, zapobiegaj kolejnym żądaniom. (Odradzałbym to, ponieważ harwestery mają teraz duże pule IP ...)
Fabian Kessler
Czy jest jakaś podobna biblioteka napisana w PHP?
userlond
8

Używam tej funkcji ... część wyrażenia regularnego pochodzi z prestashop, ale dodałem do niego więcej bota.

    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;
}

W każdym razie uważaj, aby niektóre boty używały przeglądarki, takiej jak agent użytkownika, do fałszowania swojej tożsamości
(mam wiele rosyjskich adresów IP, które mają takie zachowanie na mojej stronie)

Charakterystyczną cechą większości botów jest to, że nie zawierają one żadnych plików cookie, więc nie są do nich dołączone żadne sesje.
(Nie wiem jak, ale to z pewnością najlepszy sposób na ich śledzenie)

Kraina czarów
źródło
6

Możesz przeanalizować $_SERVER['HTTP_USER_AGENT']klienta użytkownika ( ) lub porównać adres IP klienta ( $_SERVER['REMOTE_ADDR']) z listą adresów IP robotów wyszukiwarek .

Gumbo
źródło
2
Lista adresów IP jest bezpieczniejsza, jeśli chcesz się upewnić, że nazwa agenta użytkownika to naprawdę bot wyszukiwarki, ponieważ istnieje możliwość tworzenia fałszywych agentów użytkownika według nazwy.
Mojtaba Rezaeian
5

Użyj biblioteki open source Device Detector, która oferuje funkcję isBot (): https://github.com/piwik/device-detector

mattab
źródło
Uwaga: ta biblioteka analizuje tylko klienta użytkownika, aby zdecydować, czy odwiedzający jest botem.
Philipp,
Za ciężki, wystarczy sprawdzić bota weryfikującego.
Joel James
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;
    }
}
?>

To byłby idealny sposób na osłonięcie się przed pająkami. Pochodzi ze skryptu open source o nazwie [YACG] - http://getyacg.com

Potrzebuje trochę pracy, ale zdecydowanie droga do zrobienia.

L. Cosio
źródło
2

Zrobiłem do tego jedną dobrą i szybką funkcję

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;
    }

Obejmuje to 99% wszystkich możliwych botów, wyszukiwarek itp.

Ivijan Stefan Stipić
źródło
1

Używam tego kodu, całkiem nieźle. Będziesz bardzo łatwo wiedzieć, że agenci użytkownika odwiedzili Twoją witrynę. Ten kod otwiera plik i zapisuje user_agent w pliku. Możesz codziennie sprawdzać ten plik, przechodząc do yourdomain.com/useragent.txti wiedząc o nowych user_agents i umieszczając je w klauzuli warunku if.

$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);
    }
}

To jest zawartość 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
Latarnia morska Nguyen
źródło
Jaki byłby twój (if_clause) kawałek struny do tego? mozilla / 5.0 (iphone; cpu iphone os 9_3 jak mac os x) applewebkit / 601.1.46 (khtml, jak gecko) wersja / 9.0 mobile / 13e198 safari / 601.1
Średnia Joe
1

W 100% działający wykrywacz botów. Działa pomyślnie na mojej stronie internetowej.

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()
Irshad Khan
źródło
1

Jeśli naprawdę potrzebujesz wykryć boty wyszukiwarki GOOGLE, nigdy nie powinieneś polegać na adresie „user_agent” lub „IP”, ponieważ „user_agent” można zmienić i zgodnie z tym, co powiedział Google: Weryfikacja Googlebota

Aby zweryfikować Googlebota jako dzwoniącego:

1. Uruchom odwrotne wyszukiwanie DNS adresu IP, z którego uzyskujesz dostęp, z Twoich dzienników, używając polecenia hosta.

2. Sprawdź, czy nazwa domeny to googlebot.com lub google.com

3. Uruchom wyszukiwanie DNS do przodu dla nazwy domeny pobranej w kroku 1, używając polecenia hosta dla pobranej nazwy domeny. Sprawdź, czy jest taki sam, jak pierwotny adres IP uzyskiwania dostępu z Twoich dzienników.

Oto mój przetestowany kod:

<?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
}

?>

W tym kodzie sprawdzamy „hostname”, który powinien zawierać „googlebot.com” lub „google.com” na końcu „hostname”, co jest bardzo ważne, aby sprawdzić dokładną domenę, a nie subdomenę. Mam nadzieję, że Ci się podoba ;)

طراحی سایت تهران
źródło
0

W przypadku Google używam tej metody.

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() );

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

Mike Aron
źródło
-1
function bot_detected() {

  if(preg_match('/bot|crawl|slurp|spider|mediapartners/i', $_SERVER['HTTP_USER_AGENT']){
    return true;
  }
  else{
    return false;
  }
}
Elyor
źródło