php怎样判断来访者是不是真正的百度蜘蛛?有无一种完美一点的处理方法。要判断来访者是不是是真正的百度蜘蛛,本文为打算采用三种办法来处理这个问题!
1. User-Agent(用户代理)办法
在HTTP请求头中,每一个浏览器或爬虫都会运用一个User-Agent标识自己。百度蜘蛛的User-Agent一般包含"baidu"关键字。因此呢,你能够获取来访者的User-Agent,而后检测是不是包括"baidu"关键字来判断是不是为百度蜘蛛。
示例代码:
if(strpos($_SERVER[HTTP_USER_AGENT], baidu) !== false) {
// 是百度蜘蛛
} else {
// 不是百度蜘蛛 }2. IP位置办法
百度蜘蛛拜访网站时会运用固定的IP位置(例如180.76.15.0/24)。因此呢,你能够获取来访者的IP位置,而后将其与百度蜘蛛的IP位置进行比较,倘若匹配成功,则暗示来访者是百度蜘蛛。当然这一步,你需要收集所有百度颁布的IP位置,才可够准确识别。倘若你收集的百度蜘蛛的IP位置比较准确全面,那样这便是一个比较准确的办法。
示例代码:
$visitor_ip = $_SERVER[REMOTE_ADDR];
if(preg_match(/^180\.76\.15\.[0-9]{1,3}$/, $visitor_ip)) {
// 是百度蜘蛛
} else {
// 不是百度蜘蛛 }
3. Reverse DNS(反向DNS)办法
百度蜘蛛拜访网站时其DNS解析一般会反向解析为以".baidu.com"结尾的域名。因此呢,你能够获取来访者的IP位置,而后将其反向解析为域名,再检测解析得到的域名是不是以".baidu.com"结尾,从而判断是不是为百度蜘蛛。
示例代码:
$visitor_ip = $_SERVER[REMOTE_ADDR];
$visitor_domain = gethostbyaddr($visitor_ip);
if(substr($visitor_domain, -10) === .baidu.com) {
// 是百度蜘蛛
} else {
// 不是百度蜘蛛 }4. 综合手段判断
以上办法并不可完全保准判断准确,由于用户能够伪造User-Agent、IP位置和DNS解析结果。但结合运用这些办法,能够过滤掉大部分非真实的百度蜘蛛拜访。当对来访者进行判断时,综合运用User-Agent和反向DNS办法能够加强判断准确率。以下是一个综合运用这两种办法的示例代码:
$visitor_user_agent = $_SERVER[HTTP_USER_AGENT];
$visitor_ip = $_SERVER[REMOTE_ADDR];
$is_baidu_spider = false;
// 检测User-Agent中是不是包括"baidu"关键字
if(strpos($visitor_user_agent, baidu) !== false) {
$is_baidu_spider = true;
}
// 检测反向解析得到的域名是不是以".baidu.com"结尾
if(!$is_baidu_spider) {
$visitor_domain = gethostbyaddr($visitor_ip);
if(substr($visitor_domain, -10) === .baidu.com) {
$is_baidu_spider = true;
}
}
if($is_baidu_spider) {
// 是百度蜘蛛
} else {
// 不是百度蜘蛛 }在以上代码中,首要检测User-Agent是不是包含"baidu"关键字,倘若包括则将$is_baidu_spider设置为true。而后,经过反向DNS办法获取来访者的域名,再检测域名是不是以".baidu.com"结尾,倘若是则将$is_baidu_spider设置为true。最后,按照$is_baidu_spider的值来判断是不是为百度蜘蛛。
综合运用User-Agent和反向DNS办法能够经过两个方面的判断来加强准确率。然而,仍然没法保准100%准确,由于用户能够伪造User-Agent和DNS解析结果。为了进一步加强准确率,能够结合其他办法,如IP位置办法,进行更全面的综合判断。这儿为何无运用IP位置来判断,由于倘若你的收集的百度蜘蛛的IP位置够全够准确,其实运用第二种办法的准确率已然高过于其他的办法了。咱们为了供给准确度、亦能够借用第三方库!或经过综合手段来增多识别能力!
|