gpt4 book ai didi

performance - 在 Windows 上以编程方式获取每个进程的网络统计信息?

转载 作者:行者123 更新时间:2023-12-02 06:00:58 25 4
gpt4 key购买 nike

我想了解哪些进程正在使用我的网络。这在 Linux 中非常简单,但我对如何在 Windows 中做到这一点感到困惑。

本质上,对于每个进程,我想知道它在一段时间内读取/写入网络的字节数。如果我能知道 IP 地址/端口号等,那就太棒了。

有什么指点吗? Windows Vista/Windows 2008 似乎能够在资源监视器中执行此操作。他们是如何做到的呢?开销是多少?

我想在自己的代码中执行此操作,因此实用程序(TCPView、PerfMon)对我来说没有用。我还希望有单独的磁盘和网络 I/O 计数器,因此默认性能计数器是不够的。

首选 Windows XP、2003、Vista、2008 和 7。 Win32 或 COM 可以。

最佳答案

经过大量研究,我得出的结论是:

  1. 各个论坛上有许多帖子要求提供相同的信息。
  2. 我看到的唯一可能编程解决方案是使用 Windows 事件跟踪 (ETW)。这需要一本小书才能解释/理解。
  3. 可从注册表获取的 PERF 计数器不适合 Powershell。它们使用设计供 C/C++ 程序使用的数据结构。一个非常完整的示例的 URL:http://msdn.microsoft.com/en-us/library/windows/desktop/aa372138(v=vs.85).aspx
  4. SysInternals 有 TCPVIEW,可以按进程显示网络使用情况。当您启动它时,大多数进程不会显示任何使用情况。它似乎只收集其运行期间的使用信息。这增强了 ETW 正在被使用的想法。
  5. 如果我使用 IE9 浏览网站,我会看到 TCPVIEW 中正在创建进程。在大多数情况下,进程会在一分钟左右消失(终止) - 以及进程的统计信息。
  6. 与 ProcessExplorer 类似,创建进程时,它们会突出显示为绿色,而当进程被销毁时,它们会突出显示为红色。
  7. 红色突出显示的进程在下次更新后消失。更新频率可以是 1、2 或 5 秒。但是,有一个注册表设置 HKEY_CURRENT_USER\Software\Sysinternals\TCPView\Settings 可以修改以设置其他刷新频率。 If 是偏移量 0x98 处的 DWORD,单位为毫秒。
  8. TCPVIEW 有一个“保存”/“另存为”菜单项。输出是一个空格分隔的文本文件,其中包含当前显示在 GUI 中的每个进程的使用情况统计信息。以下是文件中的示例行。行末尾的数字是接收的 pkts/sec、接收的字节/秒、传输的 pkts/sec 和字节/秒(不一定按此顺序)iexplore.exe 864 TCP 锡 61207 a96-17-203-64.deploy.akamaitechnologies.com http 已建立 2 12,928 8 9,420

所以...

一个可能的解决方案是使用 TCPVIEW 并通过从脚本中以编程方式生成的击键来控制它。您可以将刷新间隔设置为 1、10、30 分钟等,并让脚本发送击键以使 TCPVIEW 将输出保存在文件中。您可能希望脚本以刷新间隔的一半或三分之一发送击键,以确保您获得的快照至少与刷新间隔的 1/2 或 2/3 一样长。您可以使用 Import-CSV 导入文件,并在脚本中轻松操作它。

或者...

你可能会变得受虐狂并使用 ETW。

或者...

您可以深入研究并将 Linux 的 proc 文件系统(正如您所指出的,从脚本中使用起来要容易得多)移植到 Windows :-)

关于performance - 在 Windows 上以编程方式获取每个进程的网络统计信息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/630285/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com