获取每个连接带宽统计信息

cae*_*say 5 c# windows networking netstat iphelper

我需要确定与TCPView可以做的类似的每进程网络使用情况统计信息.

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

因此,在你拍我发布这个问题的副本或者这个问题之前,我想指出的是,这些问题都没有一个彻底的答案可以帮助我实际做到这一点.

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

现在,从谷歌的做法来看,我没有找到太多 - 除了这些模糊的术语:GetPerTcpConnectionEStatsGetPerTcp6ConnectionEStats.大概分别用于TCP over IPv4和IPv6.现在我正在阅读它所谓的能够做我需要做的事情.但是,这仍然留下了UDP.这些也不适用于TCPViewer工作的XP系统.

我会对使用TCP的那些感到满意,但问题是,我似乎无法找到如何从C#中使用它们的任何示例.

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

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

这一点的全部意义在于查看进程本身的独立带宽使用情况.不计算系统总带宽使用情况.

提前感谢任何和所有答案.

Has*_*rin 2

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

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

CodeProject 上的这个包装器库使用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来监控数据。