Skip to content
KitploitKITPLOIT
工具漏洞利用博客
Log in
提交
工具漏洞利用博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

订阅源联系隐私© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
LUCX_network_traffic_parser — 一个用于网络流量分析和特征提取的框架。 | Kitploit
工具/GitHubGitHub/doriguzzi/lucx_network_traffic_parser
数据包嗅探与分析网络取证网络安全机器学习入侵检测论文与研究异常检测日志分析
GitHubdoriguzzi/lucx_network_traffic_parser

LUCX_network_traffic_parser

一个用于网络流量分析和特征提取的框架。

查看仓库
41151个月前尚未审核

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

LUCX:LUCID 网络流量解析器扩展版

LUCX(LUCID network traffic parser eXtended)是一个网络流量解析器,可处理 pcap 格式的预录制流量轨迹以及从网络接口捕获的实时网络流量。LUCX 是 LUCID 数据集解析器(https://github.com/doriguzzi/lucid-ddos)的扩展版本。与原始版本一样,LUCX 生成的流量观测结果与现有在线系统中收集的结果一致,在这些系统中,检测算法必须处理在预定义时间窗口内收集的流量片段。 此外,LUCX 以两种不同格式提取更多特征(例如 TLS 特定特征):数据包级和统计级,本 README 下文将对此进行描述。

流量预处理操作分为两个不同阶段:第一阶段从数据包中提取特征并将其组织为流和时间窗口,第二阶段执行特征归一化、填充(或展平,取决于所需的输出格式),并以 hdf5 格式保存训练集、验证集和测试集。

本仓库中以 Jupyter notebook 形式提供的示例网络入侵检测系统(NIDS)可用于训练和评估深度学习模型(具体为多层感知机(MLP)或卷积神经网络(CNN)),使用 LUCX 生成的数据包级和统计级网络流量表示。

安装

LUCX 使用 Python v3.X、Numpy 和 Pyshark 实现。LUCX 需要安装若干 Python 工具和库。这可以通过使用 conda 软件环境(https://docs.conda.io/projects/conda/en/latest/)来完成。 我们建议安装 miniconda,即 conda 的轻量版本。miniconda 适用于 MS Windows、MacOSX 和 Linux,可按照 https://docs.conda.io/en/latest/miniconda.html# 提供的指南进行安装。

需要 MS Windows 10 版本 2004 及更高版本(Build 19041 及更高版本)或 Windows 11。 在 MS Windows 中,首先从命令行安装适用于 Linux 的 Windows 子系统:wsl.exe —install(更多信息见此处)。此命令将在您的计算机上安装 Ubuntu Linux 操作系统。您可以通过从 Windows 菜单执行 WSL 应用来访问 Linux 命令行,然后按照下文的 Linux 操作系统指南操作。

打开终端,执行以下命令之一(根据您的操作系统),并按照屏幕上的说明操作:

bash Miniconda3-latest-Linux-x86_64.sh (on Linux operating systems)
bash Miniconda3-latest-MacOSX-x86_64.sh (on macOS)

然后基于 Python 3.13.5 创建一个新的 conda 环境(名为 python313):

conda create -n python313 python=3.13.5

激活新的 python313 环境:

conda activate python313

并配置环境,安装几个额外的软件包:

(python39)$ pip install scikit-learn h5py pyshark matplotlib graphviz pandas scikeras pydot seaborn

Pyshark 用于数据预处理。它只是 tshark 的 Python 封装,这意味着还必须安装 tshark。在基于 Ubuntu 的操作系统上,请使用以下命令:

sudo apt install tshark

在 macOS 中,只需从此处下载 Wireshark 并安装即可。

请注意,当前的解析器代码适用于 wireshark/tshark 4.4.9 版本或更高版本。

流量特征表示

LUCX 考虑双向网络流量流,其定义为共享相同 5 元组标识符或其转置 5 元组的报文组。5 元组是 IP 网络中唯一表征通信流的常用方式,它由以下部分组成:

  • 源 IP 地址
  • 目的 IP 地址
  • 源端口号
  • 目的端口号
  • 传输协议(例如 TCP、UDP)

当报文在这五个字段上具有相同的值时,它们被视为属于同一条流。转置 5 元组的概念用于处理双向通信:如果源地址/端口与目的地址/端口互换,但协议保持不变,则这些报文仍被视为属于同一条流。这确保了会话的两个方向(客户端 → 服务器和服务器 → 客户端)被归为一组。

示例: 假设 IP 为 192.168.1.10 的客户端向 IP 为 203.0.113.5 的 Web 服务器在端口 80 上发送 TCP 请求。客户端使用源端口 54321。

  • 正向(客户端 → 服务器):
    • 源 IP:192.168.1.10
    • 目的 IP:203.0.113.5
    • 源端口:54321
    • 目的端口:80
    • 协议:TCP
  • 反向(服务器 → 客户端):
    • 源 IP:203.0.113.5
    • 目的 IP:192.168.1.10
    • 源端口:80
    • 目的端口:54321
    • 协议:TCP

这两组报文都属于同一条流量流,因为反向与正向的转置 5 元组相匹配。 此外,LUCX 会基于时间窗口,将从数据集的网络流量轨迹(或传入的网络流量)中提取的每条流量流拆分为子流。这种分割模拟了真实场景,即流量在静态或动态时间窗口内被收集,然后转发给分类器进行分析。通过这种方式,系统模拟了入侵检测系统(IDS)的运维实践,这些系统通常依赖有时间限制的报文聚合来识别短期行为并检测攻击。

在将报文分组为流、并进一步将流拆分为子流之后,LUCX 会将子流转换为可用于训练、验证和测试基于机器学习的分类器的样本。有两种可能的输出格式:数组(如 LUCID 中那样)或向量。第一种格式保留直接从报文中提取的特征,而第二种格式则生成报文级特征的统计表示。 这两种运行模式分别被称为报文级特征和统计特征。

报文级特征

这遵循与原始 LUCID 数据集解析器相同的格式,它将一个子流转换为一个数组,其中每一列代表一个报文级特征(例如时间戳、报文长度、TCP SYN 标志、ICMP 类型),每一行按时间顺序对应一个报文。尽管结构保持不变,但通过引入额外特征或将现有特征扩展为二进制表示(例如 IP 和 TCP 标志),列数有所增加。 第一行包含子流的第一个报文,它也是时间窗口内收集的流的第一个报文。第一列是报文时间戳:对于第一个报文,时间戳设为零,而后续报文的时间戳则表示为它们的到达时间与第一个报文的原始时间戳之间的差值。这种方法避免使用报文到达时间的绝对值,并保留了属于同一子流的报文的相对时序模式。

timestamppacket_lengthIP_ttlIP_flags_df...ICMP_code
0641280...0
1.2128641...8
..................
0000...0
0000...0

对于每个样本,当前特征数量为 78,包括 TLS 特定特征,如记录版本、握手扩展和类型等。完整特征列表可在本 README 末尾的附录中查看。 与 LUCID 类似,LUCX 为每个子流收集可配置的预定义数量的数据包。该数量可通过下文所述的命令行选项 --packets_per_flow 进行配置。超过该数量的数据包将被丢弃,而数据包数量少于 --packets_per_flow 的子流将进行零填充,如上例所示。

统计特征

特征的统计版本由流量子流的向量表示组成,其中每个子流表示为在时间窗口内收集的统计特征向量。例如,第一个特征是同一子流中数据包之间的平均到达间隔时间,第二个特征是平均数据包长度,依此类推。

IAT (mean)packet_length (mean)IP_ttl (mean)IP_flags_df (count)...ICMP_code (mean)Nr. of Packets
0.01130102.52...35

向量中的元素数量等于数据包级表示数组中列的数量,再加上一个附加在向量末尾的额外特征:子流中的数据包数量。在数据包级表示中,这是一个隐式特征,可以从数组中非填充行的数量推导出来。完整特征列表可在本 README 末尾的附录中查看。

在此表示中,选项 --packets_per_flow 指定在计算统计信息时,在时间窗口内为每个子流收集多少个数据包。

流量预处理

LUCX 目前支持来自新不伦瑞克大学(UNB)(https://www.unb.ca/cic/datasets/index.html) 的三个 DDoS 数据集:CIC-IDS2017、CSE-CIC-IDS2018 和 CIC-DDoS2019。本指南将使用后者的部分数据,并包含在 sample-dataset 文件夹中。

所谓支持,是指脚本能够正确地将数据包和流量流标记为良性或 DDoS。通常,这是通过解析随流量轨迹提供的标签文件来完成的,如 UNB 数据集的情况,或者在代码中手动指定攻击者的 IP 地址和受害者的 IP 地址。当然,在后一种情况下,脚本也必须使用正确的流量信息(所有攻击者/受害者 IP 地址对)进行调优,因为此信息非常特定于数据集以及用于生成流量的方法。

话虽如此,lucx_network_traffic_parser.py 包含了上述三个数据集(CIC-IDS2017、CSE-CIC-IDS2018 和 CIC-DDoS2019)的攻击者/受害者对结构,但通过复制现有代码,可以轻松扩展以支持其他数据集。

例如,以下 Python 字典提供了 CIC-DDoS2019 数据集中涉及的攻击者和受害者的 IP 地址:

DOS2019_FLOWS = {'attackers': ['172.16.0.5'], 'victims': ['192.168.50.1', '192.168.50.4']}

请注意,在 CIC-DDoS2019 数据集中,DDoS 数据包的源 IP 地址已被替换为测试床内连接攻击网络与受害网络的 router 的 IP 地址(CIC-DDoS2019)。

命令选项

使用 lucx_network_traffic_parser.py 时可以指定以下参数:

  • -c, --classes :分配给流量类别的名称(可用选项为 BINARY(默认)、DOS2019)
  • -d, --dataset_folder:数据集所在文件夹
  • -f, --traffic_type :要处理的流类型(all、benign、ddos)
  • -m, --max_flows :从 pcap 文件中提取的最大流数量
  • -n, --packets_per_flow :样本中的最大数据包数量(默认:10 个数据包)
  • -o, --output_folder :脚本保存输出的文件夹。未使用此选项时使用数据集文件夹
  • -p, --preprocess_folder :包含中间文件 *.data 的文件夹
  • -s, --samples :精简输出中的训练样本数量
  • -t, --dataset_type :数据集类型。可用选项为:DOS2017、DOS2018、DOS2019
  • -w, --time_window :时间窗口长度(秒)(默认:10 秒)
  • --binary :二分类标签(默认:False)
  • --preprocess_file :中间文件 *.data 的路径
  • --dont_normalize :跳过特征归一化(默认:False)
  • --flatten :将类数组的中间流表示展平为向量(默认:False)
  • --enable_tls :启用 TLS 特定特征的提取(默认:False)
  • --multiclass :启用多分类标签,可使用整数编号或 one-hot 编码(0=二分类(默认),1=整数多分类,2=one-hot 编码多分类)

第一步

在第一步中,LUCX 从源目录中包含的所有 pcap 文件的数据包中提取特征。这些特征按流分组,并根据参数 dataset_type 的值进行标记。具体而言,一个流是具有相同源 IP、源 UDP/TCP 端口、目的 IP、目的 UDP/TCP 端口和协议的数据包特征集合。流是双向的,因此数据包 (srcIP,srcPort,dstIP,dstPort,proto) 与 (dstIP,dstPort,srcIP,srcPort,proto) 属于同一个流。结果是一组扩展名为 .data 的中间二进制文件。

此第一步可通过以下命令执行:

python3 lucx_network_traffic_parser.py --dataset_type DOS2019 --dataset_folder ./sample-dataset/ --packets_per_flow 10 --traffic_type all --time_window 10

这将并行处理 pcap 文件,生成一个名为 10t-10n-DOS2019-preprocess.data 的文件。通常,该脚本会加载由选项 --dataset_folder 所指定文件夹中包含的所有扩展名为 .pcap 的文件。这些文件会被并行处理,以最大限度地缩短执行时间。

前缀 10t-10n 表示预处理使用了 10 秒的时间窗口(10t)和 10 个数据包的流长度(10n)。请注意,文件名中的 DOS2019 是命令中选项 --dataset_type DOS2019 的结果。

选项 --dataset_type DOS2019 指示脚本使用字典 DOS2019_FLOWS 来标记流。在第一阶段,标签以独热编码格式保存,并可在第二步中转换为二值标签或整数标签。

脚本逻辑很直接:它使用 dataset_type 选项来判断流是良性还是恶意,并分配相应的类别标签。

  • 如果流是良性的,其类别始终设置为 benign。
  • 如果流是恶意的,当选择 ``--dataset_type DOS2019时,其类别为DOS2019_CLASSES` 列表中的某个类别。

分配的类别源自 pcap 文件名的第一部分。
例如,udplag-chunk.pcap 中的恶意流将被标记为 udplag 的独热编码标签,即 [0,0,0,0,0,0,0,0,0,0,0,0,1,0]

第二步

第二步加载 *.data 文件,将它们合并为存储在 RAM 内存中的单一数据结构,为样本分配适当的标签,平衡数据集以使良性样本和 DDoS 样本的数量大致相同,将数据结构拆分为训练集、验证集和测试集,并将特征归一化到 0 和 1 之间。 对于数据包级特征,它还会对类数组样本执行零填充,使它们都具有相同的形状。

最后,三个文件(训练集、验证集和测试集)以分层数据格式 hdf5 保存。

第二步通过以下命令执行:

python3 lucx_network_traffic_parser.py --preprocess_folder ./sample-dataset/ --multiclass 1 --binary --flatten

如果未使用选项 --output_folder,输出将生成在使用选项 --preprocess_folder 指定的输入文件夹中。

选项 multiclass 指示保存在 *.data 文件中的初始 one-hot 标签应转换为二值(0)、整数(1)还是 one-hot(2)。在后一种情况下,不会对标签应用任何更改。

下载工具