我们很多时候都会遇到伪造搜索引擎爬虫的UA,但是很多时候又无法判断他的真实性。
以下代码,为检验部分搜索引擎真实性的案例,如有更多方法,请回复评论。
因为英语不太好,所以下面的内容就有部分中文了。
<?php if(getspider()){ exit('假的搜索引擎!'); } function getspider(){ $访问UA = strtolower($_SERVER['HTTP_USER_AGENT']); $访问IP = isset($_SERVER['REMOTE_ADDR']) ? $_SERVER['REMOTE_ADDR'] : ''; if(isset($_SERVER['HTTP_X_FORWARDED_FOR'])){ $list = explode(',', $_SERVER['HTTP_X_FORWARDED_FOR']); $访问IP = $list[0]; } if (!ip2long($访问IP)) $访问IP = '未知IP'; $访问主机 = str_replace('.', '-', $访问IP); if (strpos($访问UA, 'googlebot') !== false){ $解析主机 = gethostbyaddr($_SERVER['REMOTE_ADDR']); if ($解析主机 != 'crawl-'.$访问主机.'.googlebot.com') return 'googlebot?'; } if (strpos($访问UA, 'sogou') !== false){ $解析主机 = gethostbyaddr($_SERVER['REMOTE_ADDR']); if ($解析主机 != 'sogouspider-'.$访问主机.'.crawl.sogou.com') return 'sogou'; } if (strpos($useragent, 'bing') !== false){ $解析主机 = gethostbyaddr($_SERVER['REMOTE_ADDR']); if ($解析主机 != 'msnbot-'.$访问主机.'.search.msn.com') return 'bing'; } if (strpos($访问UA, 'baiduspider') !== false){ $解析主机 = gethostbyaddr($_SERVER['REMOTE_ADDR']); if ($解析主机 != 'baiduspider-'.$访问主机.'.crawl.baidu.com') return 'baiduspider?'; } return false; }
评论