今天给大家分享一个非常实用的代码,可能标题写的不是很清楚,但是没有办法,为了控制标题的字数,主要的意思就是判断是否是百度蜘蛛抓取,如果是百度蜘蛛抓取就301到另外一个网站上,如果不是例如普通访问之类的就不进行访问跳转。
代码没有进行过实测,所以各位使用的朋友请谨慎对待,建议先用新站点测试一下,否则后果自负,代码主要是方便更换域名但是又不想关闭原有网站使用的,切勿进行非法操作。
功能说明:
- 1.判断蜘蛛跳转
- 2.支持多个域名随机跳转
- 3.判断百度搜索进去不进行跳转
- 4.正常浏览器访问不跳转
- 5.过安全狗防护
使用方法:
以下代码新建为:useragent.func.php
然后在你网站程序核心函数,例如:dedecms动态页面可以在:index.php
进行引入自己新建的代码为: require_once (dirname(__FILE__) . “/useragent.func.php”);
<?php
/*
*
*/
error_reporting(E_ALL^E_NOTICE^E_WARNING);
$xieyi="http://";
function checkrobot($useragent=''){
static $kw_spiders = array('bot', 'crawl', 'spider' ,'slurp', 'sohu-search', 'lycos', 'robozilla');
static $kw_browsers = array('msie', 'netscape', 'opera', 'konqueror', 'mozilla');
$useragent = strtolower(empty($useragent) ? $_SERVER['HTTP_USER_AGENT'] : $useragent);
if(strpos($useragent, 'http://') === false && dstrpos($useragent, $kw_browsers)) return false;
if(dstrpos($useragent, $kw_spiders)) return true;
return false;
}
function dstrpos($string, $arr, $returnvalue = false) {
if(empty($string)) return false;
foreach((array)$arr as $v) {
if(strpos($string, $v) !== false) {
$return = $returnvalue ? $v : true;
return $return;
}
}
return false;
}
//网址随机输出,可以填写多个随机输出转移权重的网址
$url[0] = "http://demoo1.com";
$url[1] = "http://demoo2.com";
$url[2] = "http://demoo3.com";
$url[3] = "http://demoo4.com";
$url[4] = "http://demoo5.com";
$url[5] = "http://demoo5.com";
srand ((double)microtime()*1000000);
$randomnum = rand(0, count($url)-1);
if(checkrobot()){
Header("Location:$url[$randomnum]");
header('HTTP/1.1 301 Moved Permanently');
header("Location:$url[$randomnum]");
exit;
}
//判断的是百度,如果是百度点击进去就不跳转,防止被发现
if(stristr ($_SERVER['HTTP_REFERER'],"baidu.com"))
{
$file = file_get_contents( $xieyi.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']);
echo $file;
exit;
exit;
}
?>
对于网站管理员来说,搜索引擎的爬虫(spider)是非常重要的。百度蜘蛛(Baiduspider)作为百度搜索引擎的爬虫之一,在收录网页时起着举足轻重的作用。然而,有些站点会遇到百度蜘蛛访问太频繁导致服务器抓爆,或者想要知道百度蜘蛛的IP段以便将其加入白名单,但由于IP地址范围动态变化不固定,无法对外公布。
那么如何才能识别正确的百度蜘蛛呢?本文将介绍两个方法,分别是查看User-Agent(UA)信息和进行双向DNS解析认证。
查看UA信息
UA信息是指用户代理字符串,它包含了浏览器类型、操作系统等信息,可以用来识别访问者的身份。在HTTP请求中,浏览器会发送自己的UA信息给服务器进行识别。百度蜘蛛的UA信息可以通过查看HTTP请求的头部信息得到。目前UA分为移动、PC和小程序三个应用场景,这三个渠道UA分别如下:
- 移动UA:
Mozilla/5.0 (Linux;u;Android 4.2.2;zh-cn;) AppleWebKit/534.46 (KHTML,like Gecko)Version/5.1 Mobile Safari/10600.6.3 (compatible; Baiduspider/2.0;+http://www.baidu.com/search/spider.html)
或
Mozilla/5.0 (iPhone;CPU iPhone OS 9_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko)Version/9.0 Mobile/13B143 Safari/601.1 (compatible; Baiduspider-render/2.0;+http://www.baidu.com/search/spider.html)
- PC UA:
Mozilla/5.0 (compatible; Baiduspider/2.0; +http://www.baidu.com/search/spider.html)
或
Mozilla/5.0 (compatible; Baiduspider-render/2.0; +http://www.baidu.com/search/spider.html)
- 小程序UA:
Mozilla/5.0 (iPhone;CPU iPhone OS 9_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko)Version/9.0 Mobile/13B143 Safari/601.1 (compatible; Baiduspider-render/2.0;Smartapp; +http://www.baidu.com/search/spider.html)
如果UA信息不对,可以直接判断为非百度搜索的蜘蛛。
双向DNS解析认证
DNS反查IP
开发者可以通过对日志中访问服务器的IP地址运行反向DNS查找,判断某只spider是否来自百度搜索引擎。Baiduspider的hostname以*.baidu.com或*.baidu.jp的格式命名,非*.baidu.com或*.baidu.jp即为冒充。根据平台不同,验证方法也不同。以下是在Linux、Windows和macOS平台下进行DNS反查IP的方法:
- Linux平台:使用host ip命令反解ip来判断是否来自Baiduspider的抓取。
host xxx.xxx.xxx.xxx
- Windows平台或IBM OS/2平台:使用nslookup ip命令反解ip来判断是否来自Baiduspider的抓取。打开命令提示符,输入如下命令:
nslookup xxx.xxx.xxx.xxx(IP地址)
- macOS平台:使用dig命令反解ip来判断是否来自Baiduspider的抓取。打开终端,输入如下命令:
dig -x xxx.xxx.xxx.xxx(IP地址)
对域名运行正向DNS查找
对第一步中通过命令检索到的域名运行正向DNS查找,验证该域名与您日志中访问服务器的原始IP地址是否一致。如果IP地址一致,则可以确认该spider来自百度搜索引擎;如果IP地址不一致,则为冒充。
以下是一个示例:
> host 111.206.198.69 69.198.206.111.in-addr.arpa domain name pointer baiduspider-111-206-198-69.crawl.baidu.com.
> host baiduspider-111-206-198-69.crawl.baidu.com
baiduspider-111-206-198-69.crawl.baidu.com has address 111.206.198.69
我们可以看到,反向DNS查找得到的域名是baiduspider-111-206-198-69.crawl.baidu.com,而正向DNS查找也能得到相同的IP地址111.206.198.69,说明这个spider是来自百度搜索引擎的。
发表评论 取消回复