เราจะตรวจจับบอทของเครื่องมือค้นหาโดยใช้ php ได้อย่างไร?
เราจะตรวจจับบอทของเครื่องมือค้นหาโดยใช้ php ได้อย่างไร?
คำตอบ:
นี่คือSearch Engine Directory ของชื่อ Spider
จากนั้นใช้$_SERVER['HTTP_USER_AGENT'];
ตรวจสอบว่าตัวแทนดังกล่าวเป็นแมงมุมหรือไม่
if(strstr(strtolower($_SERVER['HTTP_USER_AGENT']), "googlebot"))
{
// what to do
}
strpos
ผลตอบแทนFALSE
ที่ล้มเหลวเช่นกัน เร็วขึ้นและมีประสิทธิภาพมากขึ้นแม้ว่า (ไม่มีการประมวลผลล่วงหน้าและไม่มีพื้นที่เก็บข้อมูล O (m))
ฉันใช้รหัสต่อไปนี้ซึ่งดูเหมือนว่าจะใช้งานได้ดี:
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=th
mediapartnersเพิ่ม
ตรวจสอบ$_SERVER['HTTP_USER_AGENT']
สตริงบางรายการที่แสดงที่นี่:
http://www.useragentstring.com/pages/useragentstring.php
หรือโดยเฉพาะสำหรับโปรแกรมรวบรวมข้อมูล:
http://www.useragentstring.com/pages/useragentstring.php?typ=Crawler
หากคุณต้องการ -say- บันทึกจำนวนการเข้าชมของโปรแกรมรวบรวมข้อมูลของเครื่องมือค้นหาทั่วไปคุณสามารถใช้
$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'
}
คุณสามารถชำระเงินได้ว่าเป็นเครื่องมือค้นหาที่มีฟังก์ชันนี้หรือไม่:
<?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";?>
ฉันใช้สิ่งนี้เพื่อตรวจจับบอท:
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
}
บอทที่ไม่ต้องการ (= ผู้ใช้ที่เป็นเท็จ) จะสามารถแก้ captcha เพื่อปลดบล็อกตัวเองได้เป็นเวลา 24 ชั่วโมง และเนื่องจากไม่มีใครแก้แคปต์ชานี้ได้ฉันจึงรู้ว่ามันไม่ได้สร้างผลบวกปลอม ดังนั้นการตรวจจับบอทดูเหมือนจะทำงานได้อย่างสมบูรณ์
หมายเหตุ: My รายการที่อนุญาตจะขึ้นอยู่กับFacebooks robots.txt
)
รหัสชิ้นแรกของคุณ
เนื่องจากลูกค้าสามารถตั้ง user-agent เป็นสิ่งที่ต้องการได้การมองหา 'Googlebot', 'bingbot' etc เป็นเพียงครึ่งเดียวเท่านั้น
ส่วนที่ 2 คือการตรวจสอบ IP ของลูกค้า ในสมัยก่อนสิ่งนี้จำเป็นต้องมีการดูแลรักษารายการ IP รายการทั้งหมดที่คุณพบทางออนไลน์ล้าสมัย เครื่องมือค้นหาอันดับต้น ๆ รองรับการยืนยันอย่างเป็นทางการผ่าน DNS ตามที่ Google อธิบายไว้https://support.google.com/webmasters/answer/80553และ Bing http://www.bing.com/webmaster/help/how-to-verify -bingbot-3905dc26
ในตอนแรกทำการค้นหา DNS ย้อนกลับของ IP ไคลเอนต์ สำหรับ Google ชื่อโฮสต์จะอยู่ภายใต้ googlebot.com สำหรับ Bing อยู่ภายใต้ search.msn.com จากนั้นเนื่องจากมีคนสามารถตั้งค่า DNS ย้อนกลับบน IP ของเขาได้คุณจึงต้องยืนยันด้วยการค้นหา DNS แบบส่งต่อในชื่อโฮสต์นั้น หาก IP ที่ได้นั้นเหมือนกับของผู้เยี่ยมชมไซต์คุณต้องแน่ใจว่าเป็นโปรแกรมรวบรวมข้อมูลจากเครื่องมือค้นหานั้น
ฉันได้เขียนไลบรารีใน Java เพื่อทำการตรวจสอบให้คุณ อย่าลังเลที่จะพอร์ตไปยัง PHP อยู่ใน GitHub: https://github.com/optimaize/webcrawler-verifier
ฉันใช้ฟังก์ชันนี้ ... ส่วนหนึ่งของ regex มาจาก 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 รัสเซียจำนวนมากที่มีพฤติกรรมนี้ในไซต์ของฉัน)
คุณสมบัติที่โดดเด่นอย่างหนึ่งของบอทส่วนใหญ่คือพวกเขาไม่พกคุกกี้ใด ๆ และไม่มีการเชื่อมต่อกับเซสชันใด ๆ
(ฉันไม่แน่ใจว่าเป็นอย่างไร แต่แน่นอนว่าเป็นวิธีที่ดีที่สุดในการติดตาม)
คุณสามารถวิเคราะห์ตัวแทนของผู้ใช้ ( $_SERVER['HTTP_USER_AGENT']
) หรือเปรียบเทียบที่อยู่ IP ของลูกค้า ( $_SERVER['REMOTE_ADDR']
) มีรายการที่อยู่ IP ของบอเครื่องมือค้นหา
ใช้ไลบรารีโอเพ่นซอร์ส Device Detector ซึ่งมีฟังก์ชัน isBot (): https://github.com/piwik/device-detector
<?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
ต้องการการทำงานเล็กน้อย แต่ต้องไปแน่นอน
ฉันสร้างฟังก์ชันที่ดีและรวดเร็วสำหรับสิ่งนี้
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% ของบอทเครื่องมือค้นหาและอื่น ๆ ที่เป็นไปได้ทั้งหมด
ฉันใช้รหัสนี้ค่อนข้างดี คุณจะรู้ได้ง่ายมากว่า User-agent เข้าชมไซต์ของคุณ โค้ดนี้กำลังเปิดไฟล์และเขียน user_agent ลงในไฟล์ คุณสามารถตรวจสอบไฟล์นี้ได้ทุกวันโดยไปที่yourdomain.com/useragent.txt
และเรียนรู้เกี่ยวกับ user_agents ใหม่และกำหนดให้อยู่ในเงื่อนไขของ if clause
$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
เครื่องตรวจจับบอททำงาน 100% มันทำงานบนเว็บไซต์ของฉันสำเร็จ
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()
หากคุณต้องการตรวจจับบอทของเครื่องมือ GOOGLE จริงๆคุณไม่ควรพึ่งพาที่อยู่ "user_agent" หรือ "IP" เนื่องจาก "user_agent" สามารถเปลี่ยนแปลงได้และเป็นไปตามที่ Google กล่าวไว้ใน: การยืนยัน Googlebot
ในการยืนยัน Googlebot เป็นผู้โทร:
1. เรียกใช้การค้นหาDNS แบบย้อนกลับบนที่อยู่ IP ที่เข้าถึงจากบันทึกของคุณโดยใช้คำสั่งโฮสต์
2. ตรวจสอบว่าชื่อโดเมนอยู่ในgooglebot.comหรือgoogle.com
3. เรียกใช้การค้นหา DNS แบบไปข้างหน้าบนชื่อโดเมนที่ดึงมาในขั้นตอนที่ 1 โดยใช้คำสั่งโฮสต์บนชื่อโดเมนที่ดึงมา ตรวจสอบว่าตรงกับที่อยู่ 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
}
?>
ในรหัสนี้เราตรวจสอบ "ชื่อโฮสต์" ซึ่งควรมี "googlebot.com" หรือ "google.com" ต่อท้าย "ชื่อโฮสต์" ซึ่งเป็นสิ่งสำคัญมากในการตรวจสอบโดเมนที่แน่นอนไม่ใช่โดเมนย่อย ฉันหวังว่าคุณจะสนุก ;)
สำหรับ 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() );
function bot_detected() {
if(preg_match('/bot|crawl|slurp|spider|mediapartners/i', $_SERVER['HTTP_USER_AGENT']){
return true;
}
else{
return false;
}
}