前言
最近又想挖坑了,由于开发的网页模板计划对seo极差,只能单独给出seo页面,但是为了避免滥用,我们也要考虑很多事情那我们又要如何判断蜘蛛是否就是真的蜘蛛呢?
调查文档
网上的大多数方法是根据ua进行判断,我突然想起一个api站点,使用nslookup反查dns来获取蜘蛛是否真实,等等?nslookup是啥? 域名反向解析 让度娘来给你科普下
原理
通过nslookup反向解析蜘蛛ip后我们可以得到域名,通过域名我们可以验证
整理实现
通过测试 nslookup 之后我们获取的是一个固定的主域的子域名,那我们只需要nslookup反查后对其主域进行判断就可以鉴别了。
优化
虽说这种方法看起来不错,但是在实际使用中我的建议 1.先进行ua判断 2.验证有无nslookup缓存 有则真 无则进入3 3.进入nslookup反查 并缓存 这样的好处是速度快 耗时短 对用户优化不错 对攻击者也好防御
贴上部分php代码
获取根域名
代码语言:javascript复制 /**
* 取得根域名
* @param type $domain 域名
* @return string 返回根域名
*/
function GetUrlToDomain($domain) {
$re_domain = '';
$domain_postfix_cn_array = array("com", "net", "org", "gov", "edu", "com.cn", "cn");
$array_domain = explode(".", $domain);
$array_num = count($array_domain) - 1;
if ($array_domain[$array_num] == 'cn') {
if (in_array($array_domain[$array_num - 1], $domain_postfix_cn_array)) {
$re_domain = $array_domain[$array_num - 2] . "." . $array_domain[$array_num - 1] . "." . $array_domain[$array_num];
} else {
$re_domain = $array_domain[$array_num - 1] . "." . $array_domain[$array_num];
}
} else {
$re_domain = $array_domain[$array_num - 1] . "." . $array_domain[$array_num];
}
return $re_domain;
}
核心函数
代码语言:javascript复制 gethostbyaddr()
参数为ip地址
返回反查域名
主域资料
//baidu.com 百度蜘蛛 //ny.adsl 360蜘蛛 //googlebot.com 谷歌蜘蛛 //sogou.com 搜狗 //yahoo.com 雅虎 //sm.cn 神马 //bytedance.com 今日头条 //msn.com 必应 这些就是取出蜘蛛nslookup反查域名的主域名部分列表
代码语言:javascript复制 例子 php 通过这个api可以反查ip https://jxwvyc549.hk03.horainwebs.top/s.php?ip=IP地址