PHP로 검색 엔진 봇을 감지하는 방법?


답변:


74

다음 은 스파이더 이름검색 엔진 디렉토리입니다.

그런 다음 $_SERVER['HTTP_USER_AGENT'];에이전트가 거미인지 확인 하는 데 사용 합니다.

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 = "로봇"; }이게 잘 작동할까요 ??
멋진

3
strpos는 0 (위치)을 반환 할 수 있으므로 strstr은 실패시 FALSE를 반환하므로 끝에! == false 확인을 추가하면 strpos를 사용할 수 있습니다.
Ólafur Waage

2
음, 실패 하면 strpos돌아온다 FALSE. 하지만 더 빠르고 효율적입니다 (사전 처리 및 O (m) 저장 없음).
Damon

6
가짜 사용자 에이전트는 어떻습니까?!

2
누군가가 가짜 이름으로 사용자 에이전트를 변경하고 "Googlebot"과 같이 이름을 지정할 수 있다면 어떨까요? IP 범위를 확인하는 것이 더 신뢰할 수 있다고 생각합니다!
Mojtaba Rezaeian

235

잘 작동하는 다음 코드를 사용합니다.

function _bot_detected() {

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

업데이트 16-06-2017 https://support.google.com/webmasters/answer/1061943?hl=ko

mediapartners 추가


2
이것은 봇이 스스로를 드러낸다 고 가정합니까?
Jeromie Devera

2
투표를
거부

24
예, useragent는 변경 될 수 있지만 누군가가 "bot", "crawl", "slurp"또는 "spider"를 포함하도록 변경하는 경우 무엇이 올 것인지 알고 있습니다. 그것은 또한 유틸리티에 달려 있습니다. 모든 CSS를 제거하는 데 사용하지는 않지만 쿠키를 저장하지 않거나 위치 로깅을 무시하거나 방문 페이지를 건너 뛰는 데 사용합니다.
JonShipman

2
이것이 넓은 범위를 일치시키는 방법이라는 것에 아무도 동의하지 않습니까?
Daan

나는 당신의 기능을 지금 하루 이상 사용했는데 작동하는 것 같습니다. 하지만 잘 모르겠습니다. 작동하는지 테스트하기 위해 테스트 봇을 보내려면 어떻게해야합니까?
FarrisFahad

19

$_SERVER['HTTP_USER_AGENT']여기에 나열된 일부 문자열을 확인 하십시오.

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

더 구체적으로 크롤러의 경우 :

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

가장 일반적인 검색 엔진 크롤러의 방문 횟수를 기록하려면 다음을 사용할 수 있습니다.

$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

이 기능을 사용하여 검색 엔진인지 확인할 수 있습니다.

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

그런 다음 다음과 같이 사용할 수 있습니다.

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

2
이 목록이 구식이라고 생각합니다. 예를 들어 "slurp"가 보이지 않습니다. 예를 들어 Yahoo는 거미입니다. help.yahoo.com/kb/SLN22600.html
Daan

11

나는 이것을 사용하여 봇을 감지하고 있습니다.

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
}

또한 허용 목록을 사용하여 원하지 않는 봇을 차단합니다.

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
}

원치 않는 봇 (= 오 탐지 사용자)은 보안 문자를 해결하여 24 시간 동안 자신을 차단 해제 할 수 있습니다. 그리고 아무도이 보안 문자를 풀지 않기 때문에 위양성을 생성하지 않는다는 것을 알고 있습니다. 따라서 봇 감지가 완벽하게 작동하는 것 같습니다.

참고 : 내 허용 목록은 Facebooks robots.txt를 기반으로 합니다 .


)첫 번째 코드에서 닫는 것을 잊었습니다 .
Ludo-기록 끄기

10

모든 클라이언트가 사용자 에이전트를 원하는대로 설정할 수 있기 때문에 'Googlebot', 'bingbot'등을 찾는 것은 작업의 절반에 불과합니다.

두 번째 부분은 클라이언트의 IP를 확인하는 것입니다. 예전에는이를 위해 IP 목록을 유지해야했습니다. 온라인에서 찾은 모든 목록이 오래되었습니다. Google https://support.google.com/webmasters/answer/80553 및 Bing http://www.bing.com/webmaster/help/how-to-verify에 설명 된대로 상위 검색 엔진은 공식적으로 DNS를 통한 확인을 지원합니다 . -bingbot-3905dc26

먼저 클라이언트 IP의 역방향 DNS 조회를 수행합니다. Google의 경우 googlebot.com 아래에 호스트 이름이 표시되고 Bing의 경우 search.msn.com에 있습니다. 그런 다음 누군가가 자신의 IP에 이러한 역방향 DNS를 설정할 수 있으므로 해당 호스트 이름에 대한 정방향 DNS 조회로 확인해야합니다. 결과 IP가 사이트 방문자 중 하나와 같으면 해당 IP가 해당 검색 엔진의 크롤러임을 확신합니다.

이러한 검사를 수행하는 Java 라이브러리를 작성했습니다. PHP로 자유롭게 이식하십시오. GitHub에 있습니다 : https://github.com/optimaize/webcrawler-verifier


1
사용자 에이전트 문자열을 사용하는 다른 모든 답변은 절반에 불과합니다. 와.
mlissner

1
사용자 에이전트 검사가 검사의 절반에 불과하다는 의견이 많이 있습니다. 이것은 사실이지만 전체 DNS 및 역방향 DNS 조회를 수행하는 데 성능에 큰 영향을 미친다는 점을 명심하십시오. 그것은 모두 사용 사례를 지원하기 위해 확보해야하는 확실성의 수준에 따라 다릅니다. 이것은 성능을 희생하면서 100 % 확실성을위한 것입니다. 상황에 맞는 적절한 균형 (따라서 최상의 솔루션)을 결정해야합니다.
Brady Emerson

"큰 성능 영향"은 없습니다. 첫째, 역 DNS 조회는 검색 엔진으로 식별되는 방문자에 대해서만 수행됩니다. 모든 인간은 전혀 영향을받지 않습니다. 그런 다음이 조회는 IP 당 한 번만 수행됩니다. 결과가 캐시됩니다. 검색 엔진은 매우 오랫동안 동일한 IP 범위를 계속 사용하며 일반적으로 하나 또는 몇 개의 IP만으로 한 사이트에 도달합니다. 또한 : 지연된 유효성 검사를 수행 할 수 있습니다. 첫 번째 요청을 보낸 다음 백그라운드 유효성 검사를 수행합니다. 부정적이면 연속적인 요청을 방지하십시오. (저는 수확기가 현재 대규모 IP 풀을 가지고 있기 때문에 이에 대해 조언 할 것입니다 ...)
Fabian Kessler

PHP로 작성된 유사한 라이브러리가 있습니까?
userlond 19

8

이 기능을 사용합니다 ... 정규식의 일부는 prestashop에서 가져 왔지만 더 많은 봇을 추가했습니다.

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

어쨌든 일부 봇은 사용자 에이전트와 같은 브라우저를 사용하여 신원을 가짜로 만듭니다
(내 사이트에서이 동작을하는 많은 러시아 IP를 얻었습니다).

대부분의 봇의 특징 중 하나는 쿠키가 없기 때문에 세션이 연결되지 않는다는 것입니다.
(어떻게해야할지 모르겠지만 이것이 그들을 추적하는 가장 좋은 방법입니다)


6

사용자 에이전트 ( $_SERVER['HTTP_USER_AGENT'])를 분석 하거나 클라이언트의 IP 주소 ( $_SERVER['REMOTE_ADDR']) 를 검색 엔진 봇의 IP 주소 목록 과 비교할 수 있습니다.


2
이름으로 가짜 사용자 에이전트를 만들 수 있기 때문에 사용자 에이전트 이름이 실제로 검색 엔진 봇인지 확인하려는 경우 IP 목록이 더 안전합니다.
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;
    }
}
?>

거미를 은폐하는 이상적인 방법입니다. 그것은 [YACG]라는 오픈 소스 스크립트에서의 - http://getyacg.com

약간의 작업이 필요하지만 확실히 갈 길입니다.


2

나는 이것을 위해 좋고 빠른 기능을 하나 만들었습니다.

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

여기에는 가능한 모든 봇, 검색 엔진 등의 99 %가 포함됩니다.


1

이 코드를 사용하고 있습니다. 사이트를 방문한 사용자 에이전트를 매우 쉽게 알 수 있습니다. 이 코드는 파일을 열고 user_agent를 파일에 기록합니다. yourdomain.com/useragent.txt새 user_agents 로 이동하여이 파일을 매일 확인 하고 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);
    }
}

이것은 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

이것에 대한 (if_clause) 문자열 조각은 무엇입니까? 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

100 % Working Bot 탐지기. 내 웹 사이트에서 성공적으로 작동합니다.

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 엔진 봇을 감지해야하는 경우 "user_agent"가 변경 될 수 있고 Google이 말한대로 Googlebot 확인 에 따라 "user_agent"또는 "IP"주소에 의존 해서는 안됩니다 .

Googlebot을 발신자로 확인하려면 :

1. host 명령을 사용하여 로그에서 액세스하는 IP 주소에 대해 역 DNS 조회를 실행합니다.

2. 도메인 이름이 googlebot.com 또는 google.com 에 있는지 확인합니다.

3. 검색된 도메인 이름에서 host 명령을 사용하여 1 단계에서 검색 한 도메인 이름에 대해 정방향 DNS 조회 를 실행합니다. 로그에서 원래 액세스 IP 주소와 동일한 지 확인하십시오.

테스트 한 코드는 다음과 같습니다.

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

?>

이 코드에서는 하위 도메인이 아닌 정확한 도메인을 확인하는 데 정말 중요한 "hostname"끝에 "googlebot.com"또는 "google.com"을 포함해야하는 "hostname"을 확인합니다. 나는 당신이 즐기기를 바랍니다;)


0

Google의 경우이 방법을 사용하고 있습니다.

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

크레딧 : 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;
  }
}
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.