[英]process/application wise internet usage statistics on a machine in .net
[英]monitor internet usage in .net
我想在C#中编写一个方法来检查我的机器/服务器中的哪些应用程序在特定时间点使用互联网连接,如果可能,我们使用了多少带宽。 谁能帮助我在这方面取得先机?
我决定写一个答案因为评论太小了。
那么,在stackoverflow上阅读其他问答并在互联网上四处看看,我找不到一个简单的解决方案来解决你的问题。
实际上,对于.NET进程非常简单,您只需要从“.NET CLR Networking - Bytes Received / Bytes Sent”性能计数器中检索信息,如此问答所示
但总的来说,获取每个进程使用的带宽并不容易。
例如, “Microsoft网络监视器”嗅探器可以跟踪仅为TCP流量生成Internet数据包的进程,因为可能它将IP端口对映射到使用它们的进程(或类似的东西,TCP是连接协议,因此它更简单)。
无论如何,如果您想尝试一下,您可以使用公开的API(请查看此博客条目以获取一些提示)。
但是,正如这些问答( LINK 1 , LINK 2 )中所建议的那样,正确的,也许唯一的方法是编写一个NDIS / TDI驱动程序,它可以拦截网络流量并向其公开.NET可调用API。
问题是这些驱动程序无法用托管代码编写,因此您需要在C / C ++中实现它。
显然,如果你设法找到一个已经编写的驱动程序/嗅探器暴露可调用的API,你可以使用它。
例如, WinPCap有一个(和一些.NET包装器,如SharpPCap或PCap.Net ),但我不认为(不确定)它能够获取数据包的源进程信息。
正如digEmAll所指出的那样,在Vista之前的Windows中,您可以减少编写自己的驱动程序或使用第3方的驱动程序。 在Vista,2008和Windows 7中,您可以使用GetPerTcpConnectionEStats
API(在MSDN页面上有一个很大的用法示例)。 资源监视器依赖此API以及旧的GetTcpTable
/ GetTcpRow
API来扩展网络统计信息。
我发现Process Monitor是一个非常有用的工具,它符合我的目的所以我不必编写任何代码,虽然我还没有检查它是否提供了我可以在我的应用程序中使用的任何API来获取我需要的一些信息。
谢谢大家帮助我。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.