C++获取特定进程网络发送与接收速率

本文提供了一个C++代码示例,演示如何使用Windows API函数获取特定进程的网络发送和接收速率。

代码示例

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

#pragma comment(lib, 'iphlpapi.lib')
#pragma comment(lib, 'ws2_32.lib')

// 获取特定进程的网络发送和接收速率
void GetProcessNetworkActivity(DWORD processId) {
    // 获取TCP连接信息
    MIB_TCPTABLE_OWNER_PID tcpTable;
    DWORD dwSize = sizeof(tcpTable);
    if (GetExtendedTcpTable(&tcpTable, &dwSize, TRUE, AF_INET, TCP_TABLE_OWNER_PID_ALL, 0) != NO_ERROR) {
        std::cout << 'Failed to get TCP table.' << std::endl;
        return;
    }

    // 遍历TCP连接信息,找到指定进程的连接
    for (DWORD i = 0; i < tcpTable.dwNumEntries; i++) {
        MIB_TCPROW_OWNER_PID row = tcpTable.table[i];
        if (row.dwOwningPid == processId) {
            // 计算发送速率和接收速率
            ULONGLONG sendRate = row.dwCurrSendBytes - row.dwPrevSendBytes;
            ULONGLONG receiveRate = row.dwCurrRecvBytes - row.dwPrevRecvBytes;

            std::cout << 'Process ID: ' << processId << std::endl;
            std::cout << 'Send Rate: ' << sendRate << ' bytes/sec' << std::endl;
            std::cout << 'Receive Rate: ' << receiveRate << ' bytes/sec' << std::endl;

            // 更新前一次的发送和接收字节数
            row.dwPrevSendBytes = row.dwCurrSendBytes;
            row.dwPrevRecvBytes = row.dwCurrRecvBytes;

            break; // 找到指定进程的连接后,结束循环
        }
    }
}

int main() {
    DWORD processId = 1234; // 替换为你要获取网络活动的进程ID
    GetProcessNetworkActivity(processId);

    return 0;
}

说明

  • 该代码示例使用了 GetTcpStatistics 函数和 GetExtendedTcpTable 函数来获取TCP连接的信息。
  • 首先,调用 GetExtendedTcpTable 函数获取所有TCP连接的信息,并将其存储在 MIB_TCPTABLE_OWNER_PID 结构体中。
  • 然后,遍历 MIB_TCPTABLE_OWNER_PID 结构体,查找与指定进程ID匹配的连接。
  • 找到匹配的连接后,使用 MIB_TCPROW_OWNER_PID 结构体中的 dwCurrSendBytesdwPrevSendBytes 字段计算发送速率,使用 dwCurrRecvBytesdwPrevRecvBytes 字段计算接收速率。
  • 最后,将计算得到的发送速率和接收速率输出到控制台。

注意

  • 该代码示例仅获取TCP连接的信息,如果需要获取UDP连接的信息,可以使用 GetUdpStatistics 函数和 GetExtendedUdpTable 函数。
  • 该代码示例仅在Windows操作系统上运行。
C++获取特定进程网络发送与接收速率

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

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