Skip to content

Robot-PZY/OpenWrt

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

🌐 OpenWrt Network Manager

基于 OpenWrt 的轻量级网络管理 Web 应用
实时流量监控 · 可视化仪表盘 · 防火墙规则管理

Platform Firewall Languages License


📌 项目简介

OpenWrt Network Manager 是一个面向嵌入式路由器的网络管理工具,以 Web 仪表盘的形式提供 实时流量监控防火墙规则管理 两大核心功能。项目采用 C + Python + JavaScript 三层架构,专为 OpenWrt 25.12(firewall4 / nftables)设计,通过 Samba 共享完成部署,资源占用极低。

核心特性

  • 🚀 实时流量捕获 — 基于 libpcap 的 C 语言抓包程序,按 (src_ip, dst_ip) 对统计累计流量、峰值速率、平均速率
  • 📊 可视化仪表盘 — 蓝色主题 Web UI,包含流量趋势图、主机热力图、连接分析、活跃主机排行
  • 🔥 防火墙管理 — 通过 UCI 接口管理 firewall4 规则,支持新增、查看、删除、清空,操作安全隔离
  • 🔌 零依赖后端 — Python 标准库 http.server,无需 pip 安装任何第三方包
  • 📡 RESTful API — 标准化的 JSON 接口,便于二次开发和系统集成

🧭 系统架构

┌─────────────────────────────────────────────────────────────┐
│                     Browser (Web UI)                        │
│   index.html + style.css + app.js                           │
│   仪表盘 / 流量监控 / 连接分析 / 防火墙 / 历史记录           │
└──────────────────────────┬──────────────────────────────────┘
                           │ HTTP (JSON)
                           ▼
┌─────────────────────────────────────────────────────────────┐
│              Python Backend (server.py)                     │
│   ┌──────────────┐  ┌──────────────────┐                    │
│   │ GET /api/traffic│  │ POST /api/firewall/* │              │
│   │ GET /api/overview│  └────────┬─────────┘                │
│   └──────┬───────┘              │                           │
│          │                      │ subprocess                 │
│          ▼                      ▼                            │
│   data/traffic.json     Shell Scripts (firewall_*.sh)        │
└──────────┬───────────────────────┬──────────────────────────┘
           │ file I/O              │ UCI commands
           ▼                       ▼
┌────────────────────┐   ┌────────────────────────────────────┐
│  C Monitor          │   │  OpenWrt firewall4 (nftables)      │
│  traffic_monitor    │   │  /etc/config/firewall               │
│  (libpcap + pthread)│   │  fw4 / uci                          │
└────────────────────┘   └────────────────────────────────────┘

数据流说明:

  1. 流量监控链路:C 程序通过 libpcap 抓取 br-lan 接口的 IP 数据包 → 解析源/目的 IP 和包长度 → 按流聚合统计 → 每 2 秒写入 data/traffic.json → Python 后端读取 JSON → 前端轮询 /api/traffic 刷新展示
  2. 防火墙管理链路:前端表单提交 → Python 后端参数校验 → 调用 Shell 脚本 → 脚本通过 uci add/set/commit 写入配置 → /etc/init.d/firewall reload 使规则生效

📁 目录结构

openwrt-network-manager/
├── c_monitor/                  # C 语言流量监控模块
│   ├── traffic_monitor.c       #   libpcap 抓包 + 流量统计
│   ├── Makefile                #   编译脚本
│   └── build_for_ac2100.sh     #   MIPS 交叉编译辅助脚本(可选)
│
├── backend/                    # Python 后端服务
│   └── server.py               #   HTTP 服务 + API 路由 + 参数校验
│
├── frontend/                   # Web 前端
│   ├── index.html              #   主页面(蓝色主题仪表盘)
│   ├── style.css               #   样式表
│   └── app.js                  #   前端逻辑(页面路由、图表渲染、API 调用)
│
├── data/                       # 运行时数据
│   └── traffic.json.example    #   流量 JSON 模板(首次运行自动复制)
│
├── docs/                       # 补充文档
│   ├── immortalwrt-ac2100-deploy.md
│   └── compile-traffic-monitor-ac2100.md
│
├── scripts/                    # Shell 脚本
│   ├── run_monitor.sh          #   启动流量监控
│   ├── run_server.sh           #   启动后端服务
│   ├── firewall_add.sh         #   添加防火墙规则
│   ├── firewall_list.sh        #   列出防火墙规则
│   ├── firewall_delete.sh      #   删除指定规则
│   └── firewall_clear.sh       #   清空所有 Web 规则
│
├── LICENSE                     # 开源许可证
├── .gitignore
└── README.md                   # 项目说明文档

🛠 技术栈

层级 技术 说明
流量捕获 C / libpcap 高性能原始包捕获,BPF 过滤仅处理 IPv4
数据交换 JSON C 程序写入 → Python 读取,文件级解耦
后端服务 Python 3 / http.server 零第三方依赖,纯标准库实现
前端界面 HTML + CSS + Vanilla JS 无框架依赖,Canvas 原生绘图
防火墙 UCI + firewall4 OpenWrt 22.03+ 的 nftables 方案
部署方式 Samba / scp / git 将项目目录复制到路由器即可运行

兼容性

环境 包管理器 防火墙 流量监控二进制
OpenWrt 23.05+ / ImmortalWrt 23.05.x opkg firewall4 (nftables) 需按目标 CPU 架构交叉编译
OpenWrt SNAPSHOT (部分分支) apk firewall4 (nftables) 同上

MIPS 设备(如红米 AC2100)请参考 docs/compile-traffic-monitor-ac2100.mddocs/immortalwrt-ac2100-deploy.md


🚀 快速开始

前置条件

条件 说明
OpenWrt 版本 23.05+ 或兼容的 ImmortalWrt(firewall4 / nftables)
包管理器 opkgapk(视固件而定)
Python 3 例如 opkg install python3apk add python3
libpcap 运行时库(交叉编译时需对应 dev 包)
编译环境 外部 Linux x86_64(gcc、libpcap-dev;MIPS 设备需 SDK 交叉编译)

1. 编译 C 监控程序

⚠️ OpenWrt 默认缺少 musl-dev 和 libpcap-dev,需在外部 Linux x86_64 环境编译。

# 在 Linux x86_64 主机上
cd c_monitor
make            # 生成 traffic_monitor 可执行文件

编译产物为 traffic_monitor,是一个 Linux ELF 可执行文件。编译依赖:

  • libpcap — 网络抓包
  • pthread — 写入线程

2. 部署到 OpenWrt

将项目目录传输到路由器(路径可自定义,以下以 /root/openwrt-network-manager 为例):

scp -r . root@192.168.1.1:/root/openwrt-network-manager/

也可通过 Samba 共享等方式复制整个项目目录。

3. 启动服务

SSH 登录 OpenWrt 后:

cd /root/openwrt-network-manager

# 赋予脚本执行权限
chmod +x scripts/*.sh

# 终端 1:启动流量监控(默认监听 br-lan)
./scripts/run_monitor.sh br-lan

# 终端 2:启动后端服务(默认端口 8080)
./scripts/run_server.sh 8080

4. 访问 Web 界面

浏览器打开(将 <ROUTER_IP> 替换为路由器地址):

http://<ROUTER_IP>:8080

📖 功能模块说明

流量监控

指标 说明
累计流量 (total_bytes) 该流自首次发现以来的总字节数
峰值速率 (peak_rate) 所有 2 秒采样窗口中的最大字节/秒
平均速率 (avg_rate) 累计流量 ÷ 存活时长

C 程序采用 双线程架构

  • 主线程 — 运行 pcap_loop 抓包循环,解析以太网帧中的 IPv4 数据包,更新内存中的统计记录
  • 写入线程 — 每 2 秒计算峰值速率、写入 JSON 文件、刷新控制台表格

线程间通过 pthread_mutex 保护共享记录数组,支持最多 1024 条流记录。

防火墙管理

本项目通过 UCI(Unified Configuration Interface)管理 firewall4 规则:

操作 脚本 UCI 命令
添加 firewall_add.sh uci add firewall ruleuci setuci commitreload
查看 firewall_list.sh uci show firewall → 过滤 web_rule_*
删除 firewall_delete.sh uci delete firewall.<section>uci commitreload
清空 firewall_clear.sh 遍历所有 web_rule_* 逐条删除 → commitreload

💡 安全设计:所有 Web 添加的规则 name 以 web_rule_ 前缀标识(如 web_rule_1719301234),与系统默认规则隔离,防止误删系统配置。

验证规则是否生效:

# 查看 UCI 配置
uci show firewall | grep web_rule_

# 查看 nftables 实际规则
fw4 print

📡 API 接口

所有接口返回 JSON 格式,支持 CORS(Access-Control-Allow-Origin: *)。

流量数据

GET /api/traffic

响应示例:

{
  "status": "success",
  "timestamp": "2026-06-15 16:30:00",
  "data": [
    {
      "src_ip": "192.168.1.2",
      "dst_ip": "192.168.1.1",
      "total_bytes": 20480,
      "peak_rate": 4096,
      "avg_rate": 1024
    }
  ]
}

系统概览

GET /api/overview

返回主机名、系统时间、运行时长、监控接口、流量记录数、防火墙规则数等。

防火墙管理

方法 路径 请求体 说明
POST /api/firewall/add {protocol, src_ip, dst_ip, port, action} 添加规则
POST /api/firewall/list 获取规则列表
POST /api/firewall/delete {section_id} 删除指定规则
POST /api/firewall/clear 清空所有 Web 规则

添加规则请求示例:

{
  "protocol": "tcp",
  "src_ip": "192.168.1.2",
  "dst_ip": "192.168.1.1",
  "port": "80",
  "action": "drop"
}

参数校验规则:

参数 约束
protocol 必须为 tcp / udp / icmp
src_ip / dst_ip 合法 IPv4 地址,各段 0-255
port TCP/UDP 必填,1-65535;ICMP 可留空
action 必须为 accept / reject / drop

⚙️ 配置说明

环境变量

变量 默认值 说明
OWRT_MONITOR_IFACE br-lan 流量监控的网络接口

命令行参数

# 流量监控程序
./traffic_monitor [接口名] [输出文件路径]
# 默认: br-lan, ../data/traffic.json

# 后端服务
python3 server.py [端口号]
# 默认: 8080

# 启动脚本
./scripts/run_monitor.sh [接口名]
./scripts/run_server.sh [端口号]

可调参数(C 源码宏定义)

默认值 说明
MAX_RECORDS 1024 最大流记录条数
UPDATE_INTERVAL 2 JSON 写入间隔(秒)
SNAP_LEN 65535 抓包最大长度

🧪 测试验证

流量监控测试

在宿主机上产生网络流量,观察前端仪表盘变化:

# 在宿主机持续 ping(将 <ROUTER_IP> 替换为路由器地址)
ping <ROUTER_IP>

# 或使用 iperf3 产生大流量
iperf3 -c <ROUTER_IP>

防火墙规则测试

  1. 通过 Web 页面添加一条 drop 规则(如 ICMP drop 某 IP)
  2. 在宿主机执行 ping <被阻断的IP>,验证请求被丢弃
  3. 删除或清空规则后,验证连通性恢复

API 接口测试

# 将 192.168.1.1 替换为你的路由器 IP
curl http://192.168.1.1:8080/api/traffic

curl http://192.168.1.1:8080/api/overview

curl -X POST http://192.168.1.1:8080/api/firewall/add \
  -H "Content-Type: application/json" \
  -d '{"protocol":"icmp","src_ip":"192.168.1.2","dst_ip":"192.168.1.1","port":"","action":"drop"}'

curl -X POST http://192.168.1.1:8080/api/firewall/list

curl -X POST http://192.168.1.1:8080/api/firewall/clear

🔧 常见问题

C 程序无法运行

确认编译环境为 Linux x86_64,产物为 ELF 可执行文件而非 Windows .exe。

file traffic_monitor
# 应输出: ELF 64-bit LSB executable, x86-64 ...
抓不到数据包

尝试更换网络接口。OpenWrt 默认桥接接口为 br-lan,部分场景可能需要使用 eth0

# 查看可用接口
ip link show
端口被占用

修改启动端口:

./scripts/run_server.sh 9090    # 使用其他端口
防火墙规则不生效

确保以 root 用户运行脚本,并检查 firewall4 服务状态:

/etc/init.d/firewall status
/etc/init.d/firewall reload
fw4 print | grep web_rule_
前端页面打不开
  1. 确认后端服务已启动且监听正确端口
  2. 确认 OpenWrt 防火墙放行该端口
  3. 检查浏览器控制台是否有网络错误

📋 前端页面一览

页面 功能
🏠 仪表盘 流量趋势图、主机热力图、实时连接、活跃主机排行、快捷添加规则、操作历史
📊 流量监控 完整流量数据表格,自动刷新
🔗 连接分析 所有连接记录的详细列表
🔥 防火墙 添加规则表单、执行日志、规则列表管理(刷新/删除/清空)
📜 历史记录 所有操作的时间线记录

🔒 安全说明

本项目面向实验与受信任局域网环境,默认不提供身份认证

  • HTTP 服务监听 0.0.0.0,局域网内任意主机均可访问 API
  • 防火墙管理接口可直接修改路由器 firewall 配置,需 root 权限运行脚本
  • CORS 设置为 Access-Control-Allow-Origin: *

请勿在未加固的公网或不可信网络中直接暴露本服务。 生产或半生产场景建议:

  1. 仅绑定 127.0.0.1,通过带认证的反向代理对外提供访问
  2. 在路由器防火墙中限制管理端口的来源 IP
  3. 自行增加 Token / Basic Auth 等鉴权层

📄 许可证

本项目采用 MIT License 开源。


如有问题或建议,欢迎提交 Issue 或 Pull Request。

About

No description, website, or topics provided.

Resources

License

Contributing

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors