如何获取.NET中某个进程持有的开放TCP连接数

时间:2011-03-23 03:30:22

标签: .net winapi windows-7 pinvoke

我需要在.NET 4.0上监视64位Windows 7计算机上单个进程持有的打开TCP连接数。

本文介绍了在32位窗口上完成此任务的未记录的Win32 API方法“AllocateAndGetTcpExTableFromStack”:

http://www.codeproject.com/KB/IP/iphlpapi.aspx?display=Print

但这在我的机器上失败了(大概是因为我在64位上):

  

无法找到名为的入口点   'AllocateAndGetTcpExTableFromStack'中   DLL'iplpapi.dll'。

我们如何在64位Windows上执行此操作?

1 个答案:

答案 0 :(得分:4)

您可以通过System.Net.NetworkInformation获得良好的开端。特别是IPGlobalProperties.GetActiveTcpConnections

但是,您会发现此库不会公开PID,因此无法通过与每个连接关联的特定进程来缩小它。我猜测简单地将控制台netstat -ano的输出解析为托管对象集合会更容易,并使用简单的LINQ查询根据进程ID提取所需的特定连接。但是,如果您经常这样做,我不建议这样做,因为这将是一个非常缓慢的方法。

您也可以在上面引用的DLL中尝试GetExtendedTcpTable()的PInvoke。我没有测试我的x64盒子,但它可能是你试图调用的特定功能的简单弃用。