-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathtest_netStat.cpp
More file actions
139 lines (119 loc) · 4.45 KB
/
test_netStat.cpp
File metadata and controls
139 lines (119 loc) · 4.45 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
#include "netStat.h"
#include <chrono>
#include <iomanip>
#include <iostream>
#include <random>
#include <sstream>
// 生成随机IP地址
std::string generateRandomIP() {
std::random_device rd;
std::mt19937 gen(rd());
std::uniform_int_distribution<> distrib(1, 254);
return std::to_string(distrib(gen)) + "." + std::to_string(distrib(gen)) +
"." + std::to_string(distrib(gen)) + "." +
std::to_string(distrib(gen));
}
// 生成随机MAC地址
std::string generateRandomMAC() {
std::random_device rd;
std::mt19937 gen(rd());
std::uniform_int_distribution<> distrib(0, 255);
std::stringstream ss;
ss << std::hex << std::setfill('0');
for (int i = 0; i < 6; ++i) {
if (i > 0)
ss << ":";
ss << std::setw(2) << distrib(gen);
}
return ss.str();
}
// 测试netStat类的功能
void testNetStat() {
// 创建netStat实例
netStat ns;
// 获取和打印标题
std::vector<std::string> headers = ns.getNetStatHeaders();
std::cout << "特征数量: " << headers.size() << std::endl;
std::cout << "特征标题示例:\n";
for (size_t i = 0; i < std::min(size_t(10), headers.size()); ++i) {
std::cout << " " << headers[i] << std::endl;
}
std::cout << " ...\n";
// 使用随机数据测试
std::string srcIP = generateRandomIP();
std::string dstIP = generateRandomIP();
std::string srcMAC = generateRandomMAC();
std::string dstMAC = generateRandomMAC();
std::string srcProtocol = "tcp";
std::string dstProtocol = "80";
int datagramSize = 1024;
double timestamp = std::chrono::duration_cast<std::chrono::milliseconds>(
std::chrono::system_clock::now().time_since_epoch())
.count() /
1000.0;
std::cout << "\n测试数据包:\n";
std::cout << " 源IP: " << srcIP << "\n";
std::cout << " 目标IP: " << dstIP << "\n";
std::cout << " 源MAC: " << srcMAC << "\n";
std::cout << " 目标MAC: " << dstMAC << "\n";
std::cout << " 源协议: " << srcProtocol << "\n";
std::cout << " 目标协议: " << dstProtocol << "\n";
std::cout << " 数据包大小: " << datagramSize << "\n";
std::cout << " 时间戳: " << timestamp << std::endl;
// 插入多个数据包
int numPackets = 5;
std::vector<double> stats;
for (int i = 0; i < numPackets; ++i) {
stats = ns.updateGetStats(0, srcMAC, dstMAC, srcIP, srcProtocol, dstIP,
dstProtocol, datagramSize, timestamp + i);
}
// 输出统计结果
std::cout << "\n处理 " << numPackets << " 个数据包后的统计结果:\n";
std::cout << " 统计结果向量大小: " << stats.size() << std::endl;
std::cout << " 统计结果示例:\n";
for (size_t i = 0; i < std::min(size_t(10), stats.size()); ++i) {
std::cout << " " << headers[i] << ": " << stats[i] << std::endl;
}
std::cout << " ...\n";
}
// 测试性能
void benchmarkNetStat(int numPackets) {
// 创建netStat实例
netStat ns(NAN, 100000000000, 100000000000);;
// 准备测试数据
std::vector<std::string> srcIPs;
std::vector<std::string> dstIPs;
std::vector<std::string> srcMACs;
std::vector<std::string> dstMACs;
std::vector<double> timestamps;
std::cout << "生成 " << numPackets << " 个随机数据包..." << std::endl;
for (int i = 0; i < numPackets; ++i) {
srcIPs.push_back(generateRandomIP());
dstIPs.push_back(generateRandomIP());
srcMACs.push_back(generateRandomMAC());
dstMACs.push_back(generateRandomMAC());
timestamps.push_back(i * 0.1); // 每个包的时间间隔为0.1秒
}
// 执行性能测试
std::cout << "执行性能测试..." << std::endl;
auto start = std::chrono::high_resolution_clock::now();
for (int i = 0; i < numPackets; ++i) {
ns.updateGetStats(0, srcMACs[i], dstMACs[i], srcIPs[i], "tcp",
dstIPs[i], "80", 1024, timestamps[i]);
}
auto end = std::chrono::high_resolution_clock::now();
auto duration =
std::chrono::duration_cast<std::chrono::milliseconds>(end - start);
std::cout << "性能测试结果:\n";
std::cout << " 处理 " << numPackets
<< " 个数据包用时: " << duration.count() << "ms\n";
std::cout << " 平均每个数据包处理时间: "
<< (double)duration.count() / numPackets << "ms\n";
}
int main() {
std::cout << "=== netStat类功能测试 ===\n" << std::endl;
testNetStat();
std::cout << "\n=== netStat类性能测试 ===\n" << std::endl;
benchmarkNetStat(100000);
return 0;
}