【问题标题】:How to get the number of open TCP connections held by a certain process in .NET如何获取.NET中某个进程持有的打开的TCP连接数
【发布时间】:2011-07-21 00:18:39
【问题描述】:

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

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

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

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

找不到名为的入口点 'AllocateAndGetTcpExTableFromStack' 在 DLL 'iphlpapi.dll'。

我们如何在 64 位 Windows 上做到这一点?

【问题讨论】:

标签: .net winapi windows-7 pinvoke


【解决方案1】:

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

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

您也可以尝试在上面引用的 DLL 中为 GetExtendedTcpTable() 使用 PInvoke。我没有要测试的 x64 机器,但这可能是对您尝试调用的特定函数的简单弃用。

【讨论】:

猜你喜欢
  • 2011-03-04
  • 2023-03-11
  • 1970-01-01
  • 1970-01-01
  • 2021-12-16
  • 1970-01-01
  • 2012-02-19
  • 1970-01-01
  • 2017-05-22
相关资源
最近更新 更多