Windows上的套接字编号的PID?

时间:2009-05-04 11:22:28

标签: c++ winapi sockets winsock pid

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

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

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

1 个答案:

答案 0 :(得分:2)

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

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