【问题标题】:PID from socket number on Windows?Windows上套接字号的PID?
【发布时间】:2010-10-23 14:41:59
【问题描述】:

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

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

那么有什么“GetPIDOfSocket”函数吗?由于可以使用各种语言,例如 C++、Delphi,因此只能使用 WinAPI(无 .net)解决方案。

【问题讨论】:

  • 您似乎是最近才加入的,请允许我给您一个提示:提供您使用的编程语言通常会有所帮助。你仍然有一个空的标签槽来填充它:)

标签: c++ winapi sockets winsock pid


【解决方案1】:

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

请参阅 netstatp here 的 SysInternals C 源代码。数量不多,值得一看。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-05-12
    • 2013-11-01
    • 1970-01-01
    • 2013-06-20
    • 2019-09-26
    • 1970-01-01
    • 2020-08-08
    相关资源
    最近更新 更多