2

I've searched for this, I came to know WinPCap, but I still didn't get the answer I needed. WinPCap can monitor packets, and seems not to give a track to processes (I don't know much about it).

I want my application to listen to every HTTP request made from certain processes (usually the ones from browsers which I will define later), and modify them if necessary.

My application is originally written in Delphi, but any help in C++ would also be cool. Can anyone help me with this?

Edit 1: Of course I don't expect you to give me an answer according to winPcap necessarily!

4

4 回答 4

5

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

于 2013-08-09T19:12:23.787 回答
3

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

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

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

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

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

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

于 2013-08-09T19:21:28.143 回答
1

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

于 2014-02-09T17:36:02.050 回答
1

在 Windows 中,我使用 Sysinternals ProcMon 通过 PID 实现此过滤,然后使用 Tools -> Network Summary

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

于 2021-04-22T13:07:37.057 回答