文章总结: Darkflow是四川大学开发的高性能暗网流量特征提取工具,基于Rust和eBPF技术实现实时/离线流量处理。支持多种预定义特征集和自定义特征集,提供PCAP文件解析、批量处理脚本和Docker部署方式。工具适用于大规模网络流量分析任务,特别针对暗网流量分类研究。 综合评分: 85 文章分类: 安全工具,网络流量分析,恶意软件,数据安全,安全开发
四川大学 | 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 \
-f basic \
-o print \
pcap /app/pcap.pcap
docker run --rm --privileged --network host -v ./output:/app darkflow \
-f cic \
-o csv \
--export-path /app/output.csv \
realtime enp0
说明:
- 在容器中进行实时抓包依然依赖于宿主机 Linux 对 eBPF 和
tc的支持,因此--privileged --network host仍是本地测试的实用基准配置。
开发指南
推荐直接使用
./setup.sh脚本安装依赖,并使用./build.sh脚本来构建darkflow二进制文件!
前置依赖 libpcap-dev:
sudo apt install libpcap-dev
安装 Rust:
curl --proto '=https' --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 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 test
cargo test -- --fail-fast
cargo test --no-run
安全学术圈招募队友-ing 有兴趣加入学术圈的请联系 secdr#qq.com
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:安全学术圈 张强 张强《四川大学 | Darkflow:高性能暗网流量特征提取工具》
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。










评论