四川大学|Darkflow:高性能暗网流量特征提取工具

admin 2026-06-18 07:45:44 网络安全文章 来源:ZONE.CI 全球网 0 阅读模式

文章总结: Darkflow是四川大学开发的高性能暗网流量特征提取工具,基于Rust和eBPF技术实现实时/离线流量处理。支持多种预定义特征集和自定义特征集,提供PCAP文件解析、批量处理脚本和Docker部署方式。工具适用于大规模网络流量分析任务,特别针对暗网流量分类研究。 综合评分: 85 文章分类: 安全工具,网络流量分析,恶意软件,数据安全,安全开发


cover_image

四川大学 | Darkflow:高性能暗网流量特征提取工具

原创

张强 张强

安全学术圈

2026年6月16日 21:30 四川

在小说阅读器读本章

去阅读

项目作者:Qiang Zhang, Cheng Huang, Pengsen Cheng, and Jiayong Liu 笔记作者:张强@安全学术圈 主编:黄诚@安全学术圈 编辑:谷雨@安全学术圈

项目仓库地址:https://github.com/das-lab/darkflow

一个基于 RustiFlow 的暗网 (Tor) 流量特征实时/离线高性能提取工具

概述

基于 Rust 编程语言与 eBPF(Extended Berkeley Packet Filter)技术构建,在大规模网络流量处理场景下展现出卓越的处理性能与高吞吐能力。针对离线流量分析需求,darkflow 还集成了高性能的 PCAP 文件解析模块,能够高效完成已采集网络流量数据的读取与处理。此外,darkflow 在多种预定义特征提取方案(cic、cidds、nfstream、rustiflow)基础上,并支持用户根据具体研究需求构建自定义特征集(我们增加了自定义的 darkflow、lexnetflow 特征集),从而满足不同网络流量分析任务的灵活性与可扩展性要求。

我们还提供了一个用于批量处理大规模数据集的脚本 gen_darkflow.py,能够自动遍历传入的目标文件夹下全部 PCAP/PCAPNG 流量文件并调用 darkflow 二进制程序进行特征提取。在实现上,脚本基于 ProcessPoolExecutor 构建多进程并行处理机制,通过自动设置 worker 数量充分利用多核 CPU 资源,从而显著提升整体处理效率与吞吐能力,适用于大规模网络流量数据的特征工程与数据集构建任务。我们用来构建暗网 HyperTor 项目(使用由 Transformer 生成权重的小样本学习进行不平衡暗网业务流量分类)所需的数据集。核心特性如下:

  • 实时高吞吐量:利用 Rust 和 Aya 库进行 eBPF 程序的编译与执行,确保高性能和极高资源利用率。
  • 自定义特征集:提供多种预定义+自定义特征集(流),并支持灵活创建满足特定需求的自定义特征集。
  • 离线 PCAP 支持:支持对 PCAP 文件进行数据包分析,同时兼容 Linux 和 Windows 系统下生成的 PCAP 文件。
  • 多种输出选项:特征数据可以输出到控制台和 CSV 等。

支持的数据包覆盖范围

目前支持从以下协议/报文头组合中提取流数据:

| 网络层 | 离线 pcap | 实时 eBPF | | — | — | — | | 链路层 (Link) | Ethernet, Linux cooked capture, 802.1Q VLAN | Ethernet | | 网络层 (Network) | IPv4, IPv6 | IPv4, IPv6 | | IPv6 扩展 | 支持在传输层解析前处理扩展报文头 | 支持在传输层解析前处理扩展报文头 | | 传输层 (Transport) | TCP, UDP, ICMP, ICMPv6 | TCP, UDP, ICMP, ICMPv6 |

说明:

  • 实时模式仅支持 Linux 系统。
  • 离线和实时模式旨在暴露相同的流语义,但时间戳和数据包长度的数据源可能会略有不同。
  • 实时模式下的 VLAN 解析目前尚未实现。

系统架构

project/
├─ common/             # 共享数据结构
│  ├─ Cargo.toml
│  └─ src/lib.rs       # `EbpfEventIp*`
│
├─ darkflow/           # 用户空间加载器(loader)Crate
│  ├─ Cargo.toml
│  └─ src/main.rs      # 加载器代码
│  └─ ...
│
├─ ebpf-ipv4/          # 内核 eBPF Crate (IPv4)
│  ├─ Cargo.toml
│  └─ src/main.rs      # `#[no_std]` `#[no_main]` eBPF 程序
├─ ebpf-ipv6/          # 内核 eBPF Crate (IPv6)
│  ├─ Cargo.toml
│  └─ src/main.rs      # `#[no_std]` `#[no_main]` eBPF 程序
│
├─ xtask/              # 项目自动化 Crate
│  ├─ Cargo.toml
│  └─ src/main.rs      # 自定义任务 (eBPF 编译工作流)
│  └─ ...

1)实时处理架构

2)离线处理架构

使用方法

使用 ./setup.sh 脚本安装依赖,并使用 ./build.sh 脚本来构建 darkflow 二进制文件!将 darkflow 二进制文件复制到您自定义的路径,或放到 /usr/local/bin 文件夹中。 如果文件没有正确的执行权限,可以运行以下命令:

chmod +x /path/to/darkflow

1)使用 gen_darkflow.py 批量处理。我们提供了一个用于批量处理大规模数据集的脚本 gen_darkflow.py,用于自动遍历--base-dir指定目录下全部 PCAP/PCAPNG 流量文件,并调用 darkflow 进行指定特征 --feature-type 的提取,并导出为csv,通过 --merge 启用结果合并模式。脚本支持多进程并行处理,基于 ProcessPoolExecutor 实现,通过设置 worker 数量充分利用多核 CPU,从而显著提升整体处理效率与吞吐能力,适用于大规模网络流量数据的特征工程与数据集构建任务。

nohup python gen_darkflow.py \
    --base-dir ./dataset_name \
    --feature-type darkflow \
    --merge \
    > gen_darkflow-dataset_name-darkflow.log 2>&1 &

如需进一步优化性能,可通过调整脚本内部的 worker 数量来提升并行处理能力。

2)使用 TUI 终端图形界面。如果倾向于使用更直观的图形化界面,可以直接运行不带任何参数的 darkflow 命令来启动 TUI 界面。这会打开一个文本框,可以在其中输入想要编辑的配置文件路径,或者选择新建配置。随后,将显示以下界面:

注意: 当点击保存按钮时,系统会提示输入文件名。可以在后续通过以下命令复用该文件:

darkflow --config-file <filename> realtime <interface> [--only-ingress]
# 例如 `./target/release/darkflow -c ./config.toml pcap ./t.pcap`
darkflow -c <filename> pcap <path to pcap file>

保存配置文件后,可以安全地进行重置,这不会修改已保存的配置文件。

3)使用 Docker 容器。请确保使用的是原生 Docker 环境,而非 Docker Desktop,且不要在机器上安装 Docker Desktop。如果在 Docker Desktop 环境下运行,该工具将无法按预期工作,因为 --network host 不会把容器连接到宿主机网络,而是连接到 Docker Desktop 所使用的虚拟机网络中。

构建容器:

docker build -t darkflow .

运行容器:

docker run --rm --network host -v /path/on/host:/app darkflow [ARGS]

如果需要实时捕获流量,请加上 --privileged 标志。

  • 示例:
docker run --rm --network host -v ./pcap:/app darkflow \
&nbsp; -f basic \
&nbsp; -o&nbsp;print&nbsp;\
&nbsp; pcap /app/pcap.pcap

docker run --rm --privileged --network host -v ./output:/app darkflow \
&nbsp; -f cic \
&nbsp; -o csv \
&nbsp; --export-path /app/output.csv \
&nbsp; realtime enp0

说明:

  • 在容器中进行实时抓包依然依赖于宿主机 Linux 对 eBPF 和 tc 的支持,因此 --privileged --network host 仍是本地测试的实用基准配置。

开发指南

推荐直接使用 ./setup.sh 脚本安装依赖,并使用 ./build.sh 脚本来构建 darkflow 二进制文件!

前置依赖 libpcap-dev

sudo apt install libpcap-dev

安装 Rust:

curl --proto&nbsp;'=https'&nbsp;--tlsv1.2 -sSf https://sh.rustup.rs | sh

Nightly 版本 Rust 工具链:

rustup install stable
rustup toolchain install nightly --component rust-src

安装 bpf 链接器(Linux x86_64):

cargo install bpf-linker

安装 bpf 链接器(MacOS):

brew install llvm
cargo install --no-default-features bpf-linker

针对 Ubuntu 20.04 LTS 的特定命令:

sudo apt install linux-tools-5.8.0-63-generic
export&nbsp;PATH=/usr/lib/linux-tools/5.8.0-63-generic:$PATH

编译项目 eBPF 程序:

cargo xtask ebpf-ipv4
cargo xtask ebpf-ipv6

# 或者编译 Release 版本
cargo xtask ebpf-ipv4 --release
cargo xtask ebpf-ipv6 --release

编译用户空间程序:

cargo build
# 或者编译 Release 版本
cargo build --release

在开发模式下运行项目:

cargo xtask run -- [OPTIONS] <COMMAND>

运行测试:

cargo&nbsp;test
cargo&nbsp;test&nbsp;-- --fail-fast
cargo&nbsp;test&nbsp;--no-run

安全学术圈招募队友-ing 有兴趣加入学术圈的请联系 secdr#qq.com



免责声明:

本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。

任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。

本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我

本文转载自:安全学术圈 张强 张强《四川大学 | Darkflow:高性能暗网流量特征提取工具》

评论:0   参与:  0