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

Example http://img513.imageshack.us/img513/861/6601f15814544055a590e26.png

因此,在向我发布this questionthis question副本时,我想指出的是,这两个都没有一个彻底的答案可以帮助我真正地做到这一点。

我一直在进行研究,并且显然有很多方法可以列出事件的连接及其关联的过程,无论是使用netstat还是其他Windows API(例如IpHlpAPI.dll)。

现在,从Google所做的事情来看,除了以下模糊的术语外,我发现的内容不多: GetPerTcpConnectionEStats GetPerTcp6ConnectionEStats 。大概分别用于基于IPv4和IPv6的TCP。现在,我正在阅读它据称能够做我需要做的事情。但是,这仍然省去了UDP。并且这些在TCPViewer可以工作的XP系统上也不可用。

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

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

  • 真的有人知道TCPView是如何做到的吗?
  • 如何为TCP使用GetPerTcpConnectionEStats?还是可以完成我的建议?
  • 是否存在另一种适用于UDP的已知替代方法?

  • 整个要点是查看进程本身的独立带宽使用情况。不计算系统总带宽使用量。

    在此先感谢您提供所有答案。

    最佳答案

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

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

    Wrapper Library on CodeProject使用的AllocateAndGetTcpExTableFromStack仅在Windows XP和Server 2003上有效。尽管遗憾,它仍然无法获得带宽。

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

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

    如果要继续尝试,我将尝试找出以下几点:

  • 如何调用SetPerTcpConnectionEStats以通过适当的TCP_ESTATS_TYPE启用TcpConnectionEstatsBandwidth的收集。
  • 我将使用IPGlobalProperties.GetActiveTcpConnections获取创建MIB_TCPROW所需的信息。
  • 确定如何调用GetPerTcpConnectionEStats来监视数据。
  • 关于c# - 获取每个连接的带宽统计信息,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9651576/

    10-12 16:07