监控.NET中的互联网使用情况

4
我想在C#中编写一个方法,以检查我的计算机/服务器上哪些应用程序在特定时间点使用互联网连接,如果可能的话,还要检查它们正在使用多少带宽。请问有谁可以帮我开始这个项目?

1
这可能会有所帮助 --> https://dev59.com/XHRB5IYBdhLWcg3wn4jc - digEmAll
1
另外,请查看这个问答:https://dev59.com/QXRC5IYBdhLWcg3wAcM3 - digEmAll
感谢@dig的见解。我认为这将是一个有用的开始。您可以将其转换为答案,以便我可以标记它。 - samar
我不应该得到任何分数,因为我只是链接了另一个问答。你应该考虑给那个问答点赞,如果你认为它和这个问题一样,你应该关闭你的问题 :-) - digEmAll
@samar 请阅读常见问题解答:“在提问之前,请先查看是否已经有人问过(甚至可能已经回答了!)”。digEmAll已经为您指出了答案https://dev59.com/XHRB5IYBdhLWcg3wn4jc,请参考第二个答案。如果您已经尝试了示例代码,请更新您的问题并附上您遇到的错误:) - Searock
显示剩余3条评论
3个回答

3
我决定写一篇答案,因为评论太小了。阅读stackoverflow上的其他问答并在互联网上查找后,我没有找到您问题的简单解决方案。实际上,对于.NET进程来说非常简单,您只需要从“ .NET CLR Networking-Bytes Received/Bytes Sent”性能计数器中检索信息,如所示。但是,通常情况下,获取每个进程使用的带宽并不容易。例如,“Microsoft Network Monitor”嗅探器只能跟踪生成Internet数据包的进程,仅适用于TCP流量,因为它可能将IP端口对与使用它们的进程进行映射(或类似的内容,TCP是一个连接协议,因此更简单)。无论如何,如果您想尝试,请使用公开的API(请参阅博客文章以获取一些提示)。
然而,正如这些问答中所建议的(链接1链接2),正确且可能唯一的方法是编写一个可以拦截网络流量并向其公开.NET可调用API的NDIS/TDI驱动程序。

问题在于这样的驱动程序无法用托管代码编写,因此需要使用C/C++进行实现。
显然,如果您成功找到一个已经编写好的驱动程序/嗅探器并公开了可调用的API,则可以使用它。
例如,WinPCap就有这样一个API(以及一些.NET包装器,如SharpPCapPCap.Net),但我不确定(不确定)它是否能够获取数据包的源进程信息。


0

我发现进程监视器是一个非常有用的工具,它满足了我的需求,所以我不需要编写任何代码,尽管我还没有检查它是否提供任何API,我可以在我的应用程序中使用它来获取一些我需要的信息。

感谢大家的帮助。


0

正如digEmAll所指出的,在Vista之前的Windows版本中,你只能编写自己的驱动程序或使用第三方驱动程序。在Vista、2008和Windows 7中,你可以使用GetPerTcpConnectionEStats API(MSDN页面上有一个大的使用示例)。资源监视器依赖于这个API以及旧的GetTcpTable/GetTcpRow API来获取扩展的网络统计信息。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接