> 2026年6月25日 | 作者:石像鬼 | 分类:网络管理 · 技术实战
局域网管理系统是我最早开发的一套完整ERP。最初只有9个基础模块,后来对比了市面上的网盾netsos、IP-guard、WorkWin等产品,又研究了GitHub上的开源网络管理项目,一次性补齐到17个模块。
- 12个统计卡片:设备总数/在线率/累计流量/DHCP活跃租约...
- 4个ECharts图表:流量趋势折线图、设备类型分布饼图、服务器负载柱状图、告警统计玫瑰图
- 最近告警+最近设备双表展示
ECharts力导向图实现,自动从交换机端口数据生成设备间链路关系。路由器/交换机/服务器/防火墙按类型区分节点大小和颜色,支持拖拽缩放。
覆盖10种设备类型:路由器、交换机、服务器、工作站、打印机、摄像头、AP、防火墙、存储、其他。每台设备跟踪CPU/内存/磁盘使用率、在线状态、上线时长。
- IP地址:5个子网,257个IP的分配/回收管理
- DHCP租约:active/expired/released/reserved四种状态,支持一键释放和续约
- DNS记录:A/AAAA/CNAME/MX/TXT/NS全类型支持
- ARP表自动扫描(调用系统arp -a命令)
- MAC地址绑定/黑名单/白名单三种策略
- 15条预设ARP记录覆盖所有VLAN
- Ping:支持自定义次数
- Traceroute:最大15跳
- NSLookup:DNS查询
- 端口扫描:12个常用端口检测
- VLAN管理:7个VLAN(管理/办公/生产/服务器/监控/DMZ/访客)
- ACL规则:6条预设规则(允许/拒绝/ICMP/端口控制)
- URL黑白名单:按购物/视频/游戏/社交/办公/存储分类管控
- 4级告警:紧急/严重/一般/提示
- 通知渠道:邮件/Webhook/钉钉/企业微信/短信
- 支持渠道测试
@app.post("/api/diagnose/ping")
def diag_ping(data:dict):
target = data.get("target","").strip()
# 防命令注入
if ";" in target or "|" in target or "&" in target:
raise HTTPException(400,"非法字符")
return _run_cmd(f"ping -n {count} {target}")
@app.get("/api/topology")
def topology(db:Session=Depends(get_db)):
# 设备作为节点
nodes = [{"id":d.id,"name":d.name,"type":d.device_type,...} for d in devices]
# 交换机端口映射生成链路
ports = db.query(SwitchPort).filter(SwitchPort.status=="up",...).all()
for p in ports:
target = find_device_by_name_or_mac(p.connected_device)
if target: links.append({"source":p.switch_id,"target":target.id})
return {"nodes":nodes,"links":links}
- 17台设备(路由器1/交换机3/服务器3/工作站4/打印机1/摄像头2/AP2/防火墙1)
- 5个子网,257个IP地址
- 47条DHCP租约,15条ARP记录
- 10条DNS记录,8条URL规则
- 7个VLAN,6条ACL规则
1. 端口冲突:开发时Vite和FastAPI都用3153端口,前端代理配置要仔细
2. 命令注入防护:诊断工具直接执行系统命令,必须做输入校验
3. ARP扫描的跨平台问题:Windows用arp -a,Linux格式不同,需要适配
4. 种子数据合理性:IP地址分布要符合实际子网规划,不能随机生成
觉得有用?分享给更多人