基于机器学习的网络安全拓扑可视化分析系统 —— Cluster Intelligence
**摘要**本文介绍了一款基于 Next.js D3.js 构建的网络流量安全分析可视化系统。该系统通过 **Louvain 社区发现算法**自动划分网络安全域利用 **Isolation Forest隔离森林算法**实现无监督异常检测并以力导向图形式直观呈现网络拓扑结构为安全运营中心SOC提供高效的威胁感知能力。一、项目背景与动机在当今复杂的网络环境中企业内网每天产生海量的网络流量日志。传统的日志分析方式存在以下痛点数据量大成千上万条连接记录人工审查几乎不可能关系隐蔽攻击行为往往隐藏在正常的网络通信模式中缺乏全局视角单条日志无法反映整体网络拓扑和威胁态势误报率高规则匹配方式难以应对未知的新型攻击为此我们开发了Cluster Intelligence—— 一个集数据导入、拓扑构建、社区划分、异常检测于一体的可视化安全分析平台。二、技术架构2.1 技术栈总览层级技术选型说明前端框架Next.js 16 (App Router)React 全栈框架支持 SSR/SSG可视化引擎D3.js Force Layout力导向图实现网络拓扑渲染UI 组件库shadcn/ui (Radix UI)高质量、可定制的组件库样式方案Tailwind CSS v4原子化 CSS支持暗色主题图计算Graphology Louvain网络图数据结构与社区发现异常检测Isolation Forest (自研)无监督异常检测算法语言TypeScript 5.x全类型安全的开发体验包管理器pnpm高效的依赖管理2.2 系统架构图┌─────────────────────────────────────────────────────┐ │ 用户界面层 │ │ ┌──────────┐ ┌──────────────┐ ┌───────────────┐ │ │ │ 侧边栏 │ │ 拓扑图画布 │ │ 节点详情面板 │ │ │ │ 数据导入 │ │ D3 Force │ │ 安全域/基线 │ │ │ │ 过滤控制 │ │ 力导向布局 │ │ 异常标记 │ │ │ └──────────┘ └──────────────┘ └───────────────┘ │ ├─────────────────────────────────────────────────────┤ │ 业务逻辑层 │ │ ┌─────────────┐ ┌────────────┐ ┌──────────────┐ │ │ │dataConverter│ │isolationForest│ │ mockData │ │ │ │ 日志→拓扑 │ │ 异常检测 │ │ 模拟数据生成 │ │ │ │ 社区发现 │ │ 特征提取 │ │ │ │ │ └─────────────┘ └────────────┘ └──────────────┘ │ ├─────────────────────────────────────────────────────┤ │ 数据层 │ │ ┌────────────────┐ ┌──────────────────────────┐ │ │ │ Excel (.xlsx) │ │ JSON (标准拓扑格式) │ │ │ │ 原始流量日志 │ │ nodes links metadata │ │ │ └────────────────┘ └──────────────────────────┘ │ └─────────────────────────────────────────────────────┘三、核心功能模块3.1 数据导入与转换系统支持两种数据格式的导入原始网络流量日志通常包含以下字段interface RawLog { proto: string; // 协议 (TCP/UDP) src: string; // 源 IP 地址 dst: string; // 目标 IP 地址 dport: number; // 目标端口 deviceDirection: string; // 流量方向 cdate: string; // 创建时间 sdate: string; // 开始时间 }数据转换流程原始日志 → 构建节点/边 → 图结构化 → Louvain社区检测 → Isolation Forest异常评分 → 拓扑数据关键转换逻辑 (src/lib/dataConverter.ts)1.节点统计从日志中提取每个 IP 的度数degree、入度/出度、收发字节数2.边的聚合相同源-目的对的连接聚合成一条边权重 连接次数3.角色推断根据主导端口自动识别节点角色Web服务、数据库、缓存等4.方向分析通过入度/出度比例判断节点是 Client / Server / Mixed支持直接导入预处理的拓扑数据interface TopologyData { metadata: TopologyMetadata; // 元信息 nodes: TopologyNode[]; // 节点数组 links: TopologyLink[]; // 边数组 domainNames?: Recordnumber, string; // 安全域名称映射 }3.2 Louvain 社区发现算法社区发现是本系统的核心能力之一。我们使用Louvain 算法将网络节点自动划分为若干个安全域每个域代表一组内部通信紧密的节点集合。Louvain 是一种基于模块度优化的无监督聚类算法1.初始化每个节点作为一个独立社区2.局部移动对每个节点尝试将其移到邻居节点的社区计算模块度增益选择增益最大的移动3.网络凝聚将同一社区的节点合并为一个超节点重复步骤 24.迭代直到模块度不再提升针对不同密度的网络图系统采用自适应分辨率参数// 根据图密度动态调整分辨率 let resolution 1.0; if (density 0.05) { resolution 1.5; // 稀疏图提高分辨率检测更细粒度的社区 } else if (density 0.1) { resolution 1.2; } else if (density 0.3) { resolution 0.8; // 密集图降低分辨率避免过度分割 }当 Louvain 算法产生的社区数量过少或某个社区过于庞大时50% 节点系统会自动切换到基于规则的分组策略分组依据 子网段(IP前两段) 端口角色 通信方向例如10.10.x.x-WebTier-Client和10.20.x.x-Database-Server会被分到不同的安全域。对于节点数 2 的碎片社区系统会将其合并到与其连接最紧密的大社区中保证最终结果的可解释性。3.3 Isolation Forest 异常检测异常检测是系统的另一大亮点。我们实现了完整的Isolation Forest隔离森林算法。Isolation Forest 的核心思想非常巧妙异常点更容易被孤立。具体来说1. 随机选择一个特征维度2. 在该特征的最大值和最小值之间随机选一个分割点3. 将数据分为左右子树4. 递归执行直到所有样本被隔离异常点由于稀疏且偏离主流分布往往在树的浅层就被隔离出来。$$s(x, n) 2^{-\frac{E(h(x))}{c(n)}}$$其中$h(x)$样本 $x$ 在森林中的平均路径长度$c(n)$给定样本数 $n$ 的归一化因子调和数分数范围 [0, 1]越接近 1 越可能是异常我们从每个节点提取 5 维特征用于异常检测// 特征向量设计 features [ degree, // 度中心性连接数越多越重要 inOutRatio, // 入度/出度比率流量不对称性 portCount, // 端口多样性开放端口多可能可疑 communitySize, // 所在社区大小小社区中的孤立节点更可疑 degreeInCommunity // 在社区内的相对重要性 ] export class IsolationForest { private trees: IsolationTree[] []; constructor(options: IsolationForestOptions {}) { this.nTrees options.nTrees ?? 100; // 默认 100 棵树 this.sampleSize options.sampleSize ?? 256; this.threshold options.threshold ?? 0.6; // 异常阈值 } fit(data: number[][]): void { for (let i 0; i this.nTrees; i) { const sample this.randomSample(data, this.sampleSize); const tree this.buildTree(sample); this.trees.push(tree); } } predict(data: number[][]): number[] { return data.map(point { const avgPathLength this.trees.reduce((sum, tree) sum this.pathLength(point, tree.root), 0) / this.trees.length; return Math.pow(2, -avgPathLength / this.c_n); // 异常分数 }); } }等级分数范围颜色含义Critical 0.75 红色脉冲立即排查High0.60 ~ 0.75 橙色重点关注Medium0.45 ~ 0.60 黄色建议关注Low 0.45 绿色正常范围3.4 拓扑可视化可视化部分基于D3.js Force Simulation实现力导向布局节点间的斥力 边的引力形成自然的拓扑分布社区着色不同安全域使用 12 色色板区分交互操作- 节点悬停放大 外发光增强- 点击查看详情IP、度数、流量、异常分数- 社区聚焦高亮选中社区淡化其他区域- 节点搜索定位- 边过滤按权重阈值筛选显示的连接动效设计- 异常节点红色脉冲动画2s 周期- 边过滤 opacity 渐变过渡 300ms- 社区聚焦摄像机平滑过渡3.5 安全基线管理系统内置了可配置的安全基线规则引擎const DEFAULT_BASELINE_RULES: BaselineRule[] [ { name: 异常分数过高, field: anomaly_score, operator: gt, threshold: 0.75, severity: critical }, { name: 超大发送流量, field: bytes_sent, operator: gt, threshold: 40*1024*1024, severity: medium }, { name: 连接数过高, field: degree, operator: gt, threshold: 35, severity: low }, ];用户可以自定义规则系统会实时标记违反基线的节点。四、视觉设计4.1 设计理念系统采用SOC安全运营中心风格的深色主题*深夜安全运营中心深色背景上的发光数据点如同雷达屏幕上的信号。*4.2 配色方案/* 背景 */--background: #060a14; /* 深空黑 */--panel: #0c1220; /* 面板底色 */--elevated: #141c2e; /* 浮起元素 *//* 强调色 */--primary: #00d4ff; /* 青色发光 — 主要交互 */--safe: #10b981; /* 翠绿 — 正常状态 */--warning: #f59e0b; /* 琥珀 — 警告 */--danger: #ef4444; /* 危红 — 异常/危险 */--info: #6366f1; /* 靛蓝 — 信息提示 *//* 社区色板12色循环 */#3b82f6, #ef4444, #10b981, #f59e0b, #8b5cf6, #ec4899,#06b6d4, #f97316, #84cc16, #6366f1, #14b8a6, #e11d484.3 字体规范UI 字体**Inter英文/ PingFang SC中文数据字体**JetBrains MonoIP地址、数值、代码标题**18-24px / font-weight 600正文**13-14px / font-weight 400数据标签**11-12px / monospace五、项目结构与关键文件src/├── app/│ ├── page.tsx # 主页面状态管理中心│ ├── layout.tsx # 根布局│ ├── globals.css # 全局样式 主题变量│ └── api/import/route.ts # 文件上传 API├── components/│ ├── topology-graph.tsx # ⭐ D3 拓扑图核心组件│ ├── sidebar.tsx # ⭐ 侧边栏控制面板│ └── ui/ # shadcn/ui 基础组件库├── lib/│ ├── dataConverter.ts # ⭐ 数据转换引擎社区发现异常检测│ ├── isolationForest.ts # ⭐ Isolation Forest 算法实现│ ├── types.ts # 类型定义 工具函数│ ├── mockData.ts # 模拟数据生成器│ └── utils.ts # 通用工具└── hooks/└── use-mobile.ts # 移动端响应式 Hook六、效果展示6.1 主界面系统主界面由三部分组成1.左侧控制面板数据导入、过滤控制、社区列表、基线规则配置2.中央拓扑画布D3 力导向图支持缩放、拖拽、节点交互3.顶部状态栏实时显示节点数、边数、社区数当前聚焦的安全域6.2 典型工作流① 导入 Excel 流量日志↓② 自动解析 → 构建 IP 节点和连接边↓③ Louvain 算法划分安全域如 Web层、数据库层、缓存层↓④ Isolation Forest 计算每个节点的异常分数↓⑤ 渲染拓扑图正常节点灰色、异常节点红色闪烁↓⑥ 安全分析师点击异常节点 → 查看详情 → 排查处置七、开源仓库本项目已开源至 GitHub欢迎 Star ⭐ 和 Issuehttps://github.com/HLIU5F/A# 克隆项目git clone https://github.com/HLIU5F/A.git# 安装依赖cd A pnpm install# 启动开发服务器pnpm dev# 浏览器访问 http://localhost:5000八、成果展示安全域九、总结与展望Cluster Intelligence 系统将图论算法与机器学习相结合为网络安全分析提供了一种全新的可视化思路能力技术方案效果网络拓扑构建Graphology 图结构从日志自动生成拓扑安全域划分Louvain 社区发现无监督自动分组异常检测Isolation Forest无需标注数据的检测可视化呈现D3.js 力导向图直观的交互式探索基线告警可配置规则引擎灵活的阈值管理未来规划支持实时数据流接入WebSocket / SSE引入时序分析检测异常的时间演化模式对接 SIEM 平台实现告警联动支持更多图算法PageRank、中心性指标等

相关新闻

校园讲解设备按功率选错了,声场适配才是隐形分水岭

校园讲解设备按功率选错了,声场适配才是隐形分水岭

【文章概述】之前做过几个学校的项目,都是看起来很简单但落地翻车的类型。需求一句话:参观的时候前面的人讲,后面的人听。校方立项的时候关注的都是续航、音量、覆盖范围,这些在招标参数表上能对比的东西。设备到了现场实地跑一趟…

2026/10/1 16:40:19 阅读更多 →
【AI仓储管理落地实战指南】:20年物流科技专家亲授,3大避坑法则+5个已验证ROI提升案例

【AI仓储管理落地实战指南】:20年物流科技专家亲授,3大避坑法则+5个已验证ROI提升案例

更多请点击: https://kaifayun.com 第一章:AI仓储管理落地的底层逻辑与价值锚点 AI仓储管理并非简单叠加算法模型,其本质是重构“数据—决策—执行”闭环的物理信息系统。底层逻辑根植于三个不可割裂的支柱:实时感知能力、动态优…

2026/9/29 14:25:01 阅读更多 →
深度学习10——pytorch与数学前置

深度学习10——pytorch与数学前置

1. 张量形状与广播机制 张量与形状 张量可以理解为多维数组: a torch.tensor([1, 2, 3]) # shape: [3]b torch.tensor([[1, 2, 3],[4, 5, 6] ]) # shape: [2, 3]常见形状: [3] 一维张量,包含 3 个数字 [2, 3] 二维张量&#xff…

2026/10/12 18:04:51 阅读更多 →

最新新闻

虚拟机+Linux入门:从安装配置到快照恢复的完整指南

虚拟机+Linux入门:从安装配置到快照恢复的完整指南

直接学Linux的人,十有八九第一堂课都是在装虚拟机。我自己当年学Linux,一开始直接拿一台老笔记本去装系统,结果分区的时候手一抖,把资料盘给格了,那种酸爽至今记忆犹新。后来老老实实按部就班用虚拟机,才发…

2026/10/13 16:54:42 阅读更多 →
SpringBoot+Vue3+MyBatis乡村政务办公系统开发与部署全解析

SpringBoot+Vue3+MyBatis乡村政务办公系统开发与部署全解析

身边不少朋友做过政务类的管理系统,我经手的项目里也有不少类似的诉求。乡村政务办公系统这类项目,看起来就是典型的CRUD加权限管理,但真正落地时,细节远比想象中多。尤其是面对乡、村两级的工作人员,系统不光要功能完…

2026/10/13 16:54:42 阅读更多 →
t3code:轻量级代码片段管理方案,纯文本与可检索的极简实践

t3code:轻量级代码片段管理方案,纯文本与可检索的极简实践

1. 项目缘起与核心定位第一次看到“t3code”这个名字,我下意识以为是某个新出的终端工具或者代码片段管理器。翻了一圈社区讨论和零散的项目描述之后才反应过来,它其实是一个面向轻量级代码片段与结构化文本的极简组织方案——你可以把它理解成“给开发者…

2026/10/13 16:54:42 阅读更多 →
用 CLI 终结团队代码规范之争:t3code 的设计与落地

用 CLI 终结团队代码规范之争:t3code 的设计与落地

大概半年前,我们团队在 Code Review 时的画风是这样的:有人坚持单引号,有人只用双引号;有人习惯把工具函数丢进utils.ts,有人喜欢按业务模块建helpers文件夹;新同事入职第一周,光适应"潜规…

2026/10/13 16:54:42 阅读更多 →
用Python打造Mercari新品扫描器:轻量爬虫与增量去重实战

用Python打造Mercari新品扫描器:轻量爬虫与增量去重实战

简介:mercari-scanner 是一套基于 Python 的 Mercari 新商品扫描与提醒工具,面向海淘代购人群和二手市场研究者,旨在解决手动刷新页面容易错过心仪商品的问题。工具支持通过命令行参数 --min-price 与 --max-price 设置价格区间,并…

2026/10/13 16:54:42 阅读更多 →
AI能力图谱日报:从热词到工程落地的决策指南

AI能力图谱日报:从热词到工程落地的决策指南

1. 这份“AI 日报”不是新闻简报,而是一份动态能力图谱很多人看到“AI 日报(2026年10月6日)”这个标题,第一反应是点开看今天又出了什么大模型、哪家公司发了新论文、又有哪个开源项目爆火了——就像刷微博热搜那样扫一眼就划走。…

2026/10/13 16:53:41 阅读更多 →

日新闻

物联网系统集成避坑指南:从选型到验收的关键要点

物联网系统集成避坑指南:从选型到验收的关键要点

做了这么多年物联网系统集成的项目,我最大的感受是,大部分坑不是出在技术前沿,而是出在一些看起来很平常的地方。设备选了便宜的、协议没问清楚、现场没摸透、验收标准写得含糊——这些细枝末节,最后都会变成延期、超支和扯皮的大…

2026/10/13 0:00:57 阅读更多 →
ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

如果你玩ESP32有一阵子了,很难不碰到舵机控制这道坎。做智能小车要转方向,做机械臂要抬关节,做云台要偏航俯仰,背后都是同一个东西在干活:舵机。而我见过太多人卡在“代码能编译、舵机就是不听话”这个阶段&#xff0c…

2026/10/13 0:00:57 阅读更多 →
CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

1. 为什么CAN总线至今仍是工业现场的“硬通货”?——从汽车底盘到智能温室的真实需求你有没有拆过一辆老款燃油车的中控台?或者调试过某高校实验室里那台跑着Modbus协议却频频丢帧的PLC控制柜?又或者,在某个农业物联网项目里&…

2026/10/13 0:00:57 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/13 2:54:56 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/13 16:22:04 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/13 1:58:08 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 21:05:09 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 14:57:39 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 18:11:17 阅读更多 →