bagaimana cara mendeteksi bot mesin pencari dengan php?

118

Bagaimana cara mendeteksi bot mesin pencari menggunakan php?

hebat
sumber

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
}
Ólafur Waage
sumber
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

minnur
sumber
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'
}
Jukka Dahlbom
sumber
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";?>
macherif
sumber
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 .

mgutt
sumber
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

Fabian Kessler
sumber
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)

WonderLand
sumber
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 .

Gumbo
sumber
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
5

Gunakan pustaka sumber terbuka Detektor Perangkat, ia menawarkan fungsi isBot (): https://github.com/piwik/device-detector

mattab
sumber
Catatan: Pustaka ini hanya menganalisis agen pengguna untuk memutuskan apakah pengunjung adalah bot.
Philipp
Terlalu berat, hanya untuk memeriksa bot verifikasi.
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;
    }
}
?>

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.

L. Cosio
sumber
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.

Ivijan Stefan Stipić
sumber
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
Mercusuar Nguyen
sumber
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()
Irshad Khan
sumber
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 ;)

طراحی سایت تهران
sumber
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

Mike Aron
sumber
-1
function bot_detected() {

  if(preg_match('/bot|crawl|slurp|spider|mediapartners/i', $_SERVER['HTTP_USER_AGENT']){
    return true;
  }
  else{
    return false;
  }
}
Elyor
sumber