【问题标题】:How to capture all HTTP requests from certain processes?如何捕获来自某些进程的所有 HTTP 请求?
【发布时间】:2013-08-09 18:29:57
【问题描述】:

我已经搜索过这个,我知道了WinPCap,但我仍然没有得到我需要的答案。 WinPCap 可以监控数据包,而且似乎没有给进程追踪(我不太了解)。

我希望我的应用程序监听来自特定进程(通常是来自浏览器的请求,稍后我将定义)发出的每个 HTTP 请求,并在必要时对其进行修改。

我的应用程序最初是用 Delphi 编写的,但在 C++ 中的任何帮助也很酷。 谁能帮我解决这个问题?

编辑1:当然我不指望你一定按照winPcap给我答案!

【问题讨论】:

  • 我 99% 确定您无法知道数据包来自哪个进程,一旦它处于 WinPCap 级别 - 它是一个驱动程序产品,可以在每个数据包进出时拾取它的机器。到那时,它来自哪个进程就“丢失”了。
  • 我讨厌有些人投票赞成关闭问题,而他们只是不知道答案!这个问题有什么问题?
  • @MatsPetersson:也许 WinPCap 无法做到这一点,我正在寻找任何可能有用的库。
  • 既然你提到了 Delphi,我假设这是针对 Windows 的。在这种情况下,您可能可以使用Windows Filtering Platform 完成这项工作(但它不会是微不足道的)。
  • 你能描述一下你真正想做的事情吗?问题是通用数据包嗅探器(例如 WinPCap)位于“哪个进程”无关紧要的网络层。而大多数网络分析工具都遵循这一原则。要知道哪个进程正在发送什么数据包,您需要在操作系统的应用程序端,这几乎意味着“挂钩到进程”。

标签: c++ windows delphi http monitoring


【解决方案1】:

WinPCap 允许您访问每个捕获的数据包的源和目标 IP/端口对。您可以迭代操作系统的 TCP 表(在 Windows 上,您可以使用 GetTcpTable2()GetTcp6Table2())查找这些对,当您找到匹配项时,您将知道拥有该连接的进程 ID。然后,您可以通过该 ID 从操作系统中提取有关该进程的更多信息(文件名等)。

【讨论】:

  • WinPCap 最烦人的问题是 WiFi 连接有问题。例如,它无法识别我的互联网连接。 :-/
【解决方案2】:

我可以想到很多想法,具体取决于您需要获得的低级别以及您要求的其他参数

  • 设置某种 HTTP 代理。这可能是您自己编写并配置浏览器使用的东西。或者它可能是 Fiddler 之类的东西 - 我不确定 Fiddler 是否允许您插入自己的功能......如果不是,并且如果它是开源的,那么您可以做任何您喜欢的事情。

  • 查看现有的浏览器插件机制。例如对于 IE,有 BHO(浏览器助手对象)。 TBH 我不确定各种插件机制到底允许什么。如果您在浏览器中执行本机代码,也许您可​​以挂钩任意 API(请参阅下面的 Detours)

  • 使用 MS user-level hooking mechanism 将代码(.dll)注入目标进程。您可以将挂钩配置为仅加载到具有特定名称(例如 iexplore.exe)以及其他属性的进程中。最坏的情况是,您可以挂钩所有进程,然后如果该进程不是您想要挂钩的进程,则在您的 DllLoad 中退出。在你的钩子的 DllLoad 中,使用像 Detours 这样的入口点钩子机制来钩子一组网络 API 和你自己的函数。然后,每当进程调用这些网络 API 时,就会调用 DLL 中的函数。它可以做任何想做的事(例如修改正在发送的数据),然后调用真正的方法。例如,IE 使用 WinHTTP(我认为),它使用使用 winsock 的 wininet。我已经多次这样做了(不是为了网络,而是为了其他 API),而且机制本身很简单。

  • 编写某种网络驱动程序来过滤所有流量。现在无需考虑细节,即使从内核模式,您也应该能够弄清楚流量是用于哪个进程的。我记不太清了,但我认为 Window(也就是 NT)的网络堆栈也有用户模式驱动程序。

许多软件(如 VPN)必须完成您所说的工作。这绝对是可能的,包括按进程过滤。要始终牢记的一件事是,如果您可以控制要在其上执行此操作的操作系统(管理员权限),您可以做任何您想做的事情。与某些移动操作系统不同,在桌面操作系统中,您拥有操作系统和硬件,并且无需请求许可即可使用您自己的财产做您想做的事情。只是难度和需要多长时间的问题......

【讨论】:

    【解决方案3】:

    试用 SnoopSpy3 应用程序。 http://www.snoopspy.com/778 希望对你有帮助。

    【讨论】:

    • 您能否详细说明这将如何帮助提问者?似乎她要求一种以编程方式收听和编辑数据包的方法。
    【解决方案4】:

    在 Windows 中,我使用 Sysinternals ProcMon 通过 PID 和工具 -> 网络摘要来实现此过滤

    https://docs.microsoft.com/en-us/sysinternals/downloads/procmon

    【讨论】:

      猜你喜欢
      • 2020-11-29
      • 1970-01-01
      • 2015-07-17
      • 1970-01-01
      • 1970-01-01
      • 2017-01-02
      • 2017-02-09
      • 2021-09-18
      • 2020-12-17
      相关资源
      最近更新 更多