如何捕获来自某些进程的所有HTTP请求?

时间:2013-08-09 18:29:57

标签: c++ windows delphi http monitoring

我搜索了这个,我开始知道 WinPCap ,但我仍然没有得到我需要的答案。 WinPCap 可以监控数据包,而且似乎没有给进程提供跟踪(我对此并不了解)。

我希望我的应用程序能够收听某些进程发出的每个HTTP请求(通常是我稍后将定义的浏览器),并在必要时进行修改。

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

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

4 个答案:

答案 0 :(得分:5)

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

答案 1 :(得分:3)

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

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

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

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

  • 编写某种网络驱动程序来过滤所有流量。在不考虑现在的细节的情况下,您应该能够确定即使从内核模式流量的流程。我无法记得,但我认为Window(也就是说,NT' s)网络堆栈也有用户模式驱动程序。

像VPN这样的软件必须做你正在谈论的事情。它绝对可能,包括每进程过滤。有一点要记住,如果你想控制你想要执行此操作系统(管理员权限),你可以做任何你想做的事情。与某些移动操作系统不同,在桌面操作系统中,您拥有操作系统和硬件,并且不必拥有使用您自己的财产执行您想要的操作的权限。这只是一个多么艰难的问题以及需要多长时间......

答案 2 :(得分:1)

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

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

答案 3 :(得分:0)

尝试使用SnoopSpy3应用程序。 http://www.snoopspy.com/778 我希望它会对你有所帮助。