为什么 wmic 会对“BytesReceivedPersec”和“BytesSentPersec”的输出撒谎?

为什么 wmic 会对“BytesReceivedPersec”和“BytesSentPersec”的输出撒谎?

执行这个命令:

wmic path Win32_PerfRawData_Tcpip_NetworkInterface get BytesReceivedPersec,BytesSentPersec

对于我来说,对于运行超过 11 小时的计算机,它目前输出:

BytesReceivedPersec  BytesSentPersec
11588538117          926338643

从人类的角度来看,这意味着:

11.59 GB
926.34 MB

这符合全部的我认为我今天已经收到和发送了流量。但这毫无意义,因为列中写的是“PerSec”。

要获得实际数字,我必须将这些字节数乘以“我的计算机运行的秒数”,当前为 39882(约 11 小时)。但如果我这样做,我会得到疯狂地大图:

11588538117 * 39882 = 462.17 TB
926338643 * 39882 = 36.94 TB

如果我今天下载了 462 TB 的数据并发送了 36 TB 的数据,那么一定有什么地方出了问题。第一个数字是“每秒”,似乎实际上对应于“自计算机开启以来的总量”,这正是我想要的。

那么为什么它们被称为“PerSec”?为什么命令会撒谎?还是我的互联网连接速度出乎​​意料地快,而我的计算机被秘密用作中央互联网枢纽,路由大部分互联网流量?

答案1

Win32_PerfRawData具有“原始”数据,需要先处理才能显示实际统计数据。您必须使用Win32_PerfFormattedData 具有“格式化”数据的类。这意味着:

wmic path Win32_PerfFormattedData_Tcpip_NetworkInterface get BytesReceivedPersec,BytesSentPersec

例如: 在此处输入图片描述 这不可能,即使我的带宽也不允许。但是: 在此处输入图片描述

[stackoverflow 上的参考资料 1][参考文献 2][参考文献 3]
虽然我没有找到任何*官方*文件……但我自己知道这是真的。
还有一件事——计算机从不“撒谎”,它们只是按照指令做任何事情。如果你说“撒谎”,这几乎就像问了一个问题,并期待另一个问题的答案。

相关内容