告别 Electron 臃肿与 Wireshark 老化界面:用 Rust + Tauri 2.0 构建多总线网络与现场总线深度分析仪 Omni-Probe

告别 150MB 内存刺客与 PCAP 爆内存:我们用 Rust + Tauri 2.0 重构了下一代多总线网络与硬件探针

项目开源地址 :github.com/daybydaymyl...

Windows 便携版直链体验 :v0.3.7 生产构建下载(单 exe 仅 31MB,双击免安装即用)


一、 为什么要做这个项目?工程师的真实血泪痛点

在日常的后端网络调优、分布式系统排障、嵌入式物联网(IoT)联调以及工控物理总线分析中,每一位工程师的桌面几乎都被以下几类工具堆满:

  1. "老牌巨兽" Wireshark :功能极其深厚,但其基于 20 多年前的 C/C++ 与 Qt 架构,高密度纯表格界面的视觉负荷极大;更致命的是,当你尝试打开一个动辄 3GB ~ 10GB 的巨型 PCAP 数据包时,传统解析机制会疯狂将包对象反序列化到 RAM 中,瞬间引发系统 OOM(内存溢出)导致闪退崩溃;
  2. "内存刺客" Electron 工具链:市场上新兴的现代化调试工具大多基于 Electron 封装。随手打开一个抓包或 API 调试器,安装包动辄 150MB+,冷启动白屏 2~3 秒,空载常驻内存吃掉 300MB ~ 500MB,多开几个服务后风扇狂转;
  3. "极度割裂"的异构总线生态:分析以太网用 Wireshark,调试串口用串口助手,抓 Modbus/CAN 现场总线用硬件专有套件,看逻辑方波用 Saleae/PulseView,网络合规与等保取证又是另一套孤岛软件。软硬件联调时,开发者不得不在 4~5 个互不相通的窗口间反复横跳。

为了解决这些真实痛点,我们启动了 Omni-Probe 项目:采用底层纯 Rust 异步抓包与解剖引擎 + Tauri 2.0 跨平台系统容器 + Vue 3.5 / TypeScript 现代前端,从零打造一款集以太网、现场总线、硬件信号与合规审计于一体的现代工业级网络探针。


二、 关键物理指标实测对比:Electron vs Qt vs Omni-Probe

不谈空话,直接看在 Windows 11 x64(12代 i7 / 32GB RAM)环境下的客观实测物理基准数据:

物理指标维度 传统 Electron 抓包工具 传统 Qt/C++ 分析仪 (Wireshark) Omni-Probe (Rust + Tauri 2.0) 工业工程优势
安装包体积 (Setup) ~140 MB -- 220 MB ~75 MB 8.59 MB (NSIS 安装包) 体积缩小 94%,分发极其敏捷
独立免安装便携版 无或打包后 > 300 MB ~110 MB (带依赖 dll) 31.70 MB (单 .exe 绿色运行) U 盘随插即用,脱机专网友好
冷启动常驻内存 (RAM) 320 MB -- 550 MB ~95 MB 32 MB -- 48 MB 内存开销降低 85%+
冷启动就绪延迟 2200 ms -- 3500 ms ~900 ms < 280 ms 进程秒开,无白屏加载感
打开 5GB PCAP 内存 直接 OOM 崩溃 内存膨胀至 8GB+ 卡死 恒定约 640 KB 稀疏索引 O(1)\mathcal{O}(1) O(1) 常数级内存视窗检索
异构总线生态 仅限 HTTP/WebSocket 偏重 TCP/IP 协议栈 以太网 + 串口/Modbus + CAN + 逻辑方波 跨层级多物理总线统一融合

三、 核心架构解密:Rust 异步双引擎与 Tauri 2.0 管道

Omni-Probe 采用了严格的前后端分离与线程隔离设计:

flowchart TD subgraph Frontend[&#34;现代渲染层 (Vue 3.5 + TypeScript + Vite + Tailwind CSS)&#34;] UI_Home[&#34;运行监控看板&#34;] UI_Traffic[&#34;流量分析看板 (虚拟滚动 + 协议树)&#34;] UI_Hardware[&#34;现场总线与硬件逻辑 (CAN / Modbus / VCD)&#34;] UI_Secrecy[&#34;等保/涉密取证工作台&#34;] end subgraph Tauri_IPC[&#34;Zero-Copy IPC & Command Bus (Tauri 2.0)&#34;] IPC_Bridge[&#34;二进制通道 / 异步非阻塞 Command 调度&#34;] end subgraph Backend_Rust[&#34;工业级纯 Rust 核心引擎 (467 项单元测试闭环)&#34;] Core_Capture[&#34;网络捕获核心: Npcap / libpcap / eBPF 环形缓冲区&#34;] Core_Sparse[&#34;PCAP 稀疏索引器: O(1) 内存流式视窗检索 (pcap_sparse_indexer.rs)&#34;] Core_VM[&#34;协议虚拟机: 声明式热插拔解剖引擎 (dynamic_dissector_vm.rs)&#34;] Core_Logic[&#34;虚拟硬件总线发生器: 纳秒级方波与 CAN 位填充 (virtual_logic_generator.rs)&#34;] Core_Audit[&#34;涉密取证: 设备白名单 / 游离句柄 / 双哈希 (secrecy_unix_audit.rs)&#34;] end Frontend <==> Tauri_IPC <==> Backend_Rust
  1. UI 渲染层:完全解耦,采用原生 Webview(Windows 下使用系统内置 WebView2),不仅彻底剥离了 Chromium 运行时整整 120MB+ 的死重,还享受到了 GPU 硬件加速的 Canvas/WebGL 渲染管线;
  2. IPC 通信层:利用 Tauri 2.0 的跨进程指令总线,所有抓包统计数据与索引视窗通过二进制零拷贝或结构化紧凑序列化传输;
  3. 计算核心:由纯 Rust 强类型构建,彻底杜绝悬垂指针与数据竞争,即便在高吞吐满载抓包下也能保证 100% 内存安全。

四、 硬核算法深度拆解

1. 突破超巨型 PCAP 内存壁垒:流式两级稀疏索引算法 (pcap_sparse_indexer.rs)

痛点推演 :一个包含 1000 万个数据包的 5GB PCAP 文件,如果一次性将每个 Packet 的元信息反序列化进内存,至少需要 107×128 Bytes≈1.28 GB10^7 \times 128\,\text{Bytes} \approx 1.28\,\text{GB} 107×128Bytes≈1.28GB 裸内存,加上解析树结构瞬间击穿 4GB~8GB。

破局方案:我们设计了**单遍物理扫描 + 两级稀疏锚点(Sparse Indexing)+ 视窗按需跳转(Paged Window Seeking)**机制。

rust 复制代码
// 32 字节硬件级紧凑对齐的稀疏索引节点
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
#[repr(C)]
pub struct SparseIndexNode {
    pub packet_seq: u64,        // 全局包绝对序号 (8B)
    pub file_offset: u64,       // 对应文件物理字节偏移 (8B)
    pub timestamp_ns: u64,      // 纳秒级物理时间戳 (8B)
    pub cumulative_bytes: u64,  // 累计物理流量字节数 (8B)
}
  • 单遍极速物理扫描 : 扫描文件时,读取 24 字节 PCAP Global Header 后进入流式循环。每次仅从流中读取 16 字节的 Packet Header(包含纳秒时间戳与捕获长度 incl_len),然后直接调用底层 io::SeekFrom::Current(incl_len) 在操作系统文件指针层完成跳跃,完全不读入、不分配 Payload 内存;
  • 步长稀疏记录(Stride) : 仅每隔 KK K 个包(默认 K=500K=500 K=500)记录一个 SparseIndexNode。1000 万个数据包仅需记录 20,000 个节点,索引常驻内存仅需 20,000×32 Bytes=640 KB20,000 \times 32\,\text{Bytes} = 640\,\text{KB} 20,000×32Bytes=640KB;
  • O(log⁡(N/K))\mathcal{O}(\log(N/K)) O(log(N/K)) 二分毫秒定位与常数内存视窗 : 当用户拖动滚动条翻到第 5,820,100 个包时,引擎仅需在稀疏索引中进行一次二分查找(耗时 <1 μs< 1\,\mu\text{s} <1μs),锁定最近的基准偏移量,单向顺序解码 100 个包填充当前视窗。无论文件是 100MB 还是 50GB,前台内存占用永远恒定在几十 KB。

2. 脱机专网的杀手锏:声明式协议解剖虚拟机 (dynamic_dissector_vm.rs)

痛点推演:在工业控制与专网涉密场景下,往往存在大量的非标私有二进制协议。传统的 Wireshark 需要编写 C 代码或复杂 Lua 脚本重新动态链接,而在信创或离线机房中,现场往往根本没有编译环境。

破局方案 :我们在 Rust 内部实现了一个轻量级、零编译开销的声明式协议解剖虚拟机。现场只需提供一段标准 JSON/YAML 规范文件,引擎即可热插拔即时挂载:

json 复制代码
{
  "protocol_id": "custom_iot_sensor",
  "name": "专网物联网传感器协议",
  "magic_pattern": [250, 251],
  "magic_offset": 0,
  "min_length": 8,
  "fields": [
    { "name": "帧头", "offset": { "Absolute": 0 }, "field_type": "U16BE", "display_format": "Hex" },
    { "name": "设备地址", "offset": { "Absolute": 2 }, "field_type": "U8", "display_format": "Decimal" },
    { "name": "状态标志", "offset": { "Absolute": 3 }, "field_type": { "Bitfield": { "mask": 15, "shift": 0 } }, "display_format": "Binary" },
    { "name": "CRC16校验和", "offset": { "FromTail": 2 }, "field_type": "U16LE", "display_format": "Hex" }
  ],
  "checksum": {
    "algorithm": "Crc16Modbus",
    "range_start": 0,
    "range_end_from_tail": 2,
    "checksum_offset": { "FromTail": 2 }
  }
}
  • 创新实现 FromTail 倒数逆向偏移模型:针对电力 DL/T 645、水利规约等可变长数据域协议,传统静态绝对偏移必然错位。虚拟机支持从帧尾逆向寻址,自动提取倒数第 2 字节精准定位校验码;
  • 全内置硬件级校验算法:原生内置 Modulo256 累加和、Xor8 异或、CRC-16/MODBUS、CRC-16/CCITT 硬件级核验,直接输出校验有效性诊断,现场抓包即刻现形私有协议错误。

3. 无实物也能测硬件:虚拟物理总线与纳秒方波发生器 (virtual_logic_generator.rs)

手头没有 Saleae 逻辑分析仪或者 CAN 盒怎么办? Omni-Probe 内置了纯 Rust 合成的物理电平发生器:

  • 真实模拟 UART 物理层:支持 115200 波特率、起始位、8 数据位、奇偶校验(Odd/Even)、停止位的精确电平模拟;
  • 深度还原 CAN 2.0 位填充(Bit-stuffing) :严格按照 ISO 11898 规范,在连续 5 个极性相同的位后强制插入 1 个相反极性的填充位,并同步运算 CAN 15 位 CRC 校验码;
  • 纳秒级故障与毛刺注入:可精确在任意采样时钟周期注入高阻态与尖峰脉冲毛刺(Glitch);
  • 标准 IEEE 1364-2001 VCD 导出:可直接导出标准波形文件,无缝导入 PulseView 或 ModelSim 进行二次仿真推演。

五、 实机运行效果多维展示

1. 系统状态概览(综合监控看板)

实时全网流量吞吐趋势、高危网络异常告警雷达与系统物理资源监控:

2. 深度协议流量分析与解剖工作台

多网卡实时捕获、三段式专业解剖树、十六进制 HEX 联动与过滤器:

3. 现场总线分析与数字波形工作台

RS-485 Modbus RTU/ASCII、CAN 报文帧、嵌入式单片机与物理电平方波:

4. 等保合规与涉密安全审计工作台

国产信创环境适配、物理外联痕迹排查、明文存储审计与一键生成 A4 报告:


六、 开箱即用与上手指南

1. 快速下载试用(Windows 生产构建)

2. 源码本地构建(极简 3 步)

本项目遵循零破坏性构建原则,克隆即可本地跑通:

bash 复制代码
# 1. 克隆代码仓库
git clone https://github.com/daybydaymylove-max/omni-probe-tauri.git
cd omni-probe-tauri

# 2. 安装前端依赖
npm install

# 3. 启动开发环境 (Rust 核心与前端热重载)
npm run tauri dev

如需进行生产级编译:

bash 复制代码
npm run tauri build

七、 写在最后与开源生态共建

Omni-Probe 现已完全开源(采用标准的 Apache-2.0 许可证)。

我们在工程实现中严格恪守工业级质量基准:

  • 零占位符交付 :仓库中不存在任何 TODO 或假数据,所有核心逻辑均真实闭环;
  • 全量测试覆盖:后端 467 项 Rust 单元测试与前端 49 项 Vitest 测试 100% 通过;
  • 纯粹务实:没有虚假宣传,只有扎实的物理指标与算法落地。

如果您在日常开发中也受困于传统工具的内存膨胀,或者正在学习 Rust 异步系统编程 与 Tauri 2.0 桌面应用开发,欢迎试用体验!

  • ⭐️ 欢迎前往 GitHub 点个 Star 支持我们 :github.com/daybydaymyl...
  • 💡 有任何 Bug 反馈、协议需求或新特性想法,欢迎提交 Issue 和 PR! lt; 1,\mu\text{s}$),锁定最近的基准偏移量,单向顺序解码 100 个包填充当前视窗。无论文件是 100MB 还是 50GB,前台内存占用永远恒定在几十 KB。

2. 脱机专网的杀手锏:声明式协议解剖虚拟机 (dynamic_dissector_vm.rs)

痛点推演:在工业控制与专网涉密场景下,往往存在大量的非标私有二进制协议。传统的 Wireshark 需要编写 C 代码或复杂 Lua 脚本重新动态链接,而在信创或离线机房中,现场往往根本没有编译环境。

破局方案 :我们在 Rust 内部实现了一个轻量级、零编译开销的声明式协议解剖虚拟机。现场只需提供一段标准 JSON/YAML 规范文件,引擎即可热插拔即时挂载:

json 复制代码
{
  "protocol_id": "custom_iot_sensor",
  "name": "专网物联网传感器协议",
  "magic_pattern": [250, 251],
  "magic_offset": 0,
  "min_length": 8,
  "fields": [
    { "name": "帧头", "offset": { "Absolute": 0 }, "field_type": "U16BE", "display_format": "Hex" },
    { "name": "设备地址", "offset": { "Absolute": 2 }, "field_type": "U8", "display_format": "Decimal" },
    { "name": "状态标志", "offset": { "Absolute": 3 }, "field_type": { "Bitfield": { "mask": 15, "shift": 0 } }, "display_format": "Binary" },
    { "name": "CRC16校验和", "offset": { "FromTail": 2 }, "field_type": "U16LE", "display_format": "Hex" }
  ],
  "checksum": {
    "algorithm": "Crc16Modbus",
    "range_start": 0,
    "range_end_from_tail": 2,
    "checksum_offset": { "FromTail": 2 }
  }
}
  • 创新实现 FromTail 倒数逆向偏移模型:针对电力 DL/T 645、水利规约等可变长数据域协议,传统静态绝对偏移必然错位。虚拟机支持从帧尾逆向寻址,自动提取倒数第 2 字节精准定位校验码;
  • 全内置硬件级校验算法:原生内置 Modulo256 累加和、Xor8 异或、CRC-16/MODBUS、CRC-16/CCITT 硬件级核验,直接输出校验有效性诊断,现场抓包即刻现形私有协议错误。

3. 无实物也能测硬件:虚拟物理总线与纳秒方波发生器 (virtual_logic_generator.rs)

手头没有 Saleae 逻辑分析仪或者 CAN 盒怎么办? Omni-Probe 内置了纯 Rust 合成的物理电平发生器:

  • 真实模拟 UART 物理层:支持 115200 波特率、起始位、8 数据位、奇偶校验(Odd/Even)、停止位的精确电平模拟;
  • 深度还原 CAN 2.0 位填充(Bit-stuffing) :严格按照 ISO 11898 规范,在连续 5 个极性相同的位后强制插入 1 个相反极性的填充位,并同步运算 CAN 15 位 CRC 校验码;
  • 纳秒级故障与毛刺注入:可精确在任意采样时钟周期注入高阻态与尖峰脉冲毛刺(Glitch);
  • 标准 IEEE 1364-2001 VCD 导出:可直接导出标准波形文件,无缝导入 PulseView 或 ModelSim 进行二次仿真推演。

五、 实机运行效果多维展示

1. 系统状态概览(综合监控看板)

实时全网流量吞吐趋势、高危网络异常告警雷达与系统物理资源监控:

2. 深度协议流量分析与解剖工作台

多网卡实时捕获、三段式专业解剖树、十六进制 HEX 联动与过滤器:

3. 现场总线分析与数字波形工作台

RS-485 Modbus RTU/ASCII、CAN 报文帧、嵌入式单片机与物理电平方波:

4. 等保合规与涉密安全审计工作台

国产信创环境适配、物理外联痕迹排查、明文存储审计与一键生成 A4 报告:


六、 开箱即用与上手指南

1. 快速下载试用(Windows 生产构建)

2. 源码本地构建(极简 3 步)

本项目遵循零破坏性构建原则,克隆即可本地跑通:

bash 复制代码
# 1. 克隆代码仓库
git clone https://github.com/daybydaymylove-max/omni-probe-tauri.git
cd omni-probe-tauri

# 2. 安装前端依赖
npm install

# 3. 启动开发环境 (Rust 核心与前端热重载)
npm run tauri dev

如需进行生产级编译:

bash 复制代码
npm run tauri build

七、 写在最后与开源生态共建

Omni-Probe 现已完全开源(采用标准的 Apache-2.0 许可证)。

我们在工程实现中严格恪守工业级质量基准:

  • 零占位符交付 :仓库中不存在任何 TODO 或假数据,所有核心逻辑均真实闭环;
  • 全量测试覆盖:后端 467 项 Rust 单元测试与前端 49 项 Vitest 测试 100% 通过;
  • 纯粹务实:没有虚假宣传,只有扎实的物理指标与算法落地。

如果您在日常开发中也受困于传统工具的内存膨胀,或者正在学习 Rust 异步系统编程 与 Tauri 2.0 桌面应用开发,欢迎试用体验!

  • ⭐️ 欢迎前往 GitHub 点个 Star 支持我们 :github.com/daybydaymyl...
  • 💡 有任何 Bug 反馈、协议需求或新特性想法,欢迎提交 Issue 和 PR!
相关推荐
是2的10次方啊2 小时前
设计模式与生活㉒:暖气热不热,得一间一间摸过去
设计模式
bigbread7 小时前
迭代器模式-在区域健康档案导出中的实战应用
设计模式
装不满的克莱因瓶9 小时前
设计模式之策略模式核心概念和应用场景
java·后端·设计模式·架构·系统架构·策略模式
是2的10次方啊1 天前
设计模式与生活㉑:一句“建议复查”,是好几句话拼出来的
设计模式
杯子不吃紫菜2 天前
LangGraph 体系实战(下):中断恢复、流式、子图与设计模式
单片机·嵌入式硬件·设计模式
是2的10次方啊2 天前
设计模式与生活⑳:楼里的事都找前台,你就再没见过师傅
设计模式
是2的10次方啊3 天前
设计模式与生活⑲:投影连不上,别急着换投影仪
设计模式
cjz38994 天前
规则树:把一百行if-else拆成一棵树
设计模式
Adellle4 天前
设计模式指南 (Java 版) ㊁
java·开发语言·设计模式