ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

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

抓包分析器 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 认证与动态证书轮转的探针安全传输加固
返回列表