eNSP AI 平台

eNSP AI 平台

本项目是一个面向 eNSP(华为网络模拟器)实验/教学场景 的前后端分离平台:支持导入 .topo 拓扑、自动连接本地 eNSP 设备 Console 抓取 display current-configuration,并结合拓扑与配置进行故障分析、输出修复建议与命令。同时集成 Ping 工具、子网计算器、网络扫描等常用辅助能力。如需获取项目进一步优化开发,请站内私信。

适用场景:课程实验、网络排障训练、批量配置生成、拓扑可视化与工具化分析。

1. 核心能力概览

1.1 AI 智能修复(重点)

  • 上传 eNSP 导出的 .topo 文件
  • 平台解析拓扑并识别设备(AR/S 系列交换机/USG 防火墙/PC 等)
  • 对每台设备自动连接 127.0.0.1:<com_port>.topo 中自带的 Console 端口)
  • 自动执行 display current-configuration 抓取设备当前配置(支持自动翻页,避免 ---- More ---- 截断)
  • 规则化“预分析”(确定性证据)+ LLM 深度分析(可选)
  • 输出:问题分析、排查步骤、按设备下发的修复命令,并附带“采集到的配置内容”

1.2 网络工具集

  • Ping 工具:支持持续 ping、SSE 流式返回、历史记录
  • 子网计算器:辅助 IPv4 子网划分/地址规划
  • 网络扫描:接口发现、扫描历史记录(以本机网络信息与探测结果为主)

1.3 用户与历史

  • 轻量用户注册/登录(SQLite)
  • Ping/扫描历史记录(SQLite,默认保留最近 50 条)

2. 技术栈与目录结构

2.1 技术栈

  • 前端:Vue 3 + Vite + Element Plus + Pinia + Vue Router
  • 后端:Python Flask + Flask-CORS
  • 拓扑解析:lxml(解析 eNSP .topo XML)
  • AI 能力:LangChain + langchain-openai(可配置任意兼容 OpenAI API 的网关)
  • 数据库:SQLite(users.db

2.2 目录结构(核心)

ensp/ ensp-frontend/         # 前端(Vue3/Vite) ensp-backend/           # 后端(Flask) test.topo               # 示例 topo 文件

后端关键文件:

  • ensp-backend/app.py:Flask API 入口、拓扑解析、AI 修复、Ping/扫描等
  • ensp-backend/telnet_client.py:eNSP Console Telnet 采集实现(含翻页与控制码清理)
  • ensp-backend/llm_service.py:LLM 调用与输出结构(RepairSolution)
  • ensp-backend/database.py:SQLite 用户与历史记录
  • ensp-backend/topo_generator.py:拓扑/配置生成相关能力(与 AI 修复不同链路)

前端关键文件:

  • ensp-frontend/src/views/AIRepairView.vue:AI 修复页面(采集统计、配置输出、预分析证据、修复结果)
  • ensp-frontend/src/router/index.js:路由与登录态守卫

3. AI 修复的工作原理(端到端)

AI 修复链路的目标是:先确保拿到“真实配置”,再做“基于证据的分析”

3.1 拓扑解析

.topo 本质是 XML。平台解析得到:

  • nodes[]:设备 id/name(model)/com_port/坐标
  • edges[]:设备间连接关系(当前未解析端口号,仅保留设备级连接)

其中 com_port 是 eNSP 分配的 Console 端口(例如 2000/2001…),用于后续自动采集配置。

3.2 配置采集(Telnet Console)

平台对每台设备:

  1. 连接 127.0.0.1:<com_port>
  2. 发送命令:screen-length 0 temporary(尽量关闭分页)
  3. 执行:display current-configuration | no-more(优先拿全量)
  4. 若设备不支持 | no-more,自动回退到 display current-configuration
  5. 采集过程中若出现分页提示 ---- More ----,会自动发送回车继续直到结束
  6. 清理终端输出中的 ANSI 光标控制码(例如 \x1b[42D),避免“乱码”

采集结果会以每台设备维度返回:

  • ok / skipped / error:采集是否成功、是否跳过、失败原因
  • config_len:配置长度
  • config_key_lines:提取的关键配置块/关键行
  • config_preview:配置预览(为避免页面过大,默认截断到前 12000 字符)

3.3 规则化预分析(确定性证据)

仅靠大模型容易出现“看到 OSPF 就归因 OSPF”的问题。为避免这种“幻觉式推理”,平台在 LLM 之前增加了 确定性预分析

  • 从配置解析接口块,提取每个 interface 下的 ip address
  • 如果某设备 没有任何接口 IP,直接给出高置信发现(例如“源设备缺少接口 IP”)
  • 根据拓扑链路检查:链路两端 L3 设备是否存在共同网段(否则标记为可疑)
  • 从问题描述中尝试抽取“源设备 + 目标 IP”,并识别目标 IP 的归属设备/接口(如果能从配置里匹配到)

预分析结果会以 precheck 字段返回,并注入大模型上下文,让模型优先解释“证据明确的低级错误”(如接口未配 IP)。

3.4 LLM 深度分析(可选)

如果配置了 OPENAI_API_KEY 等环境变量,平台会调用模型输出结构化 JSON:

  • analysis:基于证据的原因分析
  • solution_steps:排查/修复步骤
  • commands:按设备给出可执行命令列表

若 LLM 不可用,平台会返回可用的降级提示,并保留采集的配置与预分析证据,仍可用于人工排障。


4. 常见误判的根因与本项目的改进点

在 eNSP 实验中,“删接口 IP 导致不通”这类问题非常常见。早期版本的 AI 结果容易出现:

  • 只给“OSPF/路由传递问题”这种泛化结论
  • 未明确指出“接口 IP 缺失/网段不一致”这类硬证据

主要根因:

  1. LLM 在没有强证据时容易做经验推断
  2. 拓扑解析未包含端口级映射,模型难以做精确链路定位
  3. 配置上下文过长/过散,模型抓不到“缺失配置”的关键证据

本项目的改进:

  • Telnet 全量采集 + 自动翻页
  • 清理控制码,保证输出可读
  • 引入规则化预分析(高置信证据)
  • 将“证据”在前端直接展示,避免黑盒

5. API 设计(摘要)

后端默认地址:http://localhost:5000

5.1 AI 修复

  • POST /api/ai-repair
    • FormData:
      • file: .topo
      • issue: 问题描述文本
    • 返回:
      • analysis/solution_steps/commands
      • device_collection:设备采集明细(含配置预览)
      • precheck:预分析证据

5.2 LLM 配置

  • GET/POST /api/system/llm-config
    • 用于读取/写入 .env 中的模型配置(注意不要提交 .env 到 GitHub)

6. 本地运行

6.1 前置条件

  • Windows 环境(eNSP 主要运行于 Windows)
  • eNSP 已启动且拓扑中设备已运行完成
  • Python(建议使用虚拟环境)
  • Node.js / npm

6.2 启动后端

进入 ensp-backend/

pip install -r requirements.txt python app.py

默认监听:http://127.0.0.1:5000

6.3 启动前端

进入 ensp-frontend/

npm install npm run dev -- --host 0.0.0.0 --port 5173

如果 5173 被占用,Vite 会自动换到 5174/5175…,以控制台输出为准。

Read more

【Java 开发日记】设计一个支持万人同时抢购商品的秒杀系统?

【Java 开发日记】设计一个支持万人同时抢购商品的秒杀系统?

目录 一、系统架构设计 1. 分层架构 2. 具体组件 二、核心问题解决方案 1. 超卖问题 解决方案一:Redis原子操作 解决方案二:数据库乐观锁 解决方案三:预扣库存 2. 高并发请求处理 2.1 流量削峰 2.2 分层过滤 3. 系统性能优化 3.1 缓存策略 3.2 读多写少优化 4. 详细实现方案 4.1 秒杀流程 4.2 库存同步方案 三、高可用保障 1. 限流降级策略 2. 熔断降级 四、监控与告警 1.

By Ne0inhk
# Java 零基础完整入门教程(超详细,循序渐进)

# Java 零基础完整入门教程(超详细,循序渐进)

你想要一套完整的Java编程语言入门教程,这份内容从零基础环境搭建到核心语法+实战案例全覆盖,逻辑清晰、知识点完整,学完能掌握Java基础开发能力,适合纯新手入门学习 ✅ 一、Java 简介 & 核心优势(必知) Java 是一门 面向对象、跨平台、编译型+解释型 的高级编程语言,由Sun公司(现Oracle)推出,诞生至今稳居编程语言排行榜前列。 Java 核心三大特性(灵魂) 1. 跨平台(一次编写,到处运行) :Java代码编译后生成字节码文件(.class),不是直接运行在操作系统,而是运行在 JVM(Java虚拟机) 上。不同操作系统(Windows、Mac、Linux)安装对应版本的JVM,就能运行同一个class文件,这是Java最核心的优势。 2. 面向对象(OOP) :Java纯面向对象,万物皆对象,

By Ne0inhk
【JavaEE初阶】告别小白!Java IO 流读写 + 文件操作实战

【JavaEE初阶】告别小白!Java IO 流读写 + 文件操作实战

我的个人主页我的专栏:人工智能领域、java-数据结构、Javase、C语言,MySQL,JavaEE初阶,希望能帮助到大家!!!点赞👍收藏❤ 目录 * 一、先搞懂:文件和文件系统的基础认知 * 二、Java 中操作文件的“核心工具”:File 类 * 1. File 类的关键属性、构造和方法 * 2. File 类实操:从获取信息到创建删除 * (1)搞懂 get 系列方法:获取文件信息 * (2)创建与删除文件:createNewFile() 和 delete() * (3)创建目录:mkdir() 和 mkdirs() 的区别 * (4)文件重命名:renameTo() * 三、Java IO

By Ne0inhk
【JAVA探索之路】简单聊聊Kafka

【JAVA探索之路】简单聊聊Kafka

目录 一、Kafka核心概念与架构 核心概念解析 集群架构一览 二、Kafka核心特性与工作原理 顺序I/O与零拷贝 生产者可靠性保证 精确一次语义 三、Kafka关键API与生态系统 四、Kafka运维管理 五、Kafka典型应用场景 一、Kafka核心概念与架构 要掌握 Kafka,必须从理解其精心设计的基本模型开始。 核心概念解析 * 消息与批次:Kafka 的基本数据单元称为“记录”,包含键、值和时间戳。为提高效率,多条记录会组合成“批次”进行传输。 * 主题与分区:消息按“主题”进行分类,类似于数据库的表。每个主题可被分割为多个“分区”,这是 Kafka 实现并行处理和横向扩展的基石。消息在分区内按追加顺序存储,并分配一个单调递增的偏移量,从而保证了消息的顺序性。 * 生产与消费:生产者将消息发布到指定主题的特定分区;消费者则以“拉”

By Ne0inhk