php ile arama motoru botları nasıl tespit edilir?


Yanıtlar:


74

İşte Spider isimlerinden oluşan bir Arama Motoru Dizini

Daha sonra $_SERVER['HTTP_USER_AGENT'];ajanın örümcek denilip söylenmediğini kontrol etmek için kullanırsınız .

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

eğer ((eregi ("yahoo", $ this-> USER_AGENT)) && (eregi ("slurp", $ this-> USER_AGENT))) {$ this-> Browser = "Yahoo! Slurp"; $ this-> Type = "robot"; } bu iyi çalışır mı?
müthiş

3
Strpos 0 (konum) döndürebildiğinden, başarısızlık durumunda strstr FALSE döndürür, sonuna! == false kontrol eklerseniz strpos kullanabilirsiniz.
Ólafur Waage

2
Erm, başarısızlıkla da strposgeri döner FALSE. Yine de daha hızlı ve daha verimli (ön işleme ve O (m) depolama yok).
Damon

6
Ya sahte kullanıcı aracıları ?!

2
Ya biri sahte adla kullanıcı aracısını değiştirip bunu "Googlebot" olarak adlandırabilirse? IP aralığını kontrol etmenin daha güvenilir olduğunu düşünüyorum!
Mojtaba Rezaeian

235

İyi çalışıyor gibi görünen aşağıdaki kodu kullanıyorum:

function _bot_detected() {

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

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

orta ortaklar eklendi


2
Bu, botların kendilerini bu şekilde gösterdiklerini varsayıyor mu?
Jeromie Devera

2
Olumsuz oy verin, kullanıcı aracısı Chrome ayarlarında değiştirilebilir, firefox,
barwnikk

24
Evet, kullanıcı aracısı değiştirilebilir, ancak birisi bunu "bot", "tarama", "höpürdetme" veya "örümcek" içerecek şekilde değiştirirse, onlara ne geldiğini bilir. Ayrıca faydaya da bağlıdır. Bunu tüm CSS'yi çıkarmak için kullanmazdım, ancak bunu çerezleri depolamak, konum günlüğünü göz ardı etmek veya bir açılış sayfasını atlamak için kullanmazdım.
JonShipman

2
Bunun geniş çaplı bir eşleşme yolu olduğu konusunda kimse benimle aynı fikirde değil mi?
Daan

1
Bu cevaptaki normal ifade, basit ve geniş kapsamlı olduğu için iyidir. Amacım için hızlı olmak istiyorum ama birkaç yanlış pozitif veya yanlış negatif olması umrumda değil.
Gregory

19

$_SERVER['HTTP_USER_AGENT']Burada listelenen dizelerden bazılarını kontrol edin :

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

Veya daha spesifik olarak tarayıcılar için:

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

En yaygın arama motoru tarayıcılarının ziyaret sayısını günlüğe kaydetmek istiyorsanız, şunu kullanabilirsiniz:

$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

Bu işleve sahip bir arama motoru olup olmadığını kontrol edebilirsiniz:

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

O zaman bunu şu şekilde kullanabilirsiniz:

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

2
Sanırım bu liste güncel değil, örneğin Yahoo, örümcek help.yahoo.com/kb/SLN22600.html
Daan

11

Bunu botları tespit etmek için kullanıyorum:

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
}

Ek olarak, istenmeyen botları engellemek için bir beyaz liste kullanıyorum:

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
}

İstenmeyen bir bot (= yanlış pozitif kullanıcı) daha sonra 24 saat boyunca engelini kaldırmak için bir captcha çözebilir. Ve kimse bu captcha'yı çözmediğinden, bunun yanlış pozitifler üretmediğini biliyorum. Böylece bot algılama mükemmel çalışıyor gibi görünüyor.

Not: Beyaz listemde Facebooks robots.txt temel alınmıştır .


)ilk kod parçanızın kapanışını unuttunuz .
Kayıt dışı - Ludo

10

Herhangi bir müşteri, kullanıcı aracısını istediklerine ayarlayabildiğinden, "Googlebot", "bingbot" vb. Aramak işin yalnızca yarısıdır.

2. kısım, müşterinin IP'sini doğrulamaktır. Eskiden bu, IP listelerinin korunmasını gerektiriyordu. Çevrimiçi bulduğunuz tüm listeler güncelliğini yitirmiştir. En iyi arama motorları, Google https://support.google.com/webmasters/answer/80553 ve Bing http://www.bing.com/webmaster/help/how-to-verify tarafından açıklandığı gibi, DNS aracılığıyla doğrulamayı resmi olarak destekler -bingbot-3905dc26

İlk olarak, istemci IP'sinin ters DNS araması yapın. Google için bu, googlebot.com altına bir ana bilgisayar adı getirir, Bing için ise search.msn.com altındadır. Daha sonra, birisi IP'sinde böyle bir ters DNS ayarlayabileceği için, bu ana bilgisayar adında ileri DNS aramasıyla doğrulamanız gerekir. Ortaya çıkan IP, sitenin ziyaretçilerinden biriyle aynıysa, o arama motorundan bir tarayıcı olduğundan eminiz.

Java'da bu kontrolleri sizin için yapan bir kitaplık yazdım. PHP'ye taşımaktan çekinmeyin. GitHub'da: https://github.com/optimaize/webcrawler-verifier


1
Kullanıcı aracısı dizelerini kullanan diğer tüm yanıtlar oranın sadece yarısıdır. Vay.
mlissner

1
Kullanıcı aracısı denetimi hakkında çok sayıda yorum var, yalnızca kontrolün yarısı. Bu doğrudur, ancak unutmayın ki tam DNS ve ters DNS aramasını yapmanın performans üzerinde büyük bir etkisi vardır. Her şey, kullanım durumunuzu desteklemek için elde etmeniz gereken kesinlik düzeyine bağlıdır. Bu, performans pahasına% 100 kesinlik içindir. Durumunuz için doğru dengenin (ve dolayısıyla en iyi çözümün) ne olduğuna karar vermelisiniz.
Brady Emerson

"Büyük performans etkisi" yoktur. İlk olarak, ters dns araması yalnızca arama motoru olarak tanımlayan ziyaretçiler üzerinde gerçekleştirilir. Tüm insanlar hiç etkilenmez. Ardından, bu arama IP başına yalnızca bir kez gerçekleştirilir. Sonuç önbelleğe alınır. Arama motorları aynı IP aralıklarını çok uzun bir süre kullanmaya devam eder ve genellikle yalnızca bir veya birkaç IP ile bir siteye ulaşır. Ayrıca: doğrulamayı gecikmeli olarak gerçekleştirebilirsiniz. İlk talebin geçmesine izin verin, ardından arka planda doğrulayın. Ve olumsuzsa, art arda gelen istekleri önleyin. (Buna karşı tavsiye ederim çünkü biçerdöverlerin artık büyük IP havuzları var ...)
Fabian Kessler

PHP ile yazılmış simüler bir kitaplık var mı?
userlond

8

Bu işlevi kullanıyorum ... normal ifadenin bir kısmı prestashop'tan geliyor ama ona biraz daha bot ekledim.

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

Her neyse, bazı botların kimliklerini taklit etmek için kullanıcı aracısı gibi tarayıcı kullanmasına dikkat edin
(Sitemde bu davranışa sahip birçok rusça ip var)

Botun çoğunun ayırt edici bir özelliği, herhangi bir çerez taşımaması ve bu nedenle bunlara hiçbir oturum eklenmemesidir.
(Nasıl olduğundan emin değilim ama kesinlikle onları izlemenin en iyi yolu bu)




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

Örümcekler için gizlenmenin ideal yolu budur. [YACG] - http://getyacg.com adlı açık kaynaklı bir komut dosyasından

Biraz çalışma gerekiyor, ama kesinlikle gidilecek yol.


2

Bunun için iyi ve hızlı bir işlev yaptım

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

Bu, olası tüm botların, arama motorlarının vb.% 99'unu kapsar.


1

Bu kodu kullanıyorum, oldukça iyi. Kullanıcı-aracılarının sitenizi ziyaret ettiğini bilmek çok kolay olacaktır. Bu kod bir dosyayı açıyor ve user_agent'i dosyaya yazıyor. Bu dosyayı her gün gidip yourdomain.com/useragent.txtyeni user_agents hakkında öğrenerek kontrol edebilir ve if cümlesi koşullarınıza koyabilirsiniz.

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

Bu, useragent.txt içeriğidir

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

Bunun için (if_clause) dize parçanız ne olur? mozilla / 5.0 (iphone; cpu iphone os 9_3 mac os x gibi) applewebkit / 601.1.46 (khtml, gecko gibi) version / 9.0 mobile / 13e198 safari / 601.1
Ortalama Joe

1

% 100 Çalışan Bot dedektörü. Web sitemde başarıyla çalışıyor.

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

GOOGLE motor botlarını gerçekten tespit etmeniz gerekiyorsa, asla "user_agent" veya "IP" adresine güvenmemelisiniz çünkü "user_agent" değiştirilebilir ve google'ın şurada söylediği şeye göre: Googlebot'u doğrulama

Googlebot'u arayan olarak doğrulamak için:

1. host komutunu kullanarak günlüklerinizden erişen IP adresi için ters DNS araması çalıştırın.

2. Alan adının googlebot.com veya google.com'da olduğunu doğrulayın

3. Adım 1'de alınan alan adı için, alınan alan adındaki host komutunu kullanarak bir ileri DNS araması çalıştırın. Günlüklerinizdeki orijinal erişim IP adresiyle aynı olduğunu doğrulayın.

İşte test edilen kodum:

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

?>

Bu kodda, "ana bilgisayar adı" nın sonunda "googlebot.com" veya "google.com" içermesi gereken "ana makine adı" nı kontrol ederiz; bu, alt etki alanını değil tam etki alanını kontrol etmek için gerçekten önemlidir. Umarım beğenirsiniz;)


0

Google için bu yöntemi kullanıyorum.

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

Krediler: 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;
  }
}
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.