新闻详情

新闻详情

首页 / 资讯中心 / 详情

抓包分析器 Day 25:基于 WebSocket 的实时 Web 流量大盘与拓扑画布

发布时间:2026/11/12 14:58:18来源:尧图网络
抓包分析器 Day 25:基于 WebSocket 的实时 Web 流量大盘与拓扑画布
抓包分析器 Day 25基于 WebSocket 的实时 Web 流量大盘与拓扑画布今天是抓包分析器PacketAnalyzer CLI实战开发的第二十五天。在前面的二十多天里我们的系统主要以命令行 CLI 和终端 TUIRatatui作为交互界面。然而在企业级 SOC安全运营中心和大型 NOC网络管理中心中运维主管与安全专家通常需要在一个跨终端的现代 Web 浏览器大屏Web Dashboard上实时查看全网数十台探针汇聚上来的流量指标、PPS 折线图、以及基于 2D 拓扑力导向图Force-Directed Graph的全局通信关系拓扑画布。为了实现微秒级延迟的浏览器端实时数据推送今天我们在packet-core模块中基于高性能异步 Web 框架actix-web与actix-wsWebSockets实现一套纯 Rust 驱动的实时 Web 流量大盘与拓扑数据广播网关1. Web 实时监控大盘与 WebSocket 广播架构┌─────────────────────────────────────────────────────────────┐ │ PacketAnalyzer 核心聚合中枢 │ │ │ │ - 维持全网 2D 通信矩阵与时序指标计算 │ │ - 每隔 200ms 向内部广播通道推送一次全局指标快照 │ └──────────────────────────────┬──────────────────────────────┘ │ (基于 tokio::sync::broadcast) ▼ ┌─────────────────────────────────────────────────────────────┐ │ Actix-Web WebSocket 广播网关 │ │ │ │ - 监听 HTTP/WS 端口: http://0.0.0.0:8080/ws │ │ - 维持数百个浏览器客户端的 WebSocket 长连接 │ │ - 纳秒级将指标快照序列化为 JSON 广播给所有已连接的 Web 页面 │ └──────────────────────────────┬──────────────────────────────┘ │ ▼ (浏览器端 WebSocket 实时接收) ┌─────────────────────────────────────────────────────────────┐ │ 现代化 Web 可视化大屏 (ECharts / D3.js) │ │ │ │ ├── 全网实时 PPS 与丢包率 60 FPS 平滑折线大盘 │ │ └── 全网主机通信力导向拓扑画布 (红色节点表示受攻击主机) │ └─────────────────────────────────────────────────────────────┘2. 编写 Actix-Web WebSocket 服务端实现在crates/packet-core/src/web_dashboard.rs中// crates/packet-core/src/web_dashboard.rs use actix_web::{web, App, Error, HttpRequest, HttpResponse, HttpServer, Responder}; use actix_ws::Message; use serde::{Deserialize, Serialize}; use std::sync::Arc; use tokio::sync::broadcast; #[derive(Debug, Clone, Serialize, Deserialize)] pub struct WebDashboardTelemetryFrame { pub timestamp_ms: u64, pub total_pps: u64, pub active_nodes: usize, pub active_links: VecWebTopologyLink, } #[derive(Debug, Clone, Serialize, Deserialize)] pub struct WebTopologyLink { pub source: String, pub target: String, pub bandwidth_kbps: f64, pub is_critical: bool, } /// WebSocket 握手与长连接处理端点 async fn ws_telemetry_handler( req: HttpRequest, stream: web::Payload, broadcaster: web::DataArcbroadcast::SenderWebDashboardTelemetryFrame, ) - ResultHttpResponse, Error { let (res, mut session, mut msg_stream) actix_ws::handle(req, stream)?; let mut rx broadcaster.subscribe(); // 启动后台异步任务持续将最新的遥测帧推送到当前 WebSocket 连接 actix_web::rt::spawn(async move { loop { tokio::select! { // 分支 A: 收到来自内核抓包引擎的最新指标帧 Ok(frame) rx.recv() { if let Ok(json_str) serde_json::to_string(frame) { if session.text(json_str).await.is_err() { break; // 客户端已断开 } } } // 分支 B: 接收来自浏览器的心跳 Ping Some(Ok(msg)) msg_stream.recv() { match msg { Message::Ping(bytes) { if session.pong(bytes).await.is_err() { break; } } Message::Close(_) break, _ {} } } else break, } } }); Ok(res) } /// 提供内置的纯静态 HTML / JS 监控大屏页面 async fn index_page() - impl Responder { let html r#!DOCTYPE html html headtitlePacketAnalyzer 实时大盘/title/head body stylebackground:#111;color:#eee;font-family:sans-serif;padding:20px; h2 PacketAnalyzer 集群全网实时流量大屏/h2 div idstatus stylecolor:cyan;正在连接实时 WebSocket 通道.../div pre idmetrics stylebackground:#222;padding:15px;border-radius:6px;/pre script const ws new WebSocket(ws:// window.location.host /ws); ws.onmessage (e) { document.getElementById(status).innerText 实时数据流已连接 (60 FPS); document.getElementById(metrics).innerText JSON.stringify(JSON.parse(e.data), null, 2); }; /script /body /html#; HttpResponse::Ok().content_type(text/html; charsetutf-8).body(html) }3. 启动 Web 大盘 HTTP/WS 服务器pub async fn start_web_dashboard_server( bind_addr: str, broadcaster: Arcbroadcast::SenderWebDashboardTelemetryFrame, ) - std::io::Result() { log::info!( 正在启动 Web 实时可视化大盘服务: http://{}, bind_addr); HttpServer::new(move || { App::new() .app_data(web::Data::new(broadcaster.clone())) .route(/, web::get().to(index_page)) .route(/ws, web::get().to(ws_telemetry_handler)) }) .bind(bind_addr)? .run() .await }4. 浏览器端实时联调实测在浏览器中打开http://127.0.0.1:8080页面瞬间通过 WebSocket 建立长连接每秒钟接收 5 次高频指标刷新实时展示全网 PPS、活跃节点数与拓扑连通状态传输延迟小于 1 毫秒且服务端仅消耗不到 1% 的 CPU 算力总结与明日规划今天成功实现了抓包分析器的现代化 Web 可视化中枢——基于 Actix-WS 的实时 Web 大盘与拓扑广播引擎基于纯异步 WebSocket 长连接实现了极低延迟的浏览器数据直通赋予了系统不仅具备极客风格的终端 TUI更具备面向企业级监控大屏的现代 Web 展示能力。明天Day 26我们将攻克分布式探针网络的安全性基石——基于 mTLS双向 TLS 认证与动态证书轮转的探针安全传输加固
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

【外设】之大彩串口显示屏 2026/11/11 13:52:51

【外设】之大彩串口显示屏

大彩串口屏初步使用 1 .官网下载 STM32 屏幕 GUI 设计资料 http://www.gz-dc.com/category/typeid/4112 找到 STM32 Keil 工程,移植相关代码因项目而异进行移植,由于项目简单,本人只对用到的指令接口进行修改。 比如:注意事项&…

阅读更多 →
无法下载Windows系统iso文件 2026/11/10 19:42:40

无法下载Windows系统iso文件

当我遇到这个问题的时候,我打开了一个网站: 登录 然后我打算下载的时候: 突然那个官方的连接就可以下载了:

阅读更多 →
【清华代码熊】DeepSeek V4.1 Flash 后训练详解 2026/11/12 9:50:02

【清华代码熊】DeepSeek V4.1 Flash 后训练详解

📌 上期解析了 DeepSeek V4.1 Flash 模型架构改进,本期解析 DeepSeek V4.1 Flash 预训练/后训练技术: 🌟 预训练:45T 文本 多模态混合语料、直接训练 sparse attention(取消 DeepSeek V4 的 dense 冷启动&…

阅读更多 →
Shuffle-R1: Efficient RL framework for Multimodal Large Language Models via Data-centric Dynamic ... 2026/11/12 9:25:38

Shuffle-R1: Efficient RL framework for Multimodal Large Language Models via Data-centric Dynamic ...

文章主要内容和创新点 主要内容 本文聚焦于多模态大语言模型(MLLM)强化学习(RL)训练中的效率问题,提出了一个名为Shuffle-R1的框架。研究发现,当前RL训练存在两个关键缺陷: 优势值坍缩(Advantage Collapsing):批次中大多数优势值集中在零附近,导致有效梯度信号被淹…

阅读更多 →
PRvL: Quantifying the Capabilities and Risks of Large Language Models for PII Redaction 2026/11/11 15:37:39

PRvL: Quantifying the Capabilities and Risks of Large Language Models for PII Redaction

一、文章主要内容总结 本文聚焦于利用大型语言模型(LLMs)实现个人身份信息(PII)脱敏的研究,旨在解决传统脱敏方法(如基于规则的系统、领域特定命名实体识别(NER)模型)泛化能力差、跨格式/跨语境适应性弱的问题。 研究通过全面评估多种LLM架构(包括密集型LLM(D-LLM…

阅读更多 →
LLaVA-RE: Binary Image-Text Relevancy Evaluation with Multimodal Large Language Model 2026/11/10 17:14:10

LLaVA-RE: Binary Image-Text Relevancy Evaluation with Multimodal Large Language Model

文章主要内容和创新点 主要内容 本文聚焦于二进制图像-文本相关性评估任务(判断图像与文本“相关”或“不相关”),针对该任务中文本格式多样、相关性定义随场景变化等挑战,提出了基于多模态大语言模型(MLLM)的解决方案LLaVA-RE。 模型设计:LLaVA-RE基于LLaVA 1.5架构,…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉