我正在编写一个侦听HTTP流量的应用程序,并尝试识别人类发起的请求。
例如: 用户在其地址栏中键入 cnn.com ,从而启动请求。然后我想找到 CNN的服务器响应,同时丢弃任何其他请求(例如XHR等)
你怎么能从标题信息中知道什么意思?
在做了一些研究后,我发现相关的反应来自:
答案 0 :(得分:1)
没有办法从电线上的位告诉。 HTTP协议具有已定义的格式,所有(未损坏的)用户代理都遵循该格式。
您可能认为可以从协议有效负载中检测到用户在线路上将“cnn.com”键入“http://www.cnn.com/”的转换。答案是否定的,它不可以。
要检测允许用户使用这种速记的用户代理,您必须窥探用户代理应用程序(例如浏览器)本身。
实际上,检测非人类代理是一个有趣的问题(垃圾邮件检测是一个明显的动机)。这是因为HTTP属于NVT协议系列,无论信不信,基本思想是人类应该能够在网络终端/控制台程序(如telnet客户端)中“手动”运行协议。 。)换句话说,协议基本上就像人类正在使用它一样。
答案 1 :(得分:0)
我认为标题信息不足以从机器人中识别真实用户,因为机器人是模仿真实用户而标题非常容易模仿。
您可以做的一件事是跟踪用户所遵循的路径(点击次序),这很可能与机器人制造的路径不同,并对发布的信息进行了一些分析(即贝叶斯过滤器) )。
一个非常容易实现的检查基于IP源。有黑名单IP地址的数据库,请参阅Project Honeypot - 如果您使用java编写软件,以下是如何检查IP地址的示例:How to query HTTP:BL for spamming IP addresses。
我在博客上做的是(使用wordpress插件):
应用上述规则,我在博客上发布了垃圾邮件。我认为类似的逻辑可以用于任何网站。
这种方法的优点是,大多数用户甚至都没有注意到任何安全机制,因为没有显示验证码,也没有任何异常发生在99%的时间。但是仍然存在相当严格且有效的检查。
答案 2 :(得分:0)
我无法提供任何代码来帮助,但我会说看看Referer
HTTP标头。最初的GET
请求不应该有Referer
,但是当您开始加载页面上的资源(例如JavaScript,CSS等)时,Referer
将设置为请求这些资源的URL。
因此,当我在浏览器中输入“stackoverflow.com”并按Enter键时,浏览器将发送GET
请求,而不是Referer
,如下所示:
GET / HTTP/1.1
Host: stackoverflow.com
# ... other Headers
当浏览器加载页面上的支持静态资源时,每个请求都会有一个Referer
标题,如下所示:
GET /style.css HTTP/1.1
Host: stackoverflow.com
Referer: http://www.stackoverflow.com
# ... other Headers