Windows上套接字号码的PID?

问题描述:

我需要计算各种应用程序从网络发送和接收的字节数量。首先我想过使用LSP,但是有很多应用根本不使用LSP(例如SMB)。这就是为什么我写了一个小嗅探器。此应用程序在IP级别上工作并使用recvfrom收集数据。Windows上套接字号码的PID?

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

所以是否有任何一种“GetPIDOfSocket”函数?只有WinAPI(no .net)解决方案才能使用,因为可以使用各种语言,例如C++,Delphi。

+1

由于您似乎最近才加入,请允许我给您一个提示:提供您正在使用的编程语言通常很有帮助。你还有一个空的标签插槽来填充它:) – 2009-05-04 11:48:27

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

请参阅SysInternals C源代码netstatphere。没有太多它很值得一看。