代码之家  ›  专栏  ›  技术社区  ›  smok1

从Windows上的套接字编号获取PID?

  •  2
  • smok1  · 技术社区  · 15 年前

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

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

    那么有什么“getpidofsocket”功能吗?该解决方案仅为WinAPI(NO.NET),可以使用各种语言,如C++、Delphi。

    1 回复  |  直到 15 年前
        1
  •  2
  •   snowcrash09    15 年前

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

    参见SysInternals C源代码 netstatp here . 没有很多,值得一看。