5

我需要确定类似于 TCPView 可以执行的每个进程的网络使用统计信息。

示例 http://img513.imageshack.us/img513/861/6601f15814544055a590e26.png

因此,在您因发布此问题此问题的副本而向我开枪之前,我想指出,这些都没有可以帮助我真正做到这一点的彻底答案。

我一直在做研究,显然有很多方法可以列出活动连接及其相关进程,无论是 netstat 还是其他 Windows API,如IpHlpAPI.dll

现在,从我所做的谷歌搜索来看,我没有找到太多 - 除了这些模糊的术语:GetPerTcpConnectionEStatsGetPerTcp6ConnectionEStats。大概分别用于 IPv4 和 IPv6 上的 TCP。现在我正在阅读它应该能够做我需要做的事情。但是,这仍然忽略了 UDP。这些在 TCPViewer 工作的 XP 系统上也不可用。

我会很满意将它们用于 TCP,但问题是,我似乎找不到任何关于如何从 C# 中使用它们的示例。

所以我想这一切都归结为以下几个问题:

  • 有人真的知道 TCPView 是怎么做的吗?
  • 如何为 TCP 使用 GetPerTcpConnectionEStats?或者它甚至可以完成我的建议吗?
  • 是否有另一种适用于 UDP 的已知替代方案?

这样做的重点是查看进程本身的独立带宽使用情况。不计算总系统带宽使用量。

提前感谢您的任何和所有答案。

4

1 回答 1

2

我花了一些时间试图弄清楚我将如何做类似的事情(延迟与带宽),但由于缺乏投资时间而不得不放弃。我想我会在这里添加我的发现,希望我们最终能得到答案。

您显然需要使用 PInvoke,恐怕细节远远超出了我的经验。

CodeProject 上的这个Wrapper Library使用AllocateAndGetTcpExTableFromStack,它只适用于 Windows XP 和 Server 2003。尽管很抱歉,它仍然无法为您提供带宽。

我能找到的最接近的信息(对于 Vista/Server 2008 或更高版本)是 pinvoke.net 上的GetExtendedTcpTable示例。

PInvoke Interop Assistant工具可能有助于确定如何调用非托管代码。

如果我要继续尝试这个,我会尝试找出以下内容:

  1. 如何调用SetPerTcpConnectionEStats以通过适当的TCP_ESTATS_TYPE启用 TcpConnectionEstatsBandwidth 的收集。
  2. 我会使用IPGlobalProperties.GetActiveTcpConnections来获取创建MIB_TCPROW所需的信息。
  3. 确定如何调用GetPerTcpConnectionEStats来监控数据。
于 2012-05-18T07:06:23.183 回答