如何捕获来自特定进程的所有HTTP请求

How to capture all HTTP requests from certain processes?

本文关键字:HTTP 请求 进程 何捕获      更新时间:2023-10-16

我已经搜索过了,我了解了WinPCap,但我仍然没有得到我需要的答案。WinPCap可以监视数据包,并且似乎不跟踪进程(我对此了解不多)。

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

我的应用程序最初是用Delphi编写的,但C++中的任何帮助也很酷。有人能帮我吗?

编辑1:当然,我不希望你一定会根据winPcap给我答案!

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

我能想到很多想法,这取决于你需要获得的低级程度和你的需求的其他参数

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

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

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

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

很多像VPN这样的软件必须做你所说的事情。这是绝对可能的,包括每个进程的过滤。需要始终记住的一件事是,如果您可以控制要执行此操作的操作系统(管理员权限),则可以执行任何您想要的操作。与某些移动操作系统不同,在桌面操作系统中,你拥有操作系统和硬件,不必乞求许可就可以用自己的财产做你想做的事情。这只是一个有多困难和需要多长时间的问题。。。

尝试SnoopPy3应用程序。http://www.snoopspy.com/778我希望它能帮助你。

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

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