0

我想使用 vb.net 为 Windows 创建一个带宽计,但我似乎在 .net 框架中找不到任何东西来监视输入或输出的数据量。我想创建它,因为我找不到免费的好东西,而且我认为这是人们可能想要的东西。

如果 .net 框架中没有任何东西可以监控这一点,我可以进行一些 P/Invoke 调用吗?如果是这样,它们是什么?

这个项目可行吗?如果可能,我想尝试从所有程序和连接中测量输入和输出的确切数据量。

感谢您的帮助!

编辑:澄清一下,虽然我怀疑会有类似My.Computer.Network.IO或类似的简单的东西,但我真的不想让它太复杂。

再次编辑:也许这太复杂了。如果我只是想监视端口 80 上的 http 活动,我怎么能在不真正干扰数据的情况下做到这一点?

4

6 回答 6

1

您需要进入驱动程序级别并监视您的以太网设备并计算出入的字节数。

我很确定这将涉及 P/Invoke。不要以为这很简单...

于 2009-12-16T01:04:50.547 回答
1

一些可能性:

  • WinPCap - 但是不会给你应用程序
  • LSP - 作为 DLL 加载到任何使用 Winsock 的进程中。为您提供您想要监控每个应用程序的流量的所有内容,但编写起来并不简单。
  • WMI - 每个网络接口的聚合总数:http: //msdn.microsoft.com/en-us/library/aa394293 (VS.85).aspx
于 2009-12-16T01:11:08.023 回答
1

你可以很容易地作弊:

  1. 使用 cmd.exe 创建进程
  2. 调用命令“netstat -e 10”(持续 10 秒)
  3. 将输出作为输入流传送回您的应用程序
  4. 解析输入流
  5. 如果用户决定退出程序,则向进程发送一个 ctrl-c 中断序列。

你怎么看?

希望这会有所帮助,最好的问候,汤姆。

于 2009-12-16T01:15:02.183 回答
1

这里有几种可能性:

于 2009-12-16T01:16:10.170 回答
1

最好的办法是使用性能计数器或 WMI,并以适合您的频率进行采样。如果您试图获得类似于网卡属性上的字节数的东西,那么这些计数器在性能计数器集中。

如果您还尝试测量所有设备(USB 等),您可能需要编写自己的客户驱动程序来拦截数据传输事件。

于 2009-12-16T01:20:53.043 回答
1

有几个性能计数器可以为您提供网络接口卡吞吐量的基本数字。首先使用 Perfmon.exe 查看它们,您将看到它们的类别、名称和实例名称。这些相同的数字可用于 .NET PerformanceCounter 类。

使用它们来测量带宽是相当棘手的,您更有可能测量您正在与之交谈的服务器的带宽,并结合将 IP 消息传送到您的机器的十几个路由器。

于 2009-12-16T01:21:41.393 回答