我想知道哪些进程正在使用我的网络。这在Linux中很容易,但我对如何在Windows中执行此操作感到困惑。
基本上,我希望,对于每个进程,要知道它在一段时间内读取/写入网络的字节数。如果我能知道IP地址/端口号等,那就太棒了。
任何指针? Windows Vista / Windows 2008似乎能够在资源监视器中执行此操作。他们是如何做到的呢?什么是开销?
我想在我自己的代码中执行此操作,因此实用程序(TCPView,PerfMon)对我没用。我还想拥有单独的磁盘和网络I / O计数器,因此默认的性能计数器还不够。
Windows XP,2003,Vista,2008和7首选。 Win32或COM OK。
答案 0 :(得分:3)
经过深入研究后,我得出的是:
iexplore.exe 864 TCP tin 61207 a96-17-203-64.deploy.akamaitechnologies.com http ESTABLISHED 2 12,928 8 9,420
因此...
一种可能的解决方案是使用TCPVIEW并通过脚本以编程方式生成的击键来控制它。您可以将刷新间隔设置为1,10,30等分钟,并让脚本发送按键以使TCPVIEW将输出保存在文件中。您可能希望脚本以刷新间隔的一半或三分之一发送击键,以确保获得的快照至少与刷新间隔的1/2或2/3一样长。您可以使用Import-CSV导入文件,并在脚本中轻松操作它。
或者...
你可以自虐并使用ETW。
或者...
你可以离开深层并将Linux的proc文件系统(正如你所说,从脚本中使用起来要容易得多)移植到Windows: - )
答案 1 :(得分:1)
你会惊讶于你可以从Perfmon中获得的东西。
打开它,右键单击图形区域,然后选择“添加计数器...”。到处闲逛,看看有什么能满足您的需求。
从我对你所问的内容的阅读中,我选择“进程”作为我的性能对象,并开始从进程列表中选择可能看起来很多的罪魁祸首,可能正在监视“IO数据字节/秒”计数器。如果你在那里乱七八糟,你可能会发现一些对你来说更有用的东西。
修改强>: 我注意到它说的是“Programatically”(它昨天说过吗?)
好吧,你实际上可以通过密钥HKEY_PERFORMANCE_DATA
获得Perfmon从注册表中获取的所有信息。我认为这就是Perfmon所枚举和使用的内容,所以你应该能够使用perfmon来查看那里有什么并且适合你,然后编写代码在你自己的程序中实时读取它。
这种方法的一个非常好的方法是,如果你有合适的权限,它甚至可以远程工作。
答案 2 :(得分:1)
答案 3 :(得分:1)
我为此写了一个解决方案。
用于收集统计数据的TDI过滤器驱动程序,这是一种与驱动程序通信并每秒获取一次统计数据的服务。由于过滤器位于TDI层,我知道哪些套接字属于哪些应用程序。该服务是这个数据的服务器,通过我写的API通过共享内存提供给任意第三方客户端。我写了一个GUI和一个命令行客户端。
您还可以带宽形状发送(每个接口和/或应用程序和/或套接字),并在窗口中实时查看通过套接字传递的数据。
答案 4 :(得分:0)
将ETW与EVENT_TRACE_FLAG_NETWORK_TCPIP一起使用将完成此工作。