我正在寻找一种像windows下的Resource Monitor那样获取信息列表的方法,比如:
我想知道所选应用程序的地址以及发送和接收的使用量。
一开始我正在寻找 C++ win32 api 或其他开源库来执行此操作,我可以找到类似 GetProcessInformation 的东西。但不包含网络信息。
我看到了一些类似的主题,但没有帮助。
Ref_001 , 似乎网络监控 api 不能做应用程序特定的监控。
Ref_002 ,我不确定 OpenTrace/ProcessTrace/StopTrace
是否可以获取网络使用情况,我也不确定如何使用它。
Ref_003 , 他们建议使用一些工具,但这不是我想要的。
最佳答案
Windows 为您提供了来自不同功能的两个部分的此信息,您需要将这些信息放在一起才能获得完整的故事。嗯,从技术上讲,它是三个函数:对于数据的第二部分,IPv4 和 IPv6 数据有单独的函数。
第一个函数是GetExtendedTcpTable .要获得上述所有信息,您可能需要(至少)调用此方法两次:一次使用 TCP_TABLE_OWNER_PID_CONNECTIONS
标志,一次使用 TCP_TABLE_OWNER_MODULE_CONNECTIONS
标志来检索两者本地可执行文件的 PID 和模块名称。
第二对为您提供有关在特定连接上发送/接收的数据的统计信息。每个连接都由本地地址/端口和远程地址端口的组合标识(与上面使用的相同)。您使用 GetPerTcpConnectionEStats 检索信息对于 IPv4 或 GetPerTcp6ConnectionEStats用于 IPv6。
其中任何一个都将检索一个表,表中的每一行都包含一个连接的统计信息。如果您(例如)在浏览器中打开了多个选项卡,可以选择单独显示每个连接的数据,或者您可以根据需要合并它们。
关于c++ - windows下如何监控进程网络使用情况,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44689482/