1.查看日志,把采集的IP直接屏蔽。
2.使用 PHP 内置函数 dns_get_record 或 nslookup 命令 反查蜘蛛 IP DNS,如果返回蜘蛛数据,比如baidu、360等等相关字符,那就是真蜘蛛。
这是临时解决用法,能治病。蜘蛛量大的情况下,对效率有影响,必定一直查询是不行的。
// 在根目录 index.inc.php 文件,第4行加入下面代码
function isSpider($ip) {
if (empty($_SERVER['HTTP_USER_AGENT'])) {
return false;
}
// 获取反向解析记录
$records = dns_get_record($ip, DNS_PTR);
if (empty($records) || !isset($records[0]['ptr'])) {
return false;
}
$hostname = $records[0]['ptr'];
// 验证PTR记录的反向解析
$forward_records = dns_get_record($hostname, DNS_A);
$valid = false;
foreach ($forward_records as $forward_record) {
if ($forward_record['ip'] === $ip) {
$valid = true;
break;
}
}
if (!$valid) {
return false;
}
// 检查是否包含搜索引擎的域名
$searchEngines = ['baidu.com', 'google.com', 'bing.com', '360.com'];
foreach ($searchEngines as $searchEngine) {
if (strpos($hostname, $searchEngine) !== false) {
return true;
}
}
return false;
}
if (!isSpider($ip)) {
exit('假蜘蛛精,有本事你换真的来,唐长老我不吃这一套!');
}