bagaimana cara mendeteksi bot mesin pencari dengan php?


Jawaban:


74

Berikut Direktori Mesin Pencari nama Spider

Kemudian Anda gunakan $_SERVER['HTTP_USER_AGENT'];untuk memeriksa apakah agen tersebut adalah laba-laba.

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"; } apakah ini akan bekerja dengan baik ??
Hebat

3
Karena strpos dapat mengembalikan 0 (posisi), strstr mengembalikan FALSE jika gagal, Anda dapat menggunakan strpos jika Anda menambahkan! == false check di akhir.
Ólafur Waage

2
Erm, strposkembali jika FALSEgagal juga. Ini lebih cepat dan lebih efisien, meskipun (tanpa pemrosesan awal, dan tidak ada penyimpanan O (m)).
Damon

6
Bagaimana dengan agen pengguna palsu ?!

2
Dan bagaimana jika seseorang dapat mengubah agen penggunanya dengan nama palsu dan menamakannya seperti "Googlebot"? Saya pikir memeriksa rentang ip lebih dapat dipercaya!
Mojtaba Rezaeian

235

Saya menggunakan kode berikut yang tampaknya berfungsi dengan baik:

function _bot_detected() {

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

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

tambah mediapartners


2
Apakah ini berasumsi bahwa bot mengungkapkan dirinya seperti itu?
Jeromie Devera

2
Tolak, agen pengguna dapat diubah di setelan chrome, firefox,
barwnikk

24
Ya, agen pengguna dapat diubah, tetapi jika seseorang mengubahnya menjadi "bot", "merangkak", "menyeruput", atau "laba-laba" tahu apa yang akan terjadi pada mereka. Itu juga tergantung pada utilitas. Saya tidak akan menggunakan ini untuk menghapus semua CSS, tapi saya akan menggunakan ini untuk tidak menyimpan cookie, mengabaikan logging lokasi, atau melewati halaman arahan.
JonShipman

2
Tidak ada yang setuju dengan saya bahwa ini adalah cara untuk mencocokkan dengan jangkauan luas?
Daan

Saya menggunakan fungsi Anda selama lebih dari 1 hari sekarang dan sepertinya berfungsi. Tapi saya tidak yakin. Bagaimana cara mengirim bot pengujian untuk menguji apakah berhasil?
FarrisFahad

19

Periksa $_SERVER['HTTP_USER_AGENT']beberapa string yang tercantum di sini:

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

Atau lebih khusus untuk crawler:

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

Jika Anda ingin -mengatakan- mencatat jumlah kunjungan crawler mesin pencari yang paling umum, Anda dapat menggunakan

$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

Anda dapat melakukan pembayaran jika itu adalah mesin pencari dengan fungsi ini:

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

Kemudian Anda bisa menggunakannya seperti:

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

2
Saya pikir daftar ini sudah ketinggalan zaman, saya tidak melihat "slurp" misalnya Yahoo, itu spider help.yahoo.com/kb/SLN22600.html
Daan

11

Saya menggunakan ini untuk mendeteksi bot:

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
}

Selain itu, saya menggunakan daftar putih untuk memblokir bot yang tidak diinginkan:

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
}

Bot yang tidak diinginkan (= pengguna positif palsu) kemudian dapat memecahkan captcha untuk membebaskan dirinya sendiri selama 24 jam. Dan karena tidak ada yang memecahkan captcha ini, saya tahu itu tidak menghasilkan positif palsu. Jadi, deteksi bot sepertinya bekerja dengan sempurna.

Catatan: Daftar putih saya didasarkan pada robots.txt Facebook .


Anda lupa penutupan )pada bagian kode pertama Anda.
Ludo - Tidak direkam

10

Karena klien mana pun dapat menyetel agen pengguna ke apa yang mereka inginkan, mencari 'Googlebot', 'bingbot', dll hanyalah setengah dari pekerjaan.

Bagian kedua adalah memverifikasi IP klien. Di masa lalu, ini memerlukan pemeliharaan daftar IP. Semua daftar yang Anda temukan online sudah usang. Mesin pencari teratas secara resmi mendukung verifikasi melalui DNS, seperti yang dijelaskan oleh Google https://support.google.com/webmasters/answer/80553 dan Bing http://www.bing.com/webmaster/help/how-to-verify -bingbot-3905dc26

Pertama-tama lakukan pencarian DNS terbalik dari IP klien. Untuk Google, ini membawa nama host di bawah googlebot.com, untuk Bing di bawah search.msn.com. Kemudian, karena seseorang dapat mengatur DNS terbalik pada IP-nya, Anda perlu memverifikasi dengan pencarian DNS maju pada nama host tersebut. Jika IP yang dihasilkan sama dengan salah satu pengunjung situs, Anda yakin itu adalah crawler dari mesin pencari tersebut.

Saya telah menulis perpustakaan di Java yang melakukan pemeriksaan ini untuk Anda. Jangan ragu untuk mentransfernya ke PHP. Ada di GitHub: https://github.com/optimaize/webcrawler-verifier


1
Semua jawaban lain yang menggunakan string agen pengguna hanya separuh jalan. Wow.
mlissner

1
Ada banyak komentar tentang pemeriksaan agen pengguna hanya dengan setengah dari pemeriksaan. Ini benar, tetapi perlu diingat, ada dampak kinerja yang sangat besar untuk melakukan pencarian DNS penuh dan reverse DNS. Itu semua tergantung pada tingkat kepastian yang perlu Anda peroleh untuk mendukung kasus penggunaan Anda. Ini untuk kepastian 100% dengan mengorbankan kinerja. Anda harus memutuskan apa keseimbangan yang tepat (dan karenanya solusi terbaik) untuk situasi Anda.
Brady Emerson

Tidak ada "dampak kinerja yang besar". Pertama, pencarian dns terbalik hanya dilakukan pada pengunjung yang diidentifikasi sebagai mesin pencari. Semua manusia tidak terpengaruh sama sekali. Kemudian, pencarian ini hanya dilakukan sekali per IP. Hasilnya di-cache. Mesin pencari tetap menggunakan rentang IP yang sama untuk waktu yang sangat lama, dan biasanya mengunjungi satu situs dengan satu atau beberapa IP saja. Juga: Anda bisa melakukan validasi tertunda. Biarkan permintaan pertama masuk, lalu validasi latar belakang. Dan jika negatif, cegah permintaan yang berurutan. (Saya akan menyarankan agar hal ini tidak dilakukan karena pemanen memiliki kumpulan IP yang besar sekarang ...)
Fabian Kessler

Apakah ada beberapa perpustakaan simular yang ditulis dalam PHP?
userlond

8

Saya menggunakan fungsi ini ... bagian dari regex berasal dari prestashop tetapi saya menambahkan beberapa bot lagi ke dalamnya.

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

Pokoknya berhati-hatilah karena beberapa bot menggunakan browser seperti agen pengguna untuk memalsukan identitas mereka
(saya mendapat banyak ip rusia yang memiliki perilaku ini di situs saya)

Salah satu fitur khas dari sebagian besar bot adalah bot tidak membawa cookie apa pun sehingga tidak ada sesi yang dilampirkan padanya.
(Saya tidak yakin bagaimana tetapi ini pasti cara terbaik untuk melacak mereka)


6

Anda dapat menganalisis agen pengguna ( $_SERVER['HTTP_USER_AGENT']) atau membandingkan alamat IP klien ( $_SERVER['REMOTE_ADDR']) dengan daftar alamat IP bot mesin telusur .


2
Daftar IP lebih aman jika Anda ingin memastikan tentang nama agen pengguna benar-benar bot mesin pencari, karena dimungkinkan untuk membuat agen pengguna palsu berdasarkan nama.
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;
    }
}
?>

Itu akan menjadi cara ideal untuk berjubah bagi laba-laba. Ini dari skrip open source yang disebut [YACG] - http://getyacg.com

Perlu sedikit usaha, tapi pasti cara yang harus ditempuh.


2

Saya membuat satu fungsi yang bagus dan cepat untuk ini

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

Ini mencakup 99% dari semua bot, mesin pencari, dll.


1

Saya menggunakan kode ini, cukup bagus. Anda akan sangat mudah mengetahui agen-pengguna mengunjungi situs Anda. Kode ini membuka file dan menulis user_agent ke bawah file tersebut. Anda dapat memeriksa file ini setiap hari dengan pergi ke yourdomain.com/useragent.txtdan mengetahui tentang user_agents baru dan meletakkannya dalam kondisi klausa if Anda.

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

Ini adalah konten 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

Apa yang akan menjadi string piece (if_clause) Anda untuk ini? 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
Average Joe

1

Detektor Bot 100% Bekerja. Ini berhasil di situs web saya dengan sukses.

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

Jika Anda benar-benar perlu mendeteksi bot mesin GOOGLE, Anda tidak boleh mengandalkan alamat "user_agent" atau "IP" karena "user_agent" dapat diubah dan sesuai dengan apa yang dikatakan google di: Memverifikasi Googlebot

Untuk memverifikasi Googlebot sebagai penelepon:

1. Jalankan pencarian DNS terbalik di alamat IP yang mengakses dari log Anda, menggunakan perintah host.

2. Verifikasi bahwa nama domain ada di googlebot.com atau google.com

3. Jalankan pencarian DNS maju pada nama domain yang diambil pada langkah 1 menggunakan perintah host pada nama domain yang diambil. Verifikasi bahwa itu sama dengan alamat IP pengakses asli dari log Anda.

Ini kode saya yang diuji:

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

?>

Dalam kode ini kita memeriksa "nama host" yang seharusnya mengandung "googlebot.com" atau "google.com" di akhir "nama host" yang sangat penting untuk memeriksa domain tepatnya bukan subdomain. Saya harap kamu menikmatinya ;)


0

Untuk Google saya menggunakan metode ini.

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

Kredit: 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;
  }
}
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.