C++ 如何识别忽略以下任何请求的人员发出的GET/POST请求

C++ 如何识别忽略以下任何请求的人员发出的GET/POST请求,c++,http,C++,Http,我正在编写一个应用程序,它侦听HTTP流量,并尝试识别哪些请求是由人发起的 例如: 用户在地址栏中键入cnn.com,启动请求。然后我想找到 CNN的服务器响应,同时丢弃任何其他请求(如XHR等) 你如何从标题信息中分辨出什么意思 在做了一些研究之后,我发现相关的回答如下: 内容类型:text/html Html附带了一个有意义的标题 状态200 ok 我认为标题信息不足以从机器人中识别真实用户,因为机器人是模仿真实用户制作的,而且标题很容易模仿 您可以做的一件事是跟踪用户跟随的路径(点击顺序)

我正在编写一个应用程序,它侦听HTTP流量,并尝试识别哪些请求是由人发起的

例如: 用户在地址栏中键入cnn.com,启动请求。然后我想找到 CNN的服务器响应,同时丢弃任何其他请求(如XHR等)

你如何从标题信息中分辨出什么意思

在做了一些研究之后,我发现相关的回答如下:

  • 内容类型:text/html
  • Html附带了一个有意义的标题
  • 状态200 ok

  • 我认为标题信息不足以从机器人中识别真实用户,因为机器人是模仿真实用户制作的,而且标题很容易模仿

    您可以做的一件事是跟踪用户跟随的路径(点击顺序),这很可能与机器人所做的路径不同,并对发布的信息进行一些分析(即贝叶斯过滤器)

    一个非常容易实现的检查基于IP源。有黑名单IP地址的数据库,请参阅-如果您是用java编写软件,下面是一个关于如何检查IP地址的示例:

    我在博客上做的是(使用wordpress插件):

  • 检查HTTP:BL中是否有IP地址,如果是,则向用户显示一个html页面以采取措施将其IP地址列入白名单。这是通过插件在Wordpress中完成的
  • 当用户提交某些内容时,贝叶斯过滤器会验证其提交的内容,如果其评论被识别为垃圾邮件,则在完成提交之前会显示验证码。这是通过and完成的,注释也会排队等待手动批准
  • 在被批准一次后,同一用户被认为是安全的,并且可以在没有限制/检查的情况下发布
  • 应用以上规则,我的博客上没有更多的垃圾邮件。我认为类似的逻辑也适用于任何网站


    这种方法的优点是,大多数用户甚至没有注意到任何安全机制,因为没有显示验证码,99%的情况下也不会发生任何异常。但是,在发动机罩下仍有相当严格且有效的检查。

    从电线上的碎片无法判断。HTTP协议有一个定义的格式,所有(未中断的)用户代理都遵守该格式

    你可能认为,将用户输入的“cnn.com”翻译成http://www.cnn.com/可以从协议有效负载中检测到导线上的。答案是不行

    要检测允许用户进行此类速记的用户代理,您必须窥探用户代理应用程序(例如浏览器)本身


    实际上,检测非人类代理是一个有趣的问题(垃圾邮件检测是一个明显的动机)。这是因为HTTP属于NVT协议家族,其基本思想(信不信由你)是人类应该能够在网络终端/控制台程序(如telnet客户端)中“手动”运行该协议。换句话说,该协议的设计基本上就像人类在使用它一样

    我无法提供任何代码来帮助您,但我想说的是查看
    Referer
    HTTP头。最初的
    GET
    请求不应该有
    Referer
    ,但是当您开始加载页面上的资源(如JavaScript、CSS等)时,
    Referer
    将设置为请求这些资源的URL

    因此,当我在浏览器中键入“stackoverflow.com”并按enter键时,浏览器将发送一个
    GET
    请求,而无
    Referer
    ,如下所示:

    GET / HTTP/1.1
    Host: stackoverflow.com
    # ... other Headers
    
    GET /style.css HTTP/1.1
    Host: stackoverflow.com
    Referer: http://www.stackoverflow.com
    # ... other Headers
    
    但是,当浏览器加载页面上支持的静态资源时,每个请求都会有一个
    Referer
    标题,如下所示:

    GET / HTTP/1.1
    Host: stackoverflow.com
    # ... other Headers
    
    GET /style.css HTTP/1.1
    Host: stackoverflow.com
    Referer: http://www.stackoverflow.com
    # ... other Headers
    

    你能给我们提供更多的信息吗?你用什么语言来实现这一点…我用C++编写,但这并不重要,我手头有一个结构,它包含所有MIME信息:http报头,http正文。实际上它很重要。您正在询问如何确定某些内容,因此这意味着代码明智。在这种情况下,您应该包括您试图在其中实现这一点的语言。@ArtaexMedia:这里的问题似乎是弄清楚如何解释TCP数据包(或者HTTP);这与语言无关…我的应用程序对流量完全是被动的,它所做的只是决定记录哪个请求/响应。不过,我使用C++,我用模拟解析器解析HTTP MIME。当你点击一个链接时,也会发送<代码>引用者>代码。引用器是一个可选字段。在HTTP请求中没有强制要求它存在的内容。依赖它的网页设计师都是白痴。是的,这可能比我想象的用途更有限。它可以检测用户是否在地址栏中键入了URL,但对单击的链接无效。还取决于客户端的用户代理(如果使用Chrome,效果很好)。所有合适的浏览器(Firefox、Opera等)都允许在请求中抑制Referer字段。也有。Referer字段的存在和不存在都不能可靠地暗示任何东西。我已经添加了一段关于协议设计起源的内容。基本上,该协议被设计为看起来像人类在使用它,因为人类应该能够在类似telnet客户端的东西中手动使用它。