前一阵子看到一个思路,说是使用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: