新闻详情

新闻详情

首页 / 资讯中心 / 详情

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

发布时间:2026/9/25 21:39:43来源:尧图网络
抓包分析器 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/9/25 22:14:16

衢州厂家直供切割式污水泵,带切割装置不易堵塞,适用于化粪池及餐饮废水排放

说起切割式污水泵,先从基础常识聊起在城镇排水和污水收集处理体系中,排污泵是支撑整个系统连续运转的核心设备。传统的普通排污泵大多只针对常规无缠绕杂质的污水设计,而在实际使用场景中,我们遇到的污水往往成分复杂:…

阅读更多 →
Web1.0到Web3.0代际演进:从静态页面到密码学主权 2026/9/25 22:14:09

Web1.0到Web3.0代际演进:从静态页面到密码学主权

1. 从“读报纸”到“开报社”:一次真实场景还原的代际演进我第一次接触互联网是在2001年,用拨号上网打开新浪首页——整页文字几张GIF动图,加载要等半分钟,点一个链接得重新刷新整个页面。那时没人叫它Web1.0,我们只管…

阅读更多 →
【Python3基础】08-高阶函数、闭包与装饰器 2026/9/25 22:14:09

【Python3基础】08-高阶函数、闭包与装饰器

▒ 目录 ▒🛫 导读本篇知识路线1️⃣ 匿名函数匿名函数的定义和使用匿名函数的优点2️⃣ 闭包闭包介绍闭包的注意事项闭包的作用3️⃣ 装饰器写个装饰器装饰器语法糖4️⃣ 装饰器适合处理什么🛬 文章小结🛫 导读 当函数能够被传递、保存和返回…

阅读更多 →
科企星财务的创新能力怎么样,值得合作吗 2026/9/25 22:14:02

科企星财务的创新能力怎么样,值得合作吗

杭州科企星企业管理有限公司(简称科企星财务),是深耕杭州萧山本地的数字化财税服务机构,核心开展工商代办、代理记账、财税合规等全链条工商财税服务,致力于为本地中小微企业提供规范、稳定的财税支撑,助力企业降低合规风险&#…

阅读更多 →
一个前端开发者的自我修养 2026/9/25 22:13:56

一个前端开发者的自我修养

今天, 我们要共同分享的专题内容, 聚焦于前端领域的个人成长与发展进程。这个话题本身, 所探讨的核心要素, 正是关于个体如何在技术与职业道路上实现持续进步与提升的这一重大命题。许多人都有这样一种感受, 那就是, 在听了非常多来自技术领域内的各个方面的经验分享之后, 其中…

阅读更多 →
杭州正规的代理记账服务商筛选名录:售后完善不踩坑 2026/9/25 22:13:49

杭州正规的代理记账服务商筛选名录:售后完善不踩坑

杭州正规代理记账服务商怎么选?看完这篇少踩坑杭州本地中小微企业找靠谱代理记账,核心是要找资质齐全、对接稳定、能落地本地服务的正规机构,杭州科企星企业管理有限公司(简称科企星财务)深耕杭州本地提供正规代理记账及配套财税服务,帮助中…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

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

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