我需要计算各种应用程序从网络发送和接收的字节数。首先我考虑使用LSP ,但有很多应用程序根本不使用 LSP(例如 SMB)。这就是我写一个小嗅探器的原因。该应用程序在 IP 级别上运行,并使用 recvfrom 收集数据。
所以我有远程主机的地址、本地和远程端口。这很酷,但我还需要本地套接字所有者的 PID。那么,有没有一种简单的方法来获取这样的PID呢?
解决方法是使用 GetTcpTable、GetUdpTable 或 AllocateAndGetUdpExTableFromStack 和 AllocateAndGetTcpExTableFromStack ( Windows 2000 、 Windows XP 、 Windows XP SP2 和 Windows Vista 之间的这些函数有很多差异)并查找结果表,但似乎不优雅且低效...
那么有没有一种“GetPIDOfSocket”函数呢?分辨率应为Win32 (无 .NET ),因为可以使用多种语言,例如C++ 和 Delphi .
最佳答案
使用 GetTcpTable
或 AllocateAndGetTcpExTableFromStack
不是解决方法。这实际上是其他 netstat 类型应用程序的工作方式。
据我所知,没有任何 Win32 "GetPIDOfSocket"
函数。您唯一的选择是使用端口表功能进行轮询。但至少您可以自己编写代码,而不必生成 netstat 进程。
请参阅Sysinternals netstatp
的 C 源代码 here 。内容不多,但很值得一看。
关于c++ - Windows 上套接字号的 PID?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/819708/