本文介绍PHP怎样识别蜘蛛的真实性,重点是经过有些组合手段对搜索引擎蜘蛛的真实性进行判断,让虚假蜘蛛无处可逃。我晓得部分站长为了安全起见,都会屏蔽假人拜访,然则会对蜘蛛敞开前门,倘若此时候有人伪装成蜘蛛,对你的网站为所欲为,那岂不是无一点安全感吗?之前我介绍过PHP怎样识拜访者是不是搜索引擎的设备(参考文案《PHP怎样识别蜘蛛:全网最新最全蜘蛛整理》),这儿就不对识别蜘蛛的办法进行仔细介绍了,本文重点是介绍怎样识别蜘蛛的真假。
1、识别蜘蛛
判断蜘蛛的真假之前,咱们先来识别蜘蛛。为后面的真假判断工作做好服务。
$tmp= [.$_SERVER[HTTP_USER_AGENT].
];
//获取拜访者UA,这儿在UA数据前后都加了一个]符号,亦能够不消增多。
$tmp= strtolower($tmp);
$ipAddress= $_SERVER[REMOTE_ADDR];
//获取拜访者的IP位置
if (strpos($tmp, google) !==false) {
$bot= 谷歌蜘蛛;
} else if (strpos($tmp, bing) > 0) {
$bot= 必应蜘蛛;
} else if (strpos($tmp, baidu) > 0) {
$bot= 百度蜘蛛;
} else if (strpos($tmp, bytespider) > 0) {
$bot= 头条蜘蛛;
}
2、经过蜘蛛IP位置判断蜘蛛的真假
以百度蜘蛛为例,网络上非常多大牛说区别IP段的百度蜘蛛表率区别的蜘蛛性质,然则该信息并无得到百度的确认,可能大部分是依靠这些大牛经过海量数据分析而得,均是经验之谈。我收集了部分百度蜘蛛的IP,分享在下面:
116.179.32.*:新版百度蜘蛛,高权重段,通常抓取文案页。IP 段位于山西阳泉联通。百度云计算阳泉中心位置于世界最大中文搜索引擎百度机构创始人李彦宏的家乡山西省阳泉经济研发区东区。
220.181.108.75:重点抓取更新文案的内页达到 90%,8%抓取首页,2%其他。权重 IP 段,爬过的文案或首页基本 24 小时放出来。 220.181.108.77:专用抓首页 IP 权重段,通常返回代码是 304 0 0 表率未更新。
220.181.108.80:专用抓取首页 IP 权重段,通常返回代码是 304 0 0 表率未更新。
220.181.108.82:抓取tag页面。
220.181.108.83:专用抓取首页 IP 权重段,通常返回代码是 304 0 0 表率未更新。
220.181.108.86:专用抓取首页 IP 权重段,通常返回代码是 304 0 0 表率未更新。
220.181.108.89:专用抓取首页 IP 权重段,通常返回代码是 304 0 0 表率未更新。
220.181.108.91:属于综合的,重点抓取首页和内页或其他,属于权重 IP 段,爬过的文案或首页基本 24 小时放出来。
220.181.108.92:同上 98%抓取首页,可能还会抓取其他 (不指的是内页),属于权重 IP 段此段爬过的文案或首页基本 24 小时放出来。
220.181.108.94:专用抓取首页 IP 权重段,通常返回代码是 304 0 0 表率未更新。
220.181.108.93:重点抓取内页,爬过的文案或首页基本 24 小时放出来。
220.181.108.95:这个是百度抓取首页的专用 IP,如是 220.181.108 段的话,基本来讲你的网站会天天隔夜快照。
...此处省略一万个汉字...
这儿就不对蜘蛛的IP段进行全面的展示了,免得把专题扯远了,大众可以去网上自动收集百度蜘蛛的所有IP位置。接着上面的PHP代码:
$baiduips=[220.181.108.75, 220.181.108.80, 220.181.108.82, 220.181.108.89, 220.181.108.94, 220.181.108.95];
if ($bot== 百度蜘蛛) {
foreach($baiduips as $value) {
if ($ipAddress== $value) {
$bot= 百度蜘蛛[真];
} else {
$bot= 百度蜘蛛[假];
}
}
运用IP对蜘蛛的真假性进行判断需要你搜集的IP足够全面和准确,否则会影响咱们对蜘蛛真假判断的准确性。其他蜘蛛的IP需您自动进行收集。
3、经过查找蜘蛛IP的DNS记录进行判断
倘若你搜集的蜘蛛IP数据不足全面,但你依然运用了IP位置比对办法来进行判断,咱们还能够经过查找蜘蛛IP的DNS记录进行判断,增多靠谱性。想要查找一个IP的DNS记录,咱们能够运用PHP内置函数gethostbyaddr()来进行查找,倘若无查找到IP的DNS记录就会返回原IP。接着上面的PHP代码:
if ($bot= 百度蜘蛛[假]) {
$domainName= gethostbyaddr($ipAddress); //获取IP的DNS记录
if (strpos($domainName, baidu.com) !==false) {
$bot= 百度蜘蛛[真];
} else {
$bot= 百度蜘蛛[假];
}
}
以上代码只是对百度蜘蛛进行了简单的判断,本文分享几个其他的重点蜘蛛的DNS记录:
百度蜘蛛:DNS记录需包含(baidu.com)
谷歌蜘蛛:DNS记录需包含(googlebot.com)
必应蜘蛛:DNS记录需包含(search.msn.com)
头条蜘蛛:DNS记录需包含(compute.amazonaws.com)
以上这四个蜘蛛是分析于我网站的蜘蛛数据,至于同一个蜘蛛是不是还有其他的DNS记录,需要更加多的数据进行分析,或搜索引擎官方的通告。
经过经过查找蜘蛛IP的DNS记录进行判断蜘蛛的真假是不是可行呢?咱们能够写个简单的代码进行测试一下:
// 假设$ip是您想查找的IP位置
$ipAddress= 220.181.108.75; // 执行逆向 DNS 查找
$domainName= gethostbyaddr($ipAddress);
// 打印结果
if ($domainName) {
echo "IP位置:".$ipAddress.
DNS记录:.$domainName;
} else {
echo "无DNS记录:".$ipAddress;
}
if ($ipAddress== gethostbyaddr($ipAddress)) {
echo 无耻!;
} else {
echo 牛逼!;
} ?>
注释:该代码取了一个咱们前面收集的百度蜘蛛IP中的几个个IP进行测试。
测试一:百度IP220.181.108.75
测试结果:IP位置:220.181.108.75DNS记录:baiduspider-220-181-108-75.crawl.baidu.com
测试二:百度IP220.181.108.91
测试结果:IP位置:220.181.108.91DNS记录:baiduspider-220-181-108-91.crawl.baidu.com牛逼!
测试三:谷歌蜘蛛IP66.249.71.9
测试结果:IP位置:66.249.71.9DNS记录:crawl-66-249-71-9.googlebot.com牛逼!
可见该办法对有些正规的蜘蛛还是比较适用的。况且比蜘蛛IP比对法省事得多。
4、总结
本文重点介绍了经过蜘蛛IP位置判断蜘蛛的真假和经过查找蜘蛛IP的DNS记录来判断蜘蛛的真假,一般状况下,两种发放一块用,能够供给准确率。基本上能够排除大部分经过技术手段伪造的假蜘蛛。
在这儿我还分析几个反常的UA特征:
Wordup-1
PycURL
curl/7.29.0
okhttp
python
Python-urllib/3.10
Dalvik/2.1.0
Go-http-client/1.1
Mozilla/5.0 (Windows NT 10.0; WOW64; rv:48.0) Gecko/20100101 Firefox/48.0
倘若你的UA数据能够匹配这些UA特征,能够直接封禁,经过我自己网站的数据进行分析判断,她们基本无干啥好事。当然UA数据为空的亦能够屏蔽掉,基本都是设备。
|