要获取 Windows 10 下资源监视器中网络活动的进程发送和接收流量,你可以使用 Windows API 函数来实现。以下是一个示例代码,它使用 GetTcpTable2 函数来获取 TCP 连接信息,并使用 GetProcessIdOfTcpEntry 函数来获取进程 ID。然后,使用 GetProcessImageFileName 函数来获取进程的可执行文件路径,并使用 GetProcessIoCounters 函数来获取进程的 I/O 计数器信息。

#include <iostream>
#include <windows.h>
#include <iphlpapi.h>
#include <psapi.h>

#pragma comment(lib, "iphlpapi.lib")
#pragma comment(lib, "psapi.lib")

int main()
{
    MIB_TCPTABLE2* pTcpTable;
    DWORD dwSize = 0;

    // 获取TCP连接信息
    if (GetTcpTable2(pTcpTable, &dwSize, TRUE) == ERROR_INSUFFICIENT_BUFFER)
    {
        pTcpTable = (MIB_TCPTABLE2*)malloc(dwSize);
        if (GetTcpTable2(pTcpTable, &dwSize, TRUE) != NO_ERROR)
        {
            free(pTcpTable);
            std::cout << "Failed to get TCP table" << std::endl;
            return 1;
        }
    }
    else
    {
        std::cout << "Failed to get TCP table size" << std::endl;
        return 1;
    }

    // 遍历TCP连接信息
    for (DWORD i = 0; i < pTcpTable->dwNumEntries; i++)
    {
        MIB_TCPROW2 tcpRow = pTcpTable->table[i];

        // 获取进程ID
        DWORD dwProcessId = GetProcessIdOfTcpEntry(&tcpRow);

        // 获取进程可执行文件路径
        HANDLE hProcess = OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, FALSE, dwProcessId);
        if (hProcess != NULL)
        {
            CHAR szProcessPath[MAX_PATH];
            if (GetProcessImageFileNameA(hProcess, szProcessPath, MAX_PATH) > 0)
            {
                std::cout << "Process ID: " << dwProcessId << std::endl;
                std::cout << "Process Path: " << szProcessPath << std::endl;

                // 获取进程的I/O计数器信息
                IO_COUNTERS ioCounters;
                if (GetProcessIoCounters(hProcess, &ioCounters))
                {
                    std::cout << "Bytes Sent: " << ioCounters.WriteTransferCount << std::endl;
                    std::cout << "Bytes Received: " << ioCounters.ReadTransferCount << std::endl;
                }
            }
            CloseHandle(hProcess);
        }
    }

    free(pTcpTable);
    return 0;
}

请注意,此代码仅获取 TCP 连接的进程发送和接收流量。如果你想获取其他类型的网络连接(如 UDP 连接),你需要相应地修改代码。此外,为了使用这些 Windows API 函数,你需要包含相应的头文件,并链接相应的库文件。

C++ 获取 Windows 10 资源监视器中进程网络流量

原文地址: https://www.cveoy.top/t/topic/fQ6k 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录