C++ 是否将HTTP头添加到Windows上的所有传出数据包?

C++ 是否将HTTP头添加到Windows上的所有传出数据包?,c++,windows,http,visual-c++,http-headers,C++,Windows,Http,Visual C++,Http Headers,我正在开发一个Windows应用程序,它将位于系统托盘中。用户可以启用/禁用该应用程序 每当用户启用它时,它都需要侦听/嗅探HTTP流量,并在所有传出数据包上添加特定的HTTP头 我认为可以通过将系统或浏览器设置更改为localhost:my_port来实现。但是,这种方法有几个缺点,例如需要在我的应用程序中实现代理服务器 你能建议一个更好的方法吗?我只需要在所有传出的HTTP数据包上添加一个特定的HTTP头 我使用Visual C++ 6 最简单的方法是描述:通过代理配置浏览器,然后实现它,必

我正在开发一个Windows应用程序,它将位于系统托盘中。用户可以启用/禁用该应用程序

每当用户启用它时,它都需要侦听/嗅探HTTP流量,并在所有传出数据包上添加特定的HTTP头

我认为可以通过将系统或浏览器设置更改为localhost:my_port来实现。但是,这种方法有几个缺点,例如需要在我的应用程序中实现代理服务器

你能建议一个更好的方法吗?我只需要在所有传出的HTTP数据包上添加一个特定的HTTP头


我使用Visual C++ 6

最简单的方法是描述:通过代理配置浏览器,然后实现它,必要时添加/修改标题。 您关于将HTTP头添加到传出“数据包”的想法是错误的。因为您忘记了HTTP协议是基于TCP的,TCP是一个流。也就是说,您不应该对单个数据包进行任何独立处理。它们必须在连接的上下文中完成。 (另外,显然您只希望对HTTP协议执行此操作)

实际上,有一些方法可以通过“嗅探”来实现这一点,而浏览器却看不见。然而,这很难实现

因为:

  • 它需要驱动程序开发(包括所有后果)
  • 因为在您的特定情况下,您不能在单个数据包的基础上执行此操作-它甚至更复杂

  • 因此,如果您可以选择让浏览器直接进入您的手中,而不必深入操作系统内部,那么您肯定应该使用这种可能性。

    除非您了解数据包、请求/响应和流之间的区别,否则一切都会出大问题


    改为编写HTTP代理。

    我怀疑有没有更好的方法。。。几年来我一直在头文件上工作,但是我确信在头文件中有一些序列号/长度需要持续的代理操作来避免流状态无效。Visual C++ 6?真的,这已经过时8年了。获取VisualC++的Express,它是免费的,而且更为现代。至于这个问题,根本就没有所谓的“系统”代理设置。每个浏览器都有自己的代理,使用HTTP的非浏览器(如具有自动更新功能的应用)也可能有自己的代理。因此,我需要修改用户使用的每个浏览器的代理设置??另一种选择是通过接收、更改、然后发送传出数据包来实现我自己的代理。“我认为在这两种情况下,它都不是一个简单明了的解决方案。”哈立德:每一个浏览器都适合每一个用户。这当然是一个很大的痛苦,因为Windows已经清理了安全性。我只想在所有HTTP数据包中添加相同的头。这将如何影响TCP流?此外,HTTP协议是一种无状态协议,我不认为这个想法是错误的。新的头将由服务器处理(我将修补我的代理以支持它)。没有HTTP数据包这样的东西。您在嗅探器中看到的是IP协议包,它携带TCP传输的数据片段,数据本身是HTTP协议的一部分。请注意,这不仅仅是向流中添加头的问题-单个HTTP流可以包含多个请求/响应。我知道请求是由主机发起的数据包。响应是来自远程主机的数据包。你是说这个还是别的什么?编写HTTP代理不是一项简单的任务!“我知道请求是那些数据包…-不,你不知道。编写HTTP代理比创建HTTP头注入器MITM简单得多