#multi-threading #statistics #networking #pcap #etherparse

nasoone-lib

一个用于收集网络流量统计的多线程库

6 个版本

0.2.5 2023 年 1 月 7 日
0.2.4 2023 年 1 月 4 日
0.2.2 2022 年 12 月 22 日
0.1.0 2022 年 12 月 8 日

#3 in #多线程

每月 36 次下载

GPL-3.0-only

4.5MB
816

Nasoone-lib

这是一个用于收集网络数据和生成报告的多线程 Rust 库。它在 Nasoone 中使用。

报告形式如下

source ip; source port; destination ip; destination port; protocols; first; last; bytes; packets

其中 源 IP源端口目标 IP目标端口 唯一标识一个连接(它们就像报告的主键)。其他字段提供了有关该连接的信息

  • 协议 是连接中使用的协议列表(通常是 UDP 和 TCP 之间的一种,但可能是两种都使用)
  • firstlast 是检测到连接中数据包的首次和最后时间戳(以毫秒为单位)
  • bytes 是连接中传输的字节数
  • packets 是连接中传输的数据包数。

状态机图

此库公开了一个行为像状态机的 Nasoone 结构。您可以在以下图中看到此状态机的行为

State machine diagram

多线程

此库是多线程的。它使用线程池来解析数据包。线程数设置为机器的逻辑核心数。

此图显示了库使用的线程

Threads

  • App thread 是调用库的线程
  • 生产者线程 是从底层 pcap 库获取数据包、复制数据并将其通过通道发送到一个 解析器线程 的线程。
  • 解析器线程 是解析数据包并定期将结果发送到 写入器线程 的线程。
  • 写入器线程 是将数据写入报告文件的线程,频率由用户指定。

报告示例

以下是库生成的报告示例

source ip; source port; destination ip; destination port; protocols; first; last; bytes; packets
192.168.1.60; 50679; 255.255.255.255; 6667; [UDP]; 1672060820555; 1672060820555; 214; 1
192.168.1.20; 20213; 103.195.103.66; 9993; [UDP]; 1672060821134; 1672060821134; 179; 1
140.82.112.22; 443; 192.168.1.20; 53673; [TCP]; 1672060821867; 1672060822494; 5228; 11
192.168.1.20; 53673; 140.82.112.22; 443; [TCP]; 1672060821764; 1672060822393; 3802; 11
50.7.252.138; 9993; 192.168.1.20; 35848; [UDP]; 1672060821406; 1672060821406; 671; 1
108.177.119.188; 5228; 192.168.1.20; 52921; [TCP]; 1672060821504; 1672060821504; 66; 1
192.168.1.2; 51057; 224.0.0.251; 5353; [UDP]; 1672060822910; 1672060822910; 84; 1
192.168.1.20; 9993; 103.195.103.66; 9993; [UDP]; 1672060821134; 1672060821134; 179; 1
192.168.1.20; 20213; 84.17.53.155; 9993; [UDP]; 1672060821134; 1672060821134; 179; 1
192.168.1.20; 9993; 84.17.53.155; 9993; [UDP]; 1672060821134; 1672060821134; 179; 1
35.186.224.25; 443; 192.168.1.20; 53631; [TCP]; 1672060822358; 1672060822358; 66; 1
103.195.103.66; 9993; 192.168.1.20; 35848; [UDP]; 1672060821262; 1672060821262; 671; 1
104.194.8.134; 9993; 192.168.1.20; 35848; [UDP]; 1672060821306; 1672060821306; 671; 1
192.168.1.20; 52921; 108.177.119.188; 5228; [TCP]; 1672060821473; 1672060821473; 54; 1
192.168.1.20; 53631; 35.186.224.25; 443; [TCP]; 1672060822346; 1672060822346; 54; 1
192.168.1.20; 35848; 50.7.252.138; 9993; [UDP]; 1672060821134; 1672060821134; 179; 1
192.168.1.2; 49420; 224.0.0.251; 5353; [UDP]; 1672060822808; 1672060822808; 84; 1
192.168.1.20; 35848; 104.194.8.134; 9993; [UDP]; 1672060821134; 1672060821134; 179; 1
192.168.1.20; 9993; 104.194.8.134; 9993; [UDP]; 1672060821134; 1672060821134; 179; 1
192.168.1.20; 20213; 50.7.252.138; 9993; [UDP]; 1672060821134; 1672060821134; 179; 1
192.168.1.20; 35848; 103.195.103.66; 9993; [UDP]; 1672060821134; 1672060821134; 179; 1
192.168.1.20; 35848; 84.17.53.155; 9993; [UDP]; 1672060821134; 1672060821134; 179; 1
84.17.53.155; 9993; 192.168.1.20; 9993; [UDP]; 1672060821170; 1672060821170; 671; 1
192.168.1.20; 9993; 50.7.252.138; 9993; [UDP]; 1672060821134; 1672060821134; 179; 1
192.168.1.73; 58945; 255.255.255.255; 6667; [UDP]; 1672060820453; 1672060820453; 214; 1
192.168.1.20; 20213; 104.194.8.134; 9993; [UDP]; 1672060821134; 1672060821134; 179; 1

依赖项