要获取 Windows 下指定进程的发送和接收网络流量,可以使用 Windows API 函数来实现。以下是一个使用 C++ 编写的示例代码:

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

// 链接 IPHlpAPI.lib 库
#pragma comment(lib, "IPHlpAPI.lib")

// 获取指定进程的网络流量
void GetProcessNetworkTraffic(DWORD processId)
{
    MIB_TCPTABLE_OWNER_PID tcpTable;
    DWORD size = sizeof(tcpTable);

    // 获取 TCP 连接表
    if (GetExtendedTcpTable(&tcpTable, &size, TRUE, AF_INET, TCP_TABLE_OWNER_PID_ALL, 0) == ERROR_SUCCESS)
    {
        // 遍历 TCP 连接表
        for (DWORD i = 0; i < tcpTable.dwNumEntries; i++)
        {
            MIB_TCPROW_OWNER_PID tcpRow = tcpTable.table[i];

            if (tcpRow.dwOwningPid == processId)
            {
                std::cout << 'Local Address: ' << (tcpRow.dwLocalAddr & 0xFF) << '.' << ((tcpRow.dwLocalAddr >> 8) & 0xFF) << '.' << ((tcpRow.dwLocalAddr >> 16) & 0xFF) << '.' << ((tcpRow.dwLocalAddr >> 24) & 0xFF) << ':' << ntohs((u_short)tcpRow.dwLocalPort) << std::endl;
                std::cout << 'Remote Address: ' << (tcpRow.dwRemoteAddr & 0xFF) << '.' << ((tcpRow.dwRemoteAddr >> 8) & 0xFF) << '.' << ((tcpRow.dwRemoteAddr >> 16) & 0xFF) << '.' << ((tcpRow.dwRemoteAddr >> 24) & 0xFF) << ':' << ntohs((u_short)tcpRow.dwRemotePort) << std::endl;
                std::cout << 'State: ' << tcpRow.dwState << std::endl;
                std::cout << 'Process ID: ' << tcpRow.dwOwningPid << std::endl;
                std::cout << '--------------------------------------' << std::endl;
            }
        }
    }
    else
    {
        std::cout << 'GetExtendedTcpTable failed with error: ' << GetLastError() << std::endl;
    }
}

int main()
{
    DWORD processId = 1234; // 替换为要获取网络流量的进程 ID

    GetProcessNetworkTraffic(processId);

    return 0;
}

上述代码使用了 GetExtendedTcpTable 函数来获取 TCP 连接表,并遍历表中的每个连接。通过比较连接的 dwOwningPid 字段与指定的进程 ID,可以筛选出指定进程的连接。然后,可以获取连接的本地地址、远程地址、状态和进程 ID 等信息。

请注意,上述代码仅适用于获取 TCP 连接的网络流量。如果需要获取 UDP 连接的网络流量,可以使用 GetExtendedUdpTable 函数,并相应地更改代码。

C++ 获取 Windows 指定进程网络流量

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

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