从HTTP服务器的角度来看。
您可以阅读官方验证Googlebot页面。
在此引用该页面:
您可以验证访问您服务器的机器人是否确实是 Googlebot (或另一个 Google 用户代理)通过使用反向 DNS 查找, 验证该名称是否在 googlebot.com 域中,然后执行 使用该 googlebot 名称进行正向 DNS 查找。这很有用,如果 您担心垃圾邮件发送者或其他麻烦制造者正在访问 您的网站同时声称是 Googlebot。
例如:
> 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
Google 不会发布公开的 IP 列表 网站管理员将地址列入白名单。这是因为这些IP 地址范围可能会发生变化,这会给任何网站管理员带来问题 对它们进行了硬编码。识别 Googlebot 访问的最佳方式 是使用用户代理(Googlebot)。
我已经在我的 asp.net 应用程序中捕获了 google 爬虫请求,这是 google 爬虫的签名的样子。
请求IP:66.249.71.113
客户端:Mozilla/5.0(兼容;Googlebot/2.1;+http://www.google.com/bot.html)
我的日志在
66.249.71.*
范围内观察到谷歌爬虫的许多不同IP。所有这些 IP 的地理位置均位于美国加利福尼亚州山景城。
检查请求是否来自 Google 抓取工具的一个很好的解决方案是验证请求是否包含
Googlebot
和 http://www.google.com/bot.html
。正如我所说,同一请求客户端观察到许多 IP,我不建议检查 IP。也许这就是客户身份发挥作用的地方。因此,请验证客户身份。
这是 C# 示例代码。
if (Request.UserAgent.ToLower().Contains("googlebot") ||
Request.UserAgent.ToLower().Contains("google.com/bot.html"))
{
//Yes, it's google bot.
}
else
{
//No, it's something else.
}
需要注意的是,任何 Http 客户端都可以轻松伪造这一点。
您现在可以通过检查 googlebot 在 https://developers.google.com/search/apis/ipranges/googlebot.json
发布的 IP 地址列表来执行 IP 地址检查来自文档:
您可以通过将抓取工具的 IP 地址与 Googlebot IP 地址列表 相匹配,通过 IP 地址识别 Googlebot。对于所有其他 Google 抓取工具,请将抓取工具的 IP 地址与 Google IP 地址的完整列表进行匹配。
如果您使用 Apache Web 服务器,您可以查看日志文件“log access.log”。
然后从 http://www.iplists.com/nw/google.txt 加载 google 的 IP,并检查其中一个 IP 是否包含在您的日志中。
基于此。 __curious_geek的解决方案,这是javascript版本:
if(window.navigator.userAgent.match(/googlebot|google\.com\/bot\.html/i)) {
// Yes, it's google bot.
}
要验证网络请求是否来自 Google 的抓取工具,您可以检查 IP 地址是否属于 Google 发布的 IP 范围(可在此处找到):
https://developers.google.com/search/apis/ipranges/googlebot.json
或者,您也可以进行反向 DNS 查找并检查该域是否与 Google 的某个域匹配。
注意:您还可以检查用户代理字符串,但由于它可能被欺骗,因此明智的做法是使用上述方法之一。
您可以使用 NPM 包
crawl-bot-verifier
来验证 Google、Bing、百度和许多其他爬虫,该库会进行可靠的 DNS 查找,并且具有非常好的 API。您可以在这里找到该包: