前一阵子看到一个思路,说是使用php判断百度爬虫的真假性
关键代码如下
if (strpos($访问UA, 'baiduspider') !== false){
$解析主机 = gethostbyaddr($_SERVER['REMOTE_ADDR']);
if ($解析主机 != 'baiduspider-'.$访问主机.'.crawl.baidu.com')
return false;
}
百思不得解 其中 gethostbyaddr
是怎么来的,什么原理。今天了解了PTR解析记录才明白是怎么一回事。
平常解析域名用的最多的应该就是A(AAAA)/CNAME类型了,其他的很少用到,也很少了解到。今天就说一下 我对PTR记录的理解。
百度百科中写到: PTR (Pointer Record),指针记录,是电子邮件系统中的一种数据类型,被互联网标准文件RFC1035所定义。与其相对应的是A记录、地址记录。二者组成邮件交换记录。
所以可以粗糙的理解为, PTR是A记录的反向,可以通过IP地址查到对应的域名记录。而拥有这个权限的是ISP(互联网服务提供商),只有向ISP申请才能实现PTR解析。
在php中,可以使用 gethostbyaddr
函数来进行查询;
在Linux下,可以通过 host 1.1.1.1
直接查询,或者 host -t PTR 1.1.1.1
来查询;
也可以通过 nslookup 1.1.1.1
来查询。
有了这个 就可以查询到底是真的蜘蛛还是假的蜘蛛啦。
yumu@Deepin:~/Desktop$ nslookup 203.208.60.21
21.60.208.203.in-addr.arpa name = crawl-203-208-60-21.googlebot.com.
Authoritative answers can be found from: