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

本文关键字:带宽 统计 信息 连接 获取 | 更新日期: 2023-09-27 18:27:18

我需要确定每个进程的网络使用情况统计数据,类似于TCPView的功能。

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

所以,在你因为我发布了这个问题或这个问题的副本而向我开枪之前,我想指出的是,这两个问题都没有一个彻底的答案可以帮助我真正做到这一点。

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

现在,从我在谷歌上所做的工作来看,我没有发现太多——除了这些模糊的术语:GetPerTcpConnectionEStatsGetPerTcp6ConnectionEStatis

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

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

  • 有人知道TCPView是怎么做到的吗
  • 如何将GetPerTcpConnectionEStats用于TCP?或者它能实现我的建议吗
  • 是否还有其他已知的适用于UDP的替代方案

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

提前感谢您的任何答案。

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

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

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

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

作为起点(对于Vista/Server2008或更新版本),我能找到的最接近的信息是pinvoke.net上GetExtendedTcpTable的一个例子。

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

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

  1. 如何通过适当的TCP_ESTATS_TYPE调用SetPerTcpConnectionEStats以启用TcpConnection EstatsBandwidth的收集
  2. 我会使用IPGlobalProperties.GetActiveTcpConnections来获取创建MIB_TCPROW所需的信息
  3. 确定如何调用GetPerTcpConnectionEStats来监视数据