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

admin 2026-10-20 19:42:45 网络安全文章 来源:ZONE.CI 全球网 0 阅读模式

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 \\
  -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



618倒计时!公众号粉丝课程半价福利,错过再等一年!" 网络安全文章

618倒计时!公众号粉丝课程半价福利,错过再等一年!"

该文档为公众号发布的618促销活动通知,主要宣传非虫团队推出的多项安全技术课程限时折扣。核心内容包括安卓软件开发与逆向分析课程8折、eBPF安全攻防课程5折、Frida源码分析课程5折等优惠方案,并提及购买特定课程可获赠隐私探针课和知识星球服务。文档本质为课程推广内容,旨在吸引读者在618期间购买相关安全技术培训产品。
CVE-2026-45454|MicrosoftSharePoint路径遍历导致远程代码执行漏洞" 网络安全文章

CVE-2026-45454|MicrosoftSharePoint路径遍历导致远程代码执行漏洞"

CVE-2026-45454是MicrosoftSharePoint中的路径遍历漏洞,允许普通用户通过跨库文件写入实现远程代码执行。漏洞成因是UploadPage.CurrentFolder属性未验证目标文件夹是否属于指定文档库,攻击者可利用权限文档库将文件写入无权限的系统目录(如/\\_catalogs/masterpage),进而执行恶意ASPX文件。影响版本包括SharePointServer2016/2019/订阅版的特定低版本,建议用户参考微软官方链接及时更新补丁。
HiClawDashboard——为Higress生态打造的智能管理面板" 网络安全文章

HiClawDashboard——为Higress生态打造的智能管理面板"

HiClawDashboard是为Higress云原生API网关生态开发的智能管理面板,采用Next.js+Tailwind等技术栈实现13个功能模块,涵盖Worker管理、团队协作、K8s监控等全链路运维场景。项目亮点包括真实API驱动、双视图切换、全局刷新机制和错误边界处理,提供本地部署指南并开源供社区贡献。
评论:0   参与:  0