2

我需要计算各种应用程序从网络发送和接收的字节数。一开始我考虑使用 LSP,但是有很多应用程序根本不使用 LSP(例如 SMB)。这就是我写一个小嗅探器的原因。此应用程序在 IP 级别上工作,并使用 recvfrom 收集数据。

所以我有远程主机、本地和远程端口的地址。这很酷,但我还需要本地套接字所有者的 PID。那么,有没有简单的方法来获得这样的PID呢?解决方法是使用 GetTcpTable、GetUdpTable 或 AllocateAndGetUdpExTableFromStack 和 AllocateAndGetTcpExTableFromStack(这些函数在 2k、XP、XP SP2 和 Vista 之间存在很多差异)并查找结果表,但它似乎不优雅且效率低下......

那么有没有一种“GetPIDOfSocket”函数呢?解决方案应仅是 WinAPI(无 .net),因为可以使用各种语言,例如 C++、Delphi。

4

1 回答 1

2

很抱歉不得不告诉您,但使用GetTcpTableorAllocateAndGetTcpExTableFromStack不是一种解决方法,这实际上是其他 netstat 类型应用程序的工作方式。AFAIK 没有 Win32"GetPIDOfSocket"功能,您唯一的选择是使用端口表功能进行轮询。但至少您可以自己编写代码,而不必产生 netstat 进程。

请参阅netstatp 此处的 SysInternals C 源代码。它的数量不多,值得一看。

于 2009-05-04T18:20:55.027 回答