Windows上的套接字编号的PID?
题
我需要计算各种应用程序从网络发送和接收的字节数。首先我考虑使用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源代码。它不是很多,值得一看。
不隶属于 StackOverflow