正在获取每个连接的带宽统计信息
本文关键字:带宽 统计 信息 连接 获取 | 更新日期: 2023-09-27 18:27:18
我需要确定每个进程的网络使用情况统计数据,类似于TCPView的功能。
示例http://img513.imageshack.us/img513/861/6601f15814544055a590e26.png
所以,在你因为我发布了这个问题或这个问题的副本而向我开枪之前,我想指出的是,这两个问题都没有一个彻底的答案可以帮助我真正做到这一点。
我一直在做研究,很明显有很多方法可以列出活动连接及其相关进程,无论是使用netstat还是其他窗口API的IpHlpAPI.dll。
现在,从我在谷歌上所做的工作来看,我没有发现太多——除了这些模糊的术语:GetPerTcpConnectionEStats和GetPerTcp6ConnectionEStatis 我会满足于将它们用于TCP,但问题是,我似乎找不到任何关于如何从C#中使用它们的例子。 所以我想这一切都归结为以下几个问题: 这样做的全部目的是查看进程本身的独立带宽使用情况。不计算系统带宽使用总量。 提前感谢您的任何答案。
我花了一些时间试图弄清楚如何做类似的事情(延迟与带宽),但由于没有时间投资,我不得不放弃。我想我应该把我的发现添加到这里,希望我们最终能得到答案。
你显然需要使用PInvoke,恐怕细节远远超出了我的经验。
CodeProject上的这个包装器库使用AllocateAndGetTcpExTableFromStack,它只适用于Windows XP和Server 2003。尽管很抱歉,它仍然无法为您提供带宽。
作为起点(对于Vista/Server2008或更新版本),我能找到的最接近的信息是pinvoke.net上GetExtendedTcpTable的一个例子。
PInvoke Interop Assistant工具可能有助于确定如何调用非托管代码。
如果我继续尝试,我会尝试找出以下内容:
- 如何通过适当的TCP_ESTATS_TYPE调用SetPerTcpConnectionEStats以启用TcpConnection EstatsBandwidth的收集
- 我会使用IPGlobalProperties.GetActiveTcpConnections来获取创建MIB_TCPROW所需的信息
- 确定如何调用GetPerTcpConnectionEStats来监视数据