c++ - Windows 上套接字号的 PID?

标签 c++ winapi sockets winsock pid

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

所以我有远程主机的地址、本地和远程端口。这很酷,但我还需要本地套接字所有者的 PID。那么,有没有一种简单的方法来获取这样的PID呢?

解决方法是使用 GetTcpTable、GetUdpTable 或 AllocateAndGetUdpExTableFromStack 和 AllocateAndGetTcpExTableFromStack ( Windows 2000Windows XPWindows XP SP2Windows Vista 之间的这些函数有很多差异)并查找结果表,但似乎不优雅且低效...

那么有没有一种“GetPIDOfSocket”函数呢?分辨率应为Win32 (无 .NET ),因为可以使用多种语言,例如C++ 和 Delphi .

最佳答案

使用 GetTcpTableAllocateAndGetTcpExTableFromStack 不是解决方法。这实际上是其他 netstat 类型应用程序的工作方式。

据我所知,没有任何 Win32 "GetPIDOfSocket" 函数。您唯一的选择是使用端口表功能进行轮询。但至少您可以自己编写代码,而不必生成 netstat 进程。

请参阅Sysinternals netstatp 的 C 源代码 here 。内容不多,但很值得一看。

关于c++ - Windows 上套接字号的 PID?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/819708/

相关文章:

c - 非套接字上的套接字操作 : error while setting socket options and binding socket

c++ - 我想使用 ofstream 在 cpp 中创建一个文本文件

c++ - 在 C++ 中使用 Expat XML 解析器丢失 CDATA 中转义符号周围的空格

使用 CreateWindowEx 创建一个没有图标的窗口

c++ - 无法在 Windows 中以编程方式 (C++) 从其他用户帐户读取文件

C++ 头重新定义 (ws2ipdef.h)

c++ - 循环依赖是好是坏

关于编写代码的 C++ 建议

c - 为 IPv6 套接字调用连接时出现无效参数错误

php - 如何获取套接字类型?