
第一章 绪论1.1 研究背景与意义随着高等教育信息化进程的加速推进校园网络已成为高校教学、科研、管理与服务的核心基础设施。当前校园网络规模持续扩张网络设备数量呈几何级增长拓扑结构愈发复杂涵盖了路由器、交换机、服务器、无线 AP 等多类型设备且承载着教学资源共享、在线办公、学生生活服务等多元化网络业务。传统的人工网络管理模式依赖管理员对设备逐一进行配置、故障排查与性能监测不仅耗费大量人力物力且难以实时掌握全网运行状态。在故障响应环节人工排查往往存在滞后性易导致网络故障影响范围扩大在性能优化方面缺乏全局数据支撑难以实现带宽资源的精准分配。简单网络管理协议SNMP作为 TCP/IP 网络体系中广泛应用的网络管理协议具有协议开销小、实现简单、设备兼容性强等优势能够实现网络设备的状态采集、参数配置、性能统计等核心管理功能。在此背景下设计并实现一套基于 SNMP 的校园网络管理系统成为突破当前校园网络管理瓶颈、实现网络高效运维的关键途径。1理论意义本研究聚焦 SNMP 协议在校园网络管理场景的深度应用结合现代网络管理系统的设计理念深入探索协议与场景的适配性、系统架构的合理性及功能模块的协同性丰富了网络管理领域在教育行业的理论研究成果为同类场景下的网络管理系统设计提供了可借鉴的理论框架与技术路径。2实际意义系统可实现校园网络设备的集中化、全生命周期管理涵盖设备信息采集、存储、更新与查询等环节替代人工低效的设备台账管理方式大幅提升设备管理的精准度与效率降低设备运维的人力成本。基于 SNMP 协议自动发现网络设备间的连接关系生成动态可视化的网络拓扑图直观呈现全网架构助力管理员快速定位节点位置与连接状态为网络规划、故障排查提供直观的可视化支撑。1.2 国内外研究现状1国外研究现状国外在网络管理系统领域的研究起步较早技术体系相对成熟。商业领域HP OpenView、IBM Tivoli 等网络管理系统功能完备支持包括 SNMP 在内的多类网络管理协议可实现设备监控、性能分析、故障告警等全流程管理但此类系统部署成本高昂、操作复杂度高与校园网络的预算限制、运维人员技术水平存在适配性矛盾在校园场景的应用受限。开源领域Zabbix、Nagios 等系统凭借免费、灵活的特性获得广泛关注其基于 SNMP 实现了对网络设备的基础监控功能。但在校园网络特有的多设备类型兼容、拓扑自动发现的智能化程度上仍有不足例如对部分国产网络设备的 SNMP MIB 库支持不够完善拓扑发现的准确率与实时性难以满足大规模校园网络的需求。2国内研究现状国内研究聚焦于结合本土网络环境与高校用户需求的网络管理系统开发。部分高校与企业合作针对校园网络场景开发了具备 SNMP 监控功能的管理系统在设备基础监控、简单告警等方面取得了一定成果。但整体而言现有系统在功能完整性与系统集成性上存在明显短板多数系统侧重设备监控而缺乏拓扑可视化与流量深度分析的联动导致管理员难以从全局视角把握网络运行状态部分系统告警策略单一仅能实现阈值告警无法应对校园网络中复杂的故障场景如间歇性故障、多设备联动故障难以满足校园网络多元化的管理需求。1.3 研究内容本研究以解决校园网络管理的实际痛点为目标围绕基于 SNMP 的校园网络管理系统的设计与实现展开采用 B/S 架构融合 SNMP 协议设计分层式系统架构涵盖数据采集层、数据处理层、应用服务层与用户界面层。基于 SNMP 协议与网络设备建立通信采集设备配置、性能指标、状态信息等数据同时支持 SNMP Trap 主动告警信息的接收。对采集的数据进行清洗、校验、存储并基于预设算法进行实时分析与历史数据挖掘。实现仪表板、设备管理、网络拓扑、设备监控、告警管理、流量分析、性能报告等模块的业务逻辑提供标准化的服务接口。以 Web 页面形式呈现系统功能设计直观、交互性强的操作界面支持管理员对系统的便捷操作与数据查看。第二章 相关技术基础2.1 后端框架FlaskPython Web 框架Flask 是基于 Python 的轻量级 Web 框架以 “微核心、强扩展” 为设计理念核心仅包含路由分发、模板渲染与请求处理基础功能其余功能通过第三方扩展实现适配校园网络管理系统开发需求。架构设计简洁灵活无强制依赖约束开发者可根据业务场景自由选择扩展组件降低系统冗余。系统中Flask 承担后端服务核心职责封装业务逻辑、提供 RESTful API 接口并协调各模块数据交互。通过路由装饰器 app.route 实现 URL 与视图函数映射快速构建设备管理、告警配置、数据查询等接口支持 GET、POST、PUT、DELETE 等 HTTP 方法满足前端多样化数据请求。结合 Flask-SQLAlchemy 扩展实现与数据库无缝对接通过 ORM 映射机制将 Python 类与数据库表关联简化数据增删改查操作提升开发效率。Flask 支持多线程与异步任务处理配合 Flask-Cors 扩展解决前后端跨域问题确保通信顺畅。轻量特性使其在资源有限的服务器环境中稳定运行启动速度快、内存占用低单实例可支撑每秒百级请求处理满足校园网络管理系统并发访问需求。完善的文档与活跃的社区支持便于问题排查与扩展开发为系统快速迭代与长期维护提供保障。2.2 数据库SQLite轻量级关系数据库SQLite 是嵌入式关系型数据库采用文件式存储架构无需独立服务器进程数据以单一文件形式存储具备零配置、跨平台、占用资源少等核心优势是小型应用与嵌入式系统的理想数据存储选择。支持标准 SQL 语法与 ACID 事务特性确保数据操作的原子性、一致性、隔离性与持久性兼容整数、字符串、日期时间等多种数据类型满足系统结构化数据存储需求。校园网络管理系统中SQLite 用于存储设备基础信息、用户权限数据、告警规则配置、操作日志等结构化数据。设备基础信息表包含设备 IP、型号、厂商、SNMP 共同体名、运行状态等字段为设备管理模块提供数据支撑用户权限表通过角色与权限关联实现基于 RBAC 模型的访问控制保障系统安全性告警规则表存储指标阈值、告警级别、通知方式等配置信息为告警管理模块提供规则依据。SQLite 无需复杂安装与部署流程开发阶段可直接嵌入应用程序生产环境中无需额外维护数据库服务降低系统部署与运维成本。文件式存储特性便于数据备份与迁移通过简单文件复制即可完成备份满足系统对数据安全性与可移植性的要求。高效的查询性能适配系统百万级以下数据量单表查询响应时间达毫秒级满足数据访问速度需求。2.3 前端技术HTML5 CSS3 JavaScriptHTML5、CSS3 与 JavaScript 构成系统前端开发核心技术栈协同实现用户界面构建、样式美化与交互逻辑处理为管理员提供直观、流畅的操作体验。HTML5 作为超文本标记语言最新标准提供header、nav、section等语义化标签使前端代码结构清晰、可读性强同时支持本地存储、Canvas 绘图、WebSocket 等新特性。系统中HTML5 用于构建页面骨架通过结构化标签组织仪表板、设备列表、拓扑图、告警中心等功能模块布局利用 localStorage 实现页面状态缓存提升加载速度借助 Canvas 标签支持拓扑图绘制与动态更新为网络拓扑模块提供基础技术支撑。CSS3 作为样式表语言升级版本新增圆角、阴影、渐变、动画等特性无需依赖图片即可实现丰富视觉效果支持弹性布局Flexbox与网格布局Grid简化页面响应式设计流程。系统通过 CSS3 进行界面样式美化统一颜色方案与字体风格提升视觉一致性利用弹性布局与网格布局实现页面元素灵活排列确保界面在不同分辨率设备上正常显示适配管理员在电脑、平板等不同终端的操作需求通过keyframes定义告警提示动画增强界面交互直观性。JavaScript 作为前端脚本语言负责实现页面交互逻辑与数据处理是连接前端界面与后端服务的关键纽带。系统中 JavaScript 用于处理用户操作事件按钮点击、表单提交、拓扑节点拖拽通过事件监听机制触发相应业务逻辑利用 AJAX 技术实现与后端的异步数据交互在不刷新页面的情况下获取设备状态、告警信息等数据提升用户体验通过数据解析与格式化处理将后端返回的 JSON 数据转换为前端可展示的图表、表格数据为数据可视化模块提供支持。支持面向对象编程与模块化开发使前端代码结构清晰、可维护性强便于功能扩展与迭代优化。第三章 系统需求分析与总体架构设计3.1 系统需求分析仪表板模块实现全网关键运营指标的可视化聚合展示涵盖设备在线率、告警总数、流量峰值、性能趋势等多维度数据。支持指标的自定义筛选与实时刷新为管理员提供网络运行状态的全局概览。设备管理模块覆盖设备全生命周期管理支持设备信息的新增、删除、编辑与查询字段包含设备型号、厂商、配置参数、运行状态等。具备设备配置的批量下发、版本比对与备份恢复功能实现设备配置管理的高效性与一致性。网络拓扑模块基于 SNMP 协议实现网络设备及连接关系的自动发现绘制动态可交互的拓扑图。支持拓扑的分层展示与节点详情的实时查看同时具备故障节点高亮提示、拓扑自动更新功能助力管理员快速定位网络节点与故障点。设备监控模块定义多维度设备监控指标集涵盖硬件资源、网络接口、服务进程等维度。支持监控频率与数据存储周期的自定义配置结合阈值设置实现指标异常的实时感知。告警管理模块设计多级、多类型告警规则基于设备监控数据触发告警。具备告警的分类、分级、统计与历史查询功能同时支持邮件、短信、系统弹窗等多渠道通知机制确保管理员对故障的及时响应。流量分析模块通过 SNMP 采集网络接口流量数据结合流量特征分析算法识别流量热点、异常流量模式。生成流量趋势、流量分布、协议占比等多维度分析报告为带宽管理与网络安全防护提供数据支撑。性能报告模块基于历史监控数据按照设备、时间、业务等维度生成自动化性能分析报告。支持报告的自定义生成与导出为网络优化策略制定与设备升级规划提供量化依据系统的功能模块图如图 3-1 所示。3.2 总体架构设计本系统采用前后端分离的 B/S 架构依托浏览器作为统一客户端入口通过 HTTP/HTTPS 协议实现前后端数据交互架构层级划分为前端展示层、后端服务层、数据存储层各层级职责边界清晰保障系统的可扩展性与维护性。前端展示层基于 Vue 3 生态构建采用组件化开发模式封装仪表板可视化、拓扑图交互、表单操作等通用组件。核心职责聚焦用户界面渲染与交互逻辑实现通过调用后端 RESTful API 接口获取数据无需参与业务逻辑处理与数据存储。利用 Chart.js 等可视化库实现网络指标图表、动态拓扑图的实时渲染支持无刷新页面更新数据适配主流浏览器与不同分辨率显示设备为管理员提供流畅的操作体验。后端服务层采用 Flask 框架构建独立服务集群按功能模块拆分设备管理服务、SNMP 数据采集服务、告警处理服务、报表生成服务等。各服务通过标准化接口协同工作核心承担业务逻辑处理、数据校验、协议转换等职责。SNMP 数据采集服务通过 PySNMP 库与网络设备建立通信完成设备状态、性能指标的数据采集与解析业务服务基于 RBAC 模型实现权限控制封装设备配置、告警规则管理等核心逻辑通过 Celery 实现异步任务调度处理性能报告生成、数据备份等非实时性操作保障主线程响应效率。3.3 可行性分析系统核心技术选型均基于成熟稳定的技术栈与行业实践无技术壁垒。SNMP 协议作为网络管理领域标准协议已在市面主流网络设备中广泛支持PySNMP 库可实现协议的快速集成与数据采集前后端分离 B/S 架构采用 Vue 3、Flask 等成熟框架组件化开发模式降低开发复杂度且相关技术文档与社区资源丰富便于问题排查。数据存储采用 InfluxDB 与 SQLite 的混合方案两类数据库在时序数据处理与结构化数据管理中均经过大规模场景验证可满足系统对数据存储与查询的性能要求。拓扑自动发现、异常检测等核心算法均基于现有技术优化实现无需创新型技术突破技术可行性充分。系统开发与部署成本贴合校园网络预算约束。硬件层面无需额外购置专用客户端设备依托校园现有数据中心服务器即可满足部署需求服务器资源可通过虚拟化技术实现高效利用软件层面核心技术栈Vue 3、Flask、InfluxDB 等均为开源免费产品避免商业软件的高额授权费用。后期运维阶段前后端分离架构降低维护难度减少专人专职的运维成本且系统可实现网络管理的自动化与精细化替代传统人工管理模式大幅降低人力投入长期来看可显著提升校园网络管理的投入产出比经济可行性具备。第四章系统详细设计4.1 SNMP 数据采集模块详细设计轮询采集采用 “设备分组 - 线程池调度” 机制按设备重要性划分采集组核心设备组 10 秒 / 次普通设备组 60 秒 / 次通过线程池避免单设备阻塞影响全网采集效率。核心代码如下from pysnmp.hlapi import *from concurrent.futures import ThreadPoolExecutorimport time# SNMP轮询配置设备IP、OID列表、采集周期POLL_CONFIG {core_devices: [{ip: 192.168.1.1, oids: [.1.3.6.1.2.1.25.3.3.1.2, .1.3.6.1.2.1.2.2.1.10], interval: 10},{ip: 192.168.1.2, oids: [.1.3.6.1.2.1.25.3.3.1.2, .1.3.6.1.2.1.2.2.1.10], interval: 10}],normal_devices: [{ip: 192.168.2.1, oids: [.1.3.6.1.2.1.25.3.3.1.2], interval: 60}]}# SNMP轮询采集函数def snmp_poll(ip, oids, communitypublic):result {}errorIndication, errorStatus, errorIndex, varBinds next(getCmd(SnmpEngine(), CommunityData(community),UdpTransportTarget((ip, 161)), ContextData(),*[ObjectType(ObjectIdentity(oid)) for oid in oids]))if not errorIndication and not errorStatus:for varBind in varBinds:result[str(varBind[0])] str(varBind[1])return {device_ip: ip, timestamp: time.time(), data: result}# 线程池调度采集任务def run_poll_task():with ThreadPoolExecutor(max_workers10) as executor:while True:# 调度核心设备采集for dev in POLL_CONFIG[core_devices]:executor.submit(store_poll_data, snmp_poll(dev[ip], dev[oids]))time.sleep(POLL_CONFIG[core_devices][0][interval])# 调度普通设备采集错峰执行for dev in POLL_CONFIG[normal_devices]:executor.submit(store_poll_data, snmp_poll(dev[ip], dev[oids]))time.sleep(POLL_CONFIG[normal_devices][0][interval] - POLL_CONFIG[core_devices][0][interval])# 数据存储函数对接InfluxDBdef store_poll_data(poll_result):pass # 数据写入逻辑省略代码中 snmp_poll 函数封装 SNMP Get 请求逻辑ThreadPoolExecutor 实现多设备并发采集POLL_CONFIG 支持采集周期与 OID 灵活配置适配校园网络不同设备监控需求。Trap 接收采用 “监听端口 - 异步解析” 模式绑定 UDP 162 端口接收设备主动上报告警信息解析后提取设备 IP、告警类型、发生时间字段同步至告警管理模块。核心代码如下from pysnmp.carrier.asyncore.dgram import udpfrom pysnmp.entity import engine, configfrom pysnmp.entity.rfc3413 import ntfrcvimport time# 初始化SNMP引擎与Trap接收配置snmp_engine engine.SnmpEngine()config.addTransport(snmp_engine, udp.domainName (1,), udp.UdpTransport().openServerMode((0.0.0.0, 162)))config.addV1System(snmp_engine, my-area, public) # 匹配设备SNMP共同体名# Trap解析与处理函数def trap_callback(snmp_engine, state_reference, context_engine_id, context_name, var_binds, cb_ctx):trap_data {device_ip: cb_ctx[transportAddress][0], timestamp: time.time(), alarm_info: []}for varBind in var_binds:trap_data[alarm_info].append({oid: str(varBind[0]), value: str(varBind[1])})send_to_alarm_module(trap_data) # 推送至告警管理模块# 注册回调并启动监听ntfrcv.NotificationReceiver(snmp_engine, trap_callback)snmp_engine.transportDispatcher.jobStarted(1)try:snmp_engine.transportDispatcher.runDispatcher()except:snmp_engine.transportDispatcher.closeDispatcher()raise4.2 网络拓扑模块详细设计4.2.1 拓扑发现核心逻辑设备发现从核心交换机出发通过 SNMP 获取 ipNetToMediaTableOID.1.3.6.1.2.1.4.22提取 ARP 表设备 IP识别网络内在线设备接口连接关系构建对每个设备通过 ifTable 获取接口 MAC 地址OID.1.3.6.1.2.1.2.2.1.6匹配不同设备接口 MAC 地址对应关系确定物理连接分层标识根据设备 IP 网段核心层 192.168.1.0/24汇聚层 192.168.2.0/24自动标识设备层级生成分层拓扑数据。第五章系统核心功能实现5.1 开发环境搭建与配置5.1 开发环境搭建与配置后端基于 Python 3.8 构建依赖库通过 requirements.txt 统一管理核心配置步骤如下环境依赖安装执行pip install -r requirements.txt安装 Flask2.2.3Web 框架、PySNMP4.4.12SNMP 协议交互、influxdb5.3.1时序数据库连接、pymysql1.0.2关系型数据库连接、celery5.3.1异步任务调度、redis4.5.1Celery 消息代理数据库配置本地部署 SQLite3 与 InfluxDB 2.0SQLite 创建 snmp_system 数据库执行初始化 SQL 脚本含设备表、告警规则表等InfluxDB 创建 snmp_metrics 桶设置数据保留策略为 365 天服务配置在 Flask 项目根目录创建 config.py配置数据库连接参数SQLite 主机 / 端口 / 账号密码、InfluxDB URL/Token/ 组织、Celery Redis 代理地址redis://127.0.0.1:6379/0、SNMP 共同体名等核心参数。前端基于 Vue 3 生态依赖 Node.js 与包管理工具配置步骤如下基础环境安装安装 Node.js 16.14含 npm执行npm install -g vue/cli5.0.8安装 Vue 脚手架项目初始化执行vue create snmp-frontend创建项目选择 Vue 3、TypeScript、Pinia状态管理、Vue Router路由依赖安装进入项目目录执行npm install element-plus2.3.4UI 组件库、echarts5.4.2可视化库、vis-network9.1.9拓扑图组件、axios1.3.4接口请求工具配置在 vue.config.js 中配置后端 API 代理/api 映射至http://127.0.0.1:5000/解决跨域问题使用 VS Code 作为开发工具安装 Vetur、ESLint 插件确保代码规范。系统依赖安装执行yum install -y gcc python38 python38-devel mysql-devel redis安装编译工具、Python3.8、SQLite 依赖、Redis数据库部署通过 Docker 部署 SQLite3 与 InfluxDB 2.0配置容器自启动docker update --restartalways 容器ID开放 3306MySQL、8086InfluxDB端口服务环境配置创建/opt/snmp-system目录上传后端项目文件与前端打包资源npm run build生成的 dist 目录配置 Nginx 作为前端静态资源服务器与后端 API 反向代理编写 snmp-system.service 系统服务文件实现后端服务开机自启。5.2功能实现5.2.1 设备管理设备管理模块以全生命周期管理为核心依托 SQLite存储设备结构化数据支持管理员通过前端表单完成设备新增、删除、编辑与查询操作字段涵盖设备 IP、型号、厂商、配置参数及运行状态。模块通过 PySNMP 库实现配置批量下发将 SNMP SetRequest 指令推送至目标设备同时支持配置版本比对与备份恢复可一键回滚历史配置。通过与数据存储层联动模块实时同步设备在线状态为后续监控、告警模块提供基础设备信息解决传统人工台账管理效率低、易出错的问题。第六章系统测试6.1 功能测试功能测试聚焦七大核心模块验证各模块功能是否符合设计需求测试用例与结果如下表所示测试模块测试用例 ID测试内容测试步骤预期结果实测结果测试状态设备管理模块FM-001新增设备并验证信息存储1. 前端输入设备 IP192.168.3.1、型号三层接入交换机、SNMP 共同体名public2. 提交后查询 SQLite device_info 表3. 查看前端设备列表是否显示该设备。1. 数据库表新增记录与输入信息一致2. 前端列表正常显示设备状态为 “在线”。1. 数据库新增记录字段匹配2. 前端列表显示设备状态 “在线”。通过设备管理模块FM-002批量下发配置修改交换机 VLAN 10 名称为 “Classroom”1. 选择 2 台交换机192.168.3.1/3.22. 上传 VLAN 配置脚本3. 执行下发并通过 SNMP 查询 VLAN 名称。1. 配置下发成功提示2. SNMP 查询返回 VLAN 10 名称为 “Classroom”。1. 下发提示 “成功”2. 查询结果与预期一致。通过网络拓扑模块FM-003验证拓扑自动发现与分层展示1. 启动拓扑发现功能2. 观察拓扑图设备数量与连接关系3. 切换 “分层视图” 查看核心层 / 汇聚层 / 接入层。1. 拓扑图显示 10 台设备3 交换机 2 路由器 5AP连接关系与实际一致2. 分层归类正确核心层路由器汇聚层交换机接入层AP。1. 设备数量与连接关系匹配2. 分层归类准确。通过网络拓扑模块FM-004故障节点高亮断开 1 台 AP 电源1. 断开 192.168.3.10 AP 电源2. 观察拓扑图节点状态变化。1. 该 AP 节点 5 秒内变为红色2. 节点旁显示 “离线” 提示。1. 节点 4 秒变为红色2. 显示 “离线” 提示。通过设备监控模块FM-005监控交换机 CPU 利用率模拟高负载端口流量拉满至 1Gbps1. 配置监控频率 10 秒 / 次2. 通过流量发生器向交换机端口发送 1Gbps 流量3. 查看前端 CPU 监控曲线。1. 监控曲线实时更新CPU 利用率升至 60%-70%2. 数据与设备 CLI 查询结果误差≤5%。1. 曲线实时更新CPU 利用率 62%-68%2. 与 CLI 查询误差 3.2%。通过告警管理模块FM-006触发 CPU 阈值告警设置阈值 80%模拟 CPU 负载至 85%1. 配置告警规则CPU80% 触发 “警告” 级告警通知方式为邮件2. 模拟 CPU 负载至 85%3. 查看告警列表与邮件。1. 3 秒内触发告警前端列表显示告警信息2. 管理员邮箱收到告警邮件。1. 2 秒触发告警列表信息完整2. 邮件按时送达。通过流量分析模块FM-007识别异常流量模拟 DDoS 攻击UDP flood 流量 100Mbps1. 启动流量分析功能2. 发送 UDP flood 流量至 192.168.3.1 交换机3. 查看流量分析报告。1. 系统标记流量为 “异常”2. 报告显示 UDP 协议占比≥90%触发流量告警。1. 流量标记 “异常”2. UDP 占比 92%触发告警。通过性能报告模块FM-008生成周度性能报告筛选核心设备指标含 CPU、内存、流量1. 选择时间范围 “2025-10-01 至 2025-10-07”设备类型 “核心设备”2. 生成 PDF 报告3. 验证报告数据与 InfluxDB 历史数据一致性。1. 报告生成时间≤30 秒2. 报告数据与数据库历史数据误差≤3%。1. 报告生成时间 22 秒2. 数据误差 2.1%。通过