gunelsarac/gns3-network-monitoring

GitHub: gunelsarac/gns3-network-monitoring

基于 GNS3 与 Python 微服务架构的虚拟网络实时流量监控与管理系统,提供数据包捕获可视化、ACL 规则管理和 QoS 带宽控制功能。

Stars: 0 | Forks: 0

# 基于 GNS3 的实时网络流量监控与管理系统 使用 Python 和 Scapy 开发的微服务监控平台,可在虚拟网络环境中实时捕获、可视化流量,并通过 ACL/QoS 规则进行管理。 ![Python](https://img.shields.io/badge/Python-3.x-3776AB?logo=python&logoColor=white) ![Scapy](https://img.shields.io/badge/Scapy-packet%20capture-1E5B94) ![Flask](https://img.shields.io/badge/Flask-dashboard-000000?logo=flask&logoColor=white) ![GNS3](https://img.shields.io/badge/GNS3-network%20emulation-009639) ![License](https://img.shields.io/badge/License-MIT-yellow)
## 目录 - [项目介绍](#proje-hakkında) - [特性](#özellikler) - [系统截图](#ekran-görüntüleri) - [系统架构](#sistem-mimarisi) - [网络拓扑](#ağ-topolojisi) - [微服务](#mikroservisler) - [安装说明](#kurulum) - [运行方式](#çalıştırma) - [所用技术](#kullanılan-teknolojiler) - [项目结构](#proje-yapısı) - [开源协议](#lisans) ## 项目介绍 本项目是一个实时流量监控与管理系统,运行于 GNS3 网络模拟器构建的虚拟网络拓扑之上。系统通过在 Ubuntu 路由器上运行的 Python 服务,捕获流经网络的数据包,追踪各设备产生的流量状况,并通过 Web 界面进行可视化展示。 系统不仅限于监控,还能通过基于 **iptables** 的访问控制列表(ACL)和基于 **Linux tc HTB** 的带宽管理(QoS)对网络进行主动管理。系统可以区分 YouTube(TCP)和 Zoom(UDP)等服务类型,将设备状态监控为 NORMAL / WARNING / DANGER,并在必要时执行自动干预。 本项目是作为 **阿马西亚大学(Amasya University)计算机工程系** 的毕业设计开发的。 ## 特性 - **实时数据包捕获** — 使用 Scapy 监听所有活动接口,根据协议和端口对数据包进行分类 - **服务识别** — 自动将 TCP 80/443 标记为 YouTube,将 UDP 8801/8802 标记为 Zoom - **20 台虚拟设备的网络** — 分布在 4 个 VLAN 上,由真实和模拟设备协同工作的混合拓扑 - **ICMP/ARP 模拟** — 为非物理的虚拟 PC 模拟 ping 和 ARP 响应 - **ACL 管理** — 在 iptables FORWARD 链中,基于接口模拟真实的 Cisco ACL 行为进行规则管理 - **QoS / 带宽控制** — 使用 tc HTB 实现基于服务的速率限制 - **状态机** — 根据设备流量在 NORMAL / WARNING / DANGER 之间进行状态转换并自动干预 - **Web dashboard** — 基于 Flask;包含实时流量表、拓扑动画、ICMP ping 可视化及 ACL 规则管理等标签页 - **原子级 JSON 通信** — 服务间的数据共享通过防止竞态条件的原子文件写入来实现 ## 系统截图 ### Web Dashboard — 实时流量与状态卡片 ![Dashboard 实时流量](https://raw.githubusercontent.com/gunelsarac/gns3-network-monitoring/main/docs/images/dashboard-trafik.png) ### 实时设备状态表 ![设备状态表](https://raw.githubusercontent.com/gunelsarac/gns3-network-monitoring/main/docs/images/dashboard-tablo.png) ### 网络拓扑动画(TCP / UDP 数据包流) ![拓扑动画](https://raw.githubusercontent.com/gunelsarac/gns3-network-monitoring/main/docs/images/dashboard-topoloji.png) ### ICMP Ping 可视化 ![ICMP ping 动画](https://raw.githubusercontent.com/gunelsarac/gns3-network-monitoring/main/docs/images/dashboard-icmp.png) ### 拓扑 — 局部放大 ![拓扑局部放大](https://raw.githubusercontent.com/gunelsarac/gns3-network-monitoring/main/docs/images/dashboard-topoloji-zoom.png) ## 系统架构 系统由五个独立运行的微服务组成。服务之间不直接通信,而是通过对公共 JSON 文件进行原子写入/读取来共享数据。这种方法允许各个服务单独重启,并将错误隔离。 ``` ┌─────────────────┐ ┌──────────────────────┐ ┌─────────────────┐ │ traffic_ │ │ Ubuntu Router │ │ sniff.py │ │ generator.py │───▶ │ (GNS3 / VMware) │───▶ │ (paket yakala) │ │ (paket üret) │ │ ens4 / ens5 ... │ │ │ └─────────────────┘ └──────────────────────┘ └────────┬────────┘ │ ┌─────────────────────────────────────────────┐ │ live_stats.json │ Atomik JSON Dosyaları │◀─────┘ │ live_stats · device_states · acl_rules ... │ └──────┬───────────────┬──────────────┬────────┘ │ │ │ ┌───────▼──────┐ ┌──────▼──────┐ ┌────▼────────┐ │ acl_engine │ │ qos_engine │ │ icmp_ │ │ (iptables) │ │ (tc HTB) │ │ responder │ └──────────────┘ └─────────────┘ └─────────────┘ │ ┌───────▼────────┐ │ dashboard_v15 │ │ (Flask :5000) │ └────────────────┘ ``` ## 网络拓扑 ``` NAT │ Ubuntu-Router (192.168.64.207) ├── ens3 → WAN / NAT (internet) ├── ens4 → Switch → PC1..PC20 (4 VLAN) └── ens5 → Cloud → Dashboard erişimi ``` | VLAN | IP 范围 | 设备 | |------|-----------|----------| | VLAN 10 | 192.168.10.0/24 | PC1–PC5 (PC1, PC2 为真实 VPCS) | | VLAN 20 | 192.168.20.0/24 | PC6–PC10 (模拟) | | VLAN 30 | 192.168.30.0/24 | PC11–PC15 (模拟) | | VLAN 40 | 192.168.40.0/24 | PC16–PC20 (模拟) | PC1 和 PC2 是真实的 VPCS 实例;PC3–PC20 则通过 `icmp_responder.py` 在 ARP 和 ICMP 层级进行模拟。 ## 微服务 | 服务 | 任务 | 技术 | |--------|--------|-----------| | `sniff.py` | 监听活动接口,捕获数据包并写入 `live_stats.json` | Scapy | | `traffic_generator.py` | 为 20 个虚拟设备生成 YouTube (TCP) 和 Zoom (UDP) 的合成流量 | Scapy `sendp()` | | `icmp_responder.py` | 为模拟设备伪造 ARP + ICMP 响应 | Scapy | | `acl_engine.py` | 在 iptables FORWARD 链中管理基于接口的 ACL 规则 | iptables | | `qos_engine.py` | 使用 tc HTB 应用基于服务的带宽限制 | Linux tc | | `state_manager.py` | 监控设备状态 (NORMAL/WARNING/DANGER) 并进行干预 | Python | | `dashboard_v15.py` | Web 界面 — 流量、拓扑、ICMP 和 ACL 标签页 | Flask | ### 服务间的 JSON 文件 | 文件 | 写入者 | 读取者 | |-------|-------|--------| | `live_stats.json` | sniff.py | dashboard, state_manager | | `device_states.json` | state_manager.py | dashboard | | `disrupt_list.json` | dashboard | traffic_generator, state_manager | | `slider_targets.json` | dashboard | state_manager | | `acl_rules.json` | acl_engine / dashboard | sniff, icmp_responder | ## 安装说明 ### 前置条件 - GNS3 + VMware Workstation - Ubuntu 路由器虚拟机(已安装 Python 3.x) - Python 包:`scapy`, `flask` ### 步骤 在路由器上安装必要的 Python 包: ``` sudo apt update sudo apt install python3-pip pip3 install scapy flask ``` 将项目文件复制到路由器(SCP 命令示例): ``` scp *.py setup_routes.sh gunel@192.168.64.207:/home/gunel/ ``` 设置网络路由(每次重启后需重新运行): ``` sudo bash setup_routes.sh ``` ## 运行方式 首先,停止可能存在的旧服务实例: ``` sudo pkill -f sniff.py sudo pkill -f traffic_generator sudo pkill -f icmp_responder sudo pkill -f state_manager sudo pkill -f dashboard_v15 sleep 2 ``` 开启接口转发并按顺序启动服务: ``` sudo ip link set ens4 up sudo ip link set ens5 up sudo python3 /home/gunel/sniff.py > /home/gunel/sniff.log 2>&1 & sudo python3 /home/gunel/icmp_responder.py > /home/gunel/icmp.log 2>&1 & sudo python3 /home/gunel/traffic_generator.py > /home/gunel/trafik.log 2>&1 & sudo python3 /home/gunel/state_manager.py > /home/gunel/state.log 2>&1 & sudo python3 /home/gunel/dashboard_v15.py > /home/gunel/dashboard.log 2>&1 & ``` 验证服务是否正在运行(在健康状态下,应准确看到 5 个 python 进程): ``` ps aux | grep python3 ``` 通过浏览器访问 Dashboard: ``` http://192.168.64.207:5000 ``` ## 所用技术 - **Python 3** — 所有服务的开发语言 - **Scapy** — 数据包捕获与生成 - **Flask** — Web dashboard - **iptables** — 访问控制列表(ACL) - **Linux tc (HTB)** — 流量整形 / QoS - **GNS3 + VMware** — 网络模拟 - **VPCS** — 虚拟 PC 客户端 ## 项目结构 ``` . ├── sniff.py # Paket yakalama servisi ├── traffic_generator.py # Sentetik trafik üreteci ├── icmp_responder.py # ARP + ICMP simülasyonu ├── acl_engine.py # iptables ACL yönetimi ├── qos_engine.py # tc HTB bant genişliği yönetimi ├── state_manager.py # Durum makinesi (NORMAL/WARNING/DANGER) ├── dashboard_v15.py # Flask web arayüzü ├── setup_routes.sh # Ağ rotalarını ayarlama betiği ├── docs/ │ └── images/ # Ekran görüntüleri └── README.md ``` ## 开源协议 本项目基于 MIT 协议授权。详情请参阅 [LICENSE](LICENSE) 文件。
**Günel Saraç** — 阿马西亚大学计算机工程系 毕业设计 · 2026
标签:GNS3, Python, QoS, Scapy, Streamlit, 无后门, 流量管理, 访问控制, 逆向工具