简述
网站被各个搜索引擎收录是一件开心的事,更欢迎他们时常关顾。
大部分时候,我们可以通过爬虫的UA即(user-agent)判断爬虫类型,允许放行或阻止。
君子协议的rebots将其也可以作限制条件。
当我们遇到不法之徒伪造UA恶意爬取时,我又该怎么办呢?
在Google文档我们可以找到答案即
DNS反向查找
在Google 抓取工具(用户代理)概览中,明确提及。
UA 值可能会被仿冒。如果您需要验证访问者是否为 Googlebot,则应使用 DNS 反向查找。
手动验证可以参考 使用 DNS 反向查找 验证 Googlebot
这里直接引用代码
linux
> host 66.249.66.1
1.66.249.66.in-addr.arpa domain name pointer crawl-66-249-66-1.googlebot.com.
> host crawl-66-249-66-1.googlebot.com
crawl-66-249-66-1.googlebot.com has address 66.249.66.1
window
>nslookup 66.249.66.1
服务器: RT-AC3100-C45B.lan
Address: 192.168.2.1
名称: crawl-66-249-66-1.googlebot.com
Address: 66.249.66.1
>nslookup crawl-66-249-66-1.googlebot.com
服务器: RT-AC3100-C45B.lan
Address: 192.168.2.1
非权威应答:
名称: crawl-66-249-66-1.googlebot.com
Address: 66.249.66.1
php 中验证 Googlebot
<?php
$ip = '66.249.66.1';
$name = gethostbyaddr($ip);
$addr = gethostbyname($name);
echo 'name:'.$name.PHP_EOL;
echo 'addr:'.$addr.PHP_EOL;
echo 'reslut:'.($ip == $addr).PHP_EOL;
exit;
结果
name:crawl-66-249-66-1.googlebot.com
addr:66.249.66.1
reslut:1
补充
时隔N年(2026年7月21日)。通过AI我才发现我忽略了很关键的部分。
验证过程其实是需要2步:
-
反向DNS查找 (rDNS/PTR):对访问你服务器的IP地址进行反向DNS查找。真实的Googlebot IP会解析出一个特定域名,例如crawl-66-249-66-1.googlebot.com或geo-crawl-... .geo.googlebot.com。你提到的PTR查找正是这一步。
-
正向DNS查找 (Forward DNS):对第一步得到的域名进行正向DNS查找。验证这个域名解析出的IP地址,是否与最初的访问IP完全一致。