如何以编程方式检测机器人

Posted

技术标签:

【中文标题】如何以编程方式检测机器人【英文标题】:How do I detect bots programmatically 【发布时间】:2011-02-16 02:07:54 【问题描述】:

我们有一种情况,我们记录访问和页面点击的访问者,而机器人正在堵塞我们的数据库。我们不能使用验证码或其他类似的技术,因为这是在我们甚至要求人工输入之前,基本上我们正在记录页面点击,我们只想记录人类的页面点击。

那里有已知机器人 IP 的列表吗?检查已知的机器人用户代理是否有效?

【问题讨论】:

【参考方案1】:

没有万无一失的方法可以捕获所有机器人。如果有人想要,机器人可以像真正的浏览器一样工作。

大多数严重的机器人都会在代理字符串中清楚地识别自己,因此通过已知机器人的列表,您可以找出其中的大部分。您还可以在列表中添加一些 HTTP 库默认使用的代理字符串,以从甚至不知道如何更改代理字符串的人那里捕获机器人。如果你只记录访问者的代理字符串,你应该能够挑选出那些存储在列表中。

您还可以通过在您的网页上放置一个隐藏链接来制造“不良机器人陷阱”,该链接指向一个在您的 robots.txt 文件中被过滤掉的网页。严重的机器人不会点击链接,人类也无法点击,因此只有不遵守规则的机器人才会请求文件。

【讨论】:

您还可以为行为良好的机器人创建 robots.txt 文件robotstxt.org/orig.html【参考方案2】:

取决于您要检测的机器人类型:

Detecting Honest Web Crawlers Detecting Stealth Web Crawlers

【讨论】:

网络爬虫是否属于机器人?【参考方案3】:

您可以使用 Request.Browser.Crawler 以编程方式检测爬虫;

最好按照此处的说明更新已识别的爬虫列表 http://www.primaryobjects.com/cms/article102.aspx

【讨论】:

【参考方案4】:

我认为用户代理可以识别许多机器人,但肯定不是所有机器人。已知 IP 的列表 - 我也不会指望它。

启发式方法可能会奏效。机器人通常比人更快地跟踪链接。也许您可以跟踪每个客户端的 IP 并检测它跟随链接的平均速度。如果它是一个爬虫,它可能会立即跟踪每个链接(或者至少比人类快得多)。

【讨论】:

【参考方案5】:

您是否已经添加了robots.txt?虽然这不能解决恶意机器人使用问题,但您可能会对您网站上已经发生的合法抓取活动感到惊讶。

【讨论】:

我不确定 robots.txt 是否会帮助他们分别记录真实的访问者。他们并没有说要完全过滤掉机器人。【参考方案6】:

我认为不会有 Botnet IP 地址列表,Botnet IP 地址不是静态的,没有人知道谁是 bot,包括行为类似 Bot 的用户。

您的问题可以说是目前的热门研究领域,我很好奇是否有人可以为该问题提供解决方案。

您可以使用任何技术并了解这是否是人,然后您可以获得日志。

【讨论】:

【参考方案7】:

我认为最好的方法是为非人类用户(机器人、爬虫等...)使用链接 然后收集他们的用户代理,然后通过用户代理过滤它们。 你必须使链接不能被人类观察到才能做到这一点。

您可以将 robots.txt 添加到您网站的根目录,然后执行此操作

【讨论】:

以上是关于如何以编程方式检测机器人的主要内容,如果未能解决你的问题,请参考以下文章

Windows 7 以编程方式登录

如何使用 c# 以编程方式将证书安装到本地机器存储中?

我如何以编程方式向@BotFather发送消息?

如何在不使用命令的情况下以编程方式关闭/重启 linux 机器(运行时)

是否可以使用 C# 以编程方式访问 RDC 机器目录

以编程方式查找机器上的内核数