首页/新闻资讯/正文详情

主机安全态势感知系统拆包:日志解析到ECharts地图可视化全链路

发布时间:2026/9/28 1:11:54 来源:云帆数科 栏目:资讯中心
主机安全态势感知系统拆包:日志解析到ECharts地图可视化全链路
简介这份毕业设计资源聚焦主机安全态势感知系统的完整实现面向网络安全、计算机相关专业的学生及课程设计开发者帮助解决从数据采集到威胁响应的全流程落地问题。压缩包共662个文件约35.19MB以619个JavaScript文件为主配合15个Python脚本、14个pyc编译文件及少量txt、html、json、css等另有mmdb地理库与brute_analyse、http_analyse、ssh_analyse等分析模块整体呈现前端可视化与后端分析并重的结构。项目围绕数据收集、数据分析、威胁检测、可视化展示与响应策略五个环节展开Python侧可借助Pandas、Scikit-learn等完成异常检测与行为建模前端则通过ECharts等图表库呈现安全态势仪表盘。已有282人学习关注适合需要完整毕设方案、模块划分参考与排错思路的读者可据此快速理解系统架构并复现关键功能。1. 主机安全态势感知系统拆包从日志到世界地图的完整链路拿到一个名为“毕业设计 主机安全态势感知系统.zip”的压缩包多数人的第一反应是“能不能跑起来、跑起来长什么样”。我拆过不少同类毕设这个包的结构有点意思brute_analyse、http_analyse两个分析脚本scb.css和base.html撑起前端骨架echarts.min.js、echarts-gl.min.js负责图表渲染再加上Russia.js、Canada.js、jiang1_xi1_gan4_zhou1.js这几个地名脚本——基本可以断定这是一个把主机日志里的攻击源投射到世界地图和国内省份地图上的可视化系统。它解决的核心问题是把零散的 SSH 爆破、HTTP 异常请求日志变成一眼能看懂的地理分布态势。适合正在做网络安全方向毕设、课程设计或者想快速搭一个安全监控原型的同学。你不需要从零写 ECharts 配置也不用纠结地图 JSON 怎么注册这套代码已经把“日志解析→攻击源统计→地图渲染”的链路串好了。2. 日志解析与攻击源提取brute_analyse 和 http_analyse 怎么改2.1 两个分析脚本的分工与输入格式brute_analyse和http_analyse是整个系统的数据入口。从命名看前者处理暴力破解类日志后者处理 HTTP 请求日志。常见做法是brute_analyse读取类似/var/log/auth.log或/var/log/secure的 SSH 登录失败记录用正则提取 IP、时间戳、尝试用户名http_analyse则解析 Nginx 或 Apache 的access.log抓取状态码、请求路径、User-Agent识别扫描器或异常高频访问。我一般会先确认脚本里的正则能不能匹配你手头的日志格式。不同发行版的 auth.log 差异很大Ubuntu 的Failed password for invalid user admin from 1.2.3.4和 CentOS 的Failed password for root from 1.2.3.4 port 22 ssh2提取逻辑就不一样。打开brute_analyse找到类似下面的正则import re # 匹配 SSH 失败登录提取 IP 和用户名 pattern rFailed password for (?:invalid user )?(\S) from (\d\.\d\.\d\.\d) with open(/var/log/auth.log, r, encodingutf-8, errorsignore) as f: for line in f: match re.search(pattern, line) if match: username, ip match.groups() # 后续写入统计字典或数据库这段代码的逻辑很直白逐行扫描日志用非捕获组(?:invalid user )?兼容“无效用户”和“有效用户”两种失败提示最终拿到用户名和 IP。参数上唯一需要动的是文件路径和正则本身。如果你的日志里 IP 出现在from之前或者有 IPv6就得改\d\.\d\.\d\.\d这段。http_analyse同理重点看它提取的是$remote_addr还是$http_x_forwarded_for后者在套了 CDN 的场景下更准但容易被伪造。2.2 把分析结果转成地图能吃的 JSONECharts 地图系列需要的数据格式是[{name: Russia, value: 123}, ...]。Russia.js、Canada.js这些文件大概率是地图的 GeoJSON 注册脚本而jiang1_xi1_gan4_zhou1.js看拼音是“江西赣州”说明系统还做了国内省市下钻。分析脚本跑完后不能直接扔给前端中间得有一次聚合。常见做法是在brute_analyse末尾加一段聚合逻辑按国家或省份统计攻击次数输出 JSON 文件供前端fetch或直接写成 JS 变量。比如import json from collections import Counter # 假设 ip_count 是 {ip: 次数} 的字典 # 这里需要 IP 转国家的库常见用 geoip2 或纯真 IP 库 import geoip2.database reader geoip2.database.Reader(GeoLite2-Country.mmdb) country_counter Counter() for ip, count in ip_count.items(): try: response reader.country(ip) country response.country.name country_counter[country] count except Exception: country_counter[Unknown] count # 输出成 ECharts 地图需要的格式 result [{name: k, value: v} for k, v in country_counter.items()] with open(static/attack_map.json, w) as f: json.dump(result, f)这段代码的关键参数是GeoLite2-Country.mmdb的路径MaxMind 的免费库需要自己下载并定期更新否则新 IP 段会落到 Unknown。另一个坑是国家名称必须和Russia.js里注册的name完全一致比如“United States”不能写成“USA”否则地图上不会着色。如果你不想引入 geoip2也可以用在线 API但毕设环境通常离线本地库更稳。2.3 前端如何消费这些数据base.html里应该有一个div idmap容器echarts.init之后通过series的map类型加载。echarts-gl.min.js的存在说明可能还做了 3D 地球或立体柱状图。你需要在base.html里确认地图注册的顺序先加载Russia.js这类地理数据脚本再执行echarts.registerMap(Russia, geoJson)最后setOption。如果顺序反了控制台会报Map russia not exists。数据更新频率取决于你的日志量毕设演示时手动跑一次分析脚本、刷新页面即可想做得像实时系统可以加个setInterval每 30 秒重新拉取 JSON但要注意浏览器缓存加时间戳参数最省事。3. 可视化地图与 ECharts 配置地名脚本和 3D 渲染的配合3.1 Russia.js、Canada.js 与 echarts-gl 的加载顺序Russia.js和Canada.js不是普通的工具库它们内部通常是echarts.registerMap(Russia, {...})的调用。这意味着它们必须在echarts.min.js之后加载否则echarts全局变量还不存在。我见过不少毕设把顺序写反结果地图一片空白控制台只报一句echarts is not defined排查半天。正确的script顺序是script srcstatic/js/echarts.min.js/script script srcstatic/js/echarts-gl.min.js/script script srcstatic/js/Russia.js/script script srcstatic/js/Canada.js/script script srcstatic/js/jiang1_xi1_gan4_zhou1.js/script script srcstatic/js/main.js/scriptecharts-gl要在echarts之后、地图脚本之前因为它扩展了echarts的 3D 系列类型。main.js是你自己写的初始化逻辑放最后。如果你只做 2D 地图echarts-gl可以去掉但既然包里带了大概率有 3D 柱状图或地球模式去掉会报series-globe not found。3.2 地图 series 的核心参数怎么调ECharts 地图的series配置里map字段决定用哪张地图data是前面聚合好的数组。常见配置如下option { tooltip: { trigger: item, formatter: {b}: {c} 次攻击 }, visualMap: { min: 0, max: 100, left: left, top: bottom, text: [高, 低], calculable: true, inRange: { color: [#e0f3f8, #ffffbf, #fee090, #fdae61, #f46d43, #d73027] } }, series: [{ name: 攻击来源, type: map, map: Russia, roam: true, emphasis: { label: { show: true } }, data: attackData }] };visualMap的max要根据你的实际攻击次数调整。如果最大攻击次数是 5000max还写 100那所有国家都会显示成最深红色失去区分度。我一般会先跑一遍分析脚本看value的最大值再动态设置max。roam: true允许鼠标缩放拖拽演示时比较方便。emphasis.label.show控制悬停是否显示国家名如果地图太密可以关掉靠 tooltip 就够了。3.3 国内省份下钻jiang1_xi1_gan4_zhou1.js 的用法jiang1_xi1_gan4_zhou1.js这个文件名很直白江西赣州。说明系统支持从全国地图点进去看某个市的数据。实现方式通常是监听地图的click事件拿到省份名后动态加载对应的市级别 GeoJSON再registerMap一次。myChart.on(click, function (params) { if (params.name 江西) { // 加载赣州市地图数据 fetch(static/js/jiang1_xi1_gan4_zhou1.js) .then(response response.text()) .then(text { // 假设文件内容是 echarts.registerMap(赣州, {...}) eval(text); myChart.setOption({ series: [{ map: 赣州, data: cityData }] }); }); } });这里用eval是因为jiang1_xi1_gan4_zhou1.js本身就是一段可执行脚本直接eval最省事。但生产环境不建议这么干毕设演示无所谓。注意cityData需要你提前按赣州的区县聚合好否则下钻后地图没颜色。如果点击其他省份没反应检查params.name是否和registerMap时的名称一致ECharts 对中文名称很敏感“江西”和“江西省”是两个不同的 key。4. 避坑与排查日志格式、地图空白、跨域与性能4.1 日志格式不匹配导致分析结果为空现象跑完brute_analyse输出的 JSON 是空数组地图上没有任何颜色。原因脚本里的正则只匹配了某一种日志格式而你手头的/var/log/auth.log来自不同发行版或不同 SSH 配置。比如日志里写的是Failed password for root from 192.168.1.1但正则要求from后面必须跟port就会漏掉。解决先head -20 /var/log/auth.log看实际格式再改正则。建议把正则写成可配置的或者用grep -oP先手动验证一遍。另一个常见原因是日志文件权限不够Python 脚本读不到加sudo或把用户加入adm组。4.2 地图空白但控制台无报错现象页面其他图表正常只有地图区域是空白控制台没有红色错误。原因地图注册的名称和series.map的值不一致。比如Russia.js里注册的是echarts.registerMap(russia, ...)小写 r而series.map写的是RussiaECharts 找不到就静默失败。解决打开Russia.js搜索registerMap看第一个参数的确切字符串。然后统一series.map的大小写。国内地图同理china和China不通用。4.3 跨域请求 JSON 被浏览器拦截现象用fetch(static/attack_map.json)时控制台报CORS policy: Cross origin requests are only supported for protocol schemes: http, data, ...。原因直接双击打开base.html浏览器用的是file://协议fetch本地文件会被安全策略拦截。解决起一个本地 HTTP 服务Python 自带的最方便python -m http.server 8000然后访问http://localhost:8000/base.html。Flask 项目的话直接flask run就行。别用file://调试这是血泪经验。4.4 攻击次数过多导致地图渲染卡顿现象日志量大了之后地图加载要好几秒鼠标悬停卡顿。原因data数组里包含了大量value为 0 的国家ECharts 仍然会遍历渲染。或者visualMap的max设得过大颜色计算开销增加。解决在 Python 聚合阶段过滤掉value 0的条目只保留有攻击记录的国家。visualMap.max用实际最大值不要拍脑袋写 10000。如果还卡把roam关掉减少交互计算。4.5 3D 地球模式在低配电脑上崩溃现象启用echarts-gl的globe系列后页面直接白屏或浏览器提示“网页无响应”。原因3D 渲染依赖 WebGL部分集成显卡或旧驱动不支持或者显存不足。解决在main.js里加一个 WebGL 检测不支持就降级到 2D 地图。检测代码很简单function hasWebGL() { try { var canvas document.createElement(canvas); return !!(window.WebGLRenderingContext (canvas.getContext(webgl) || canvas.getContext(experimental-webgl))); } catch (e) { return false; } }如果hasWebGL()返回 false就只初始化 2D 的map系列别碰globe。毕设答辩的电脑不一定是你自己的这个降级逻辑能救场。5. 从毕设到可演示系统数据刷新、地图下钻与答辩技巧把系统跑起来只是第一步答辩时老师大概率会问“数据是实时的吗”“能不能看某个省的细节”“攻击次数怎么统计的”。这一章说几个能让演示效果上一个台阶的具体技巧。数据刷新不用真做实时但要有刷新入口。在页面右上角加一个“重新分析”按钮点击后触发后端重新跑brute_analyse和http_analyse然后前端重新fetchJSON。后端可以用 Flask 写一个/refresh路由from flask import Flask, jsonify import subprocess app Flask(__name__) app.route(/refresh) def refresh(): # 依次执行两个分析脚本 subprocess.run([python, brute_analyse.py], checkTrue) subprocess.run([python, http_analyse.py], checkTrue) return jsonify({status: ok})前端按钮绑定fetch(/refresh).then(() location.reload())。这样演示时你点一下按钮地图颜色变了老师会觉得“有交互”。注意subprocess.run的checkTrue会在脚本报错时抛异常最好加try/except返回错误信息别让页面直接 500。地图下钻不要只做一个市。jiang1_xi1_gan4_zhou1.js只有赣州但你可以用同样的方式补几个热门省份的市级地图。ECharts 官方地图数据或者阿里云 DataV 都能下载到各省的 GeoJSON转成registerMap脚本就行。下钻的交互逻辑参考第 3 章的click事件但记得加一个“返回全国”的按钮否则用户点进去出不来。返回时重新setOption把map切回china或Russia数据用全国聚合的那份。攻击次数统计要能解释清楚。老师问“这个 500 次是怎么算的”你得答上来是 SSH 失败登录次数还是 HTTP 404 次数还是两者相加。建议在brute_analyse和http_analyse里分别输出两个 JSON前端用两个地图或一个地图两种颜色叠加。如果混在一起至少要在 tooltip 里区分brute和http的数值。我一般会在聚合时保留一个detail字段result [{name: country, value: total, brute: brute_count, http: http_count}]ECharts 的 tooltipformatter可以写成{b}: 总计 {c} 次爆破 {d0}HTTP {d1}但d0、d1需要series里额外配置简单点直接用params.data.brute拼字符串。答辩前强制走一遍完整流程。从那以后我每次交付这类系统都会在答辩前一天做一次“冷启动测试”清空所有生成的 JSON重启服务从日志文件开始跑分析脚本再打开页面看地图是否正常渲染。这一步能暴露 90% 的路径问题和权限问题。另外把GeoLite2-Country.mmdb和地图 JS 文件一起打包进 zip别让老师自己下载离线环境你没法解释。希望帮到你。本文还有配套的精品资源点击获取

相关推荐

Android Miracast Sink端开发:协议解析、HDCP协商与硬件渲染
Android Miracast Sink端开发:协议解析、HDCP协商与硬件渲染

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

FPGA图像处理实战:从零搭建ISP流水线,实现Bayer RAW到RGB888
FPGA图像处理实战:从零搭建ISP流水线,实现Bayer RAW到RGB888

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

嵌入式BSP驱动培训怎么选?别盯排名,盯这5件事
嵌入式BSP驱动培训怎么选?别盯排名,盯这5件事

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

Spingboot启动预热的实现
Spingboot启动预热的实现

启动预热的适用场景启动预热适合以下情况:数据主要来自第三方接口,无法直接从本地数据库读取。第三方接口响应较慢,首次访问容易超时。一个页面需要调用多个第三方接口或逐项查询。数据读取频繁,但变化不频繁。希望服务启动后&… · 2026/9/28 3:40:12

Understanding Driving Risks using Large Language Models: Toward Elderly Driver Assessment
Understanding Driving Risks using Large Language Models: Toward Elderly Driver Assessment

文章主要内容总结 本文研究了多模态大语言模型(具体为ChatGPT-4o)利用静态行车记录仪图像进行类人交通场景解读的潜力,重点聚焦与老年司机评估相关的三项任务:交通密度评估、交叉口可见性评估和停车标志识别。这些任务需上下文推理而非简单目标检测。研究采用零样本、少样… · 2026/9/28 3:32:43

Leveraging Large Language Models for Classifying App Users‘ Feedback
Leveraging Large Language Models for Classifying App Users‘ Feedback

文章主要内容总结 本文聚焦于利用大型语言模型(LLMs)解决应用用户反馈分类的挑战,传统方法依赖有监督机器学习,但受限于标注数据集的规模和质量。研究通过三个核心实验评估了4种先进LLMs(GPT-3.5-Turbo、GPT-4o、Flan-T5、Llama3-70b)的性能: LLMs在用户反馈分类中的基… · 2026/9/28 3:32:43

Using Large Language Models for Legal Decision-Making in Austrian Value-Added Tax Law: An Experim...
Using Large Language Models for Legal Decision-Making in Austrian Value-Added Tax Law: An Experim...

文章主要内容总结 本文通过实验评估了大型语言模型(LLMs)在奥地利及欧盟增值税(VAT)法框架下辅助法律决策的能力。研究聚焦于两种提升LLM性能的方法——微调(fine-tuning)和检索增强生成(RAG),并在两类案例中进行验证:一是权威教科书案例,二是税务咨询公司的真实案… · 2026/9/28 3:32:43

学Java别走弯路,这5个方向最吃香
学Java别走弯路,这5个方向最吃香

学Java的人很多,但学明白的人不多。有人学了半年还在写控制台程序,有人一年就能独当一面。差别不在天赋,而在方向。Java生态太庞大了,什么都学等于什么都没学。选对方向,事半功倍。今天盘点当前最吃香的5个Java方向&am… · 2026/9/28 3:32:15

AlphaAgents: Large Language Model based Multi-Agents for Equity Portfolio Constructions
AlphaAgents: Large Language Model based Multi-Agents for Equity Portfolio Constructions

AlphaAgents相关总结与翻译 一、文章主要内容总结 (一)研究背景与问题 传统股票投资组合管理依赖人类分析师处理海量信息(如财务披露、财报、市场新闻等),存在信息处理效率低、易受认知偏差(如损失厌恶、过度自信)影响的问题,可能错失投资收益机会。尽管AI在数据处理… · 2026/9/28 3:32:08

MATLAB雷达信号脉冲压缩仿真:LFM线性调频、匹配滤波与距离分辨率实现
MATLAB雷达信号脉冲压缩仿真:LFM线性调频、匹配滤波与距离分辨率实现

简介:这套Matlab仿真工具完整呈现雷达信号脉冲压缩过程,从线性调频(LFM)信号生成、目标回波仿真到匹配滤波压缩处理均有可运行代码支撑,面向电子信息工程、计算机、数学等专业学生,适用于课程设计、期末大作… · 2026/9/27 0:00:01

汕头网站建设制作厂家避坑指南:5大注意事项救急
汕头网站建设制作厂家避坑指南:5大注意事项救急

汕头网站建设制作厂家避坑指南:5大注意事项救急 改个需求建站公司拖一周,这种憋屈事我见得太多了。 很多汕头老板找本地建站团队,签合同前看着方案挺美,一上线就变脸。 今天不聊虚的,直接拆解找 汕头网站建设制作厂家 时的5个核心 注意事项… · 2026/9/27 0:00:01

多模态虚假新闻检测实战:BERT+ResNet双塔与对比学习
多模态虚假新闻检测实战:BERT+ResNet双塔与对比学习

简介:基于PyTorch的多模态虚假新闻检测项目完整代码包,面向自然语言处理与计算机视觉交叉方向的开发者、科研人员及毕业设计选题者,解决社交媒体中文本与图像联合识别虚假新闻的问题。系统以BERT预训练模型提取文本语义特征,以Res… · 2026/9/27 0:00:01

制作网页比较方便的软件怎么选?一文搞懂避坑指南
制作网页比较方便的软件怎么选?一文搞懂避坑指南

制作网页比较方便的软件怎么选?一文搞懂避坑指南 很多老板一上来就问:做个网站多少钱?但我反问他:你的域名买了吗?服务器租了吗?他一脸懵。这就是典型的“域名服务器搞不懂”。别急,今天咱们不聊虚的,直接 一文搞懂 那些让你头秃的技术名词。… · 2026/9/28 0:00:06

婚恋网站实战案例:避开3个高价坑,省钱50%还能跑赢流量
婚恋网站实战案例:避开3个高价坑,省钱50%还能跑赢流量

婚恋网站实战案例:避开3个高价坑,省钱50%还能跑赢流量 找婚恋网站建站公司,最怕的就是被坑高价。很多同行跟我吐槽,报价单上写得模棱两可,功能栏里全是“高级定制”、“专属UI”,结果落地全是套壳。今天不聊虚的,直接甩几个我经手的 实战案例… · 2026/9/28 0:00:19

济南做网站多少钱:3个案例拆解,防黑源码下载全攻略
济南做网站多少钱:3个案例拆解,防黑源码下载全攻略

济南做网站多少钱:3个案例拆解,防黑源码下载全攻略 上周济南一个做建材的老板找我,脸都绿了。他的官网首页弹出了赌博广告,后台被植入了挖矿脚本。他慌得问我:“网站被黑挂马不知道怎么办?能不能直接找之前的外包公司要源码下载,看看哪里被动了手脚?… · 2026/9/28 0:00:25

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码