C++获取特定进程网络发送与接收速率
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结构体中的dwCurrSendBytes和dwPrevSendBytes字段计算发送速率,使用dwCurrRecvBytes和dwPrevRecvBytes字段计算接收速率。 - 最后,将计算得到的发送速率和接收速率输出到控制台。
注意
- 该代码示例仅获取TCP连接的信息,如果需要获取UDP连接的信息,可以使用
GetUdpStatistics函数和GetExtendedUdpTable函数。 - 该代码示例仅在Windows操作系统上运行。
原文地址: https://www.cveoy.top/t/topic/fQ5Q 著作权归作者所有。请勿转载和采集!