我需要计算各种应用程序从网络发送和接收的字节数。首先我考虑使用LSP,但是有很多应用程序根本不使用LSP(例如SMB)。这就是为什么我写了一个小嗅探器。此应用程序适用于IP级别,并使用recvfrom收集数据。

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

那么有任何类型的“GetPIDOfSocket”吗?功能?该解决方案仅适用于WinAPI(无.net),因为可以使用各种语言,例如C ++,Delphi。

有帮助吗?

解决方案

很抱歉要告诉你,但使用 GetTcpTable AllocateAndGetTcpExTableFromStack 不是一种解决方法,实际上它是其他netstat类型应用程序的工作方式。 AFAIK没有Win32 " GetPIDOfSocket" 函数,您唯一的选择是使用端口表函数进行轮询。但至少你可以自己编写代码并且不必生成netstat进程。

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top