Ahlyx/Network-Scanner

GitHub: Ahlyx/Network-Scanner

一款专注于工控协议识别的轻量级网络资产扫描器,支持 ARP 主机发现、TCP 端口扫描和 OT/ICS 设备标记,同时提供 CLI 和 Web 界面。

Stars: 0 | Forks: 0

# 网络扫描器 一个基于 Python 的网络扫描器,可执行 ARP 主机发现、TCP 端口扫描和 OT/ICS 协议检测。基于 Scapy、FastAPI 和 Rich 构建 — 同时提供 CLI 工具和 Web 仪表盘。 在 VMware 实验室环境中的 Linux (Ubuntu) 上构建,设计时考虑了 OT/ICS 安全性。 ## 功能特性 - 对子网进行 ARP 扫描以发现活跃主机及其 MAC 地址 - 对每个发现的主机进行 TCP 端口扫描 - 自动标记工业端口的 OT/ICS 协议 (Modbus, S7comm, DNP3, EtherNet/IP, BACnet, OPC-UA 等) - MAC 厂商识别 - Rich CLI 表格输出 - 具有实时扫描结果的 Web 仪表盘 - 输入验证以防止子网注入 - API 上的速率限制 (5 次请求/分钟) ## 项目结构 ``` Network-Scanner/ │ ├── api.py # FastAPI backend — serves the web dashboard and scan endpoint ├── scanner.py # Core scanning logic — ARP discovery and port scanning via Scapy ├── cli.py # CLI interface using Rich for formatted terminal output │ ├── static/ │ └── index.html # Web dashboard — HTML, CSS, JS in a single file │ └── requirements.txt ``` ## 环境要求 - Python 3.12+ - Linux (Scapy 需要 raw socket 访问权限 — 使用 `sudo` 运行) - 用于 ARP 扫描的 Root/sudo 权限 安装依赖: ``` pip install -r requirements.txt ``` ## 使用方法 ### CLI ``` sudo venv/bin/python3 cli.py ``` 输出一个格式化的 Rich 表格,包含发现的主机、MAC 地址、厂商信息和开放端口。OT 端口以红色高亮显示。 ### Web 仪表盘 启动 API 服务器: ``` sudo venv/bin/python3 -m uvicorn api:app --reload ``` 打开浏览器并访问: ``` http://localhost:8000/static/index.html ``` 输入子网 (例如 `192.168.1.0/24`) 并点击 **SCAN**。 ### API 接口 ``` GET /api/scan?subnet=192.168.1.0/24 ``` 返回 JSON: ``` { "subnet": "192.168.1.0/24", "hosts_found": 2, "hosts": [ { "ip": "192.168.1.1", "mac": "aa:bb:cc:dd:ee:ff", "ports": [ { "port": 502, "service": "Modbus", "ot_flag": true } ] } ] } ``` ## OT/ICS 端口检测 扫描器标记以下工业控制系统端口: | 端口 | 协议 | 设备类型 | |-------|------------------|------------------------------| | 502 | Modbus | PLCs, 工业控制器 | | 102 | S7comm | Siemens PLCs | | 20000 | DNP3 | 电力/水利基础设施 | | 44818 | EtherNet/IP | Rockwell/Allen-Bradley PLCs | | 47808 | BACnet | 楼宇自动化系统 | | 4840 | OPC-UA | 工业数据交换 | | 1962 | PCWorx | Phoenix Contact 设备 | | 2222 | EtherNet/IP alt | 工业以太网 | | 9600 | OMRON FINS | OMRON PLCs | ## 安全说明 - CORS 仅限于 `localhost` - 子网输入在传递给 Scapy 之前使用 Python 的 `ipaddress` 模块进行验证 - Web 前端全程使用 `textContent` 和 `createElement` — 不使用 `innerHTML` — 以防止 XSS - 通过 slowapi 限制每分钟最多 5 次扫描 - Scapy 需要 root 权限才能发送原始数据包 — 始终使用 `sudo` 运行 ## 重要提示 **仅扫描您拥有或拥有明确扫描权限的网络。** 未经授权的网络扫描在大多数司法管辖区都是非法的。此工具旨在用于实验室环境和您控制的网络。 ## 技术栈 - [Scapy](https://scapy.net/) — ARP 数据包构建和网络扫描 - [FastAPI](https://fastapi.tiangolo.com/) — REST API 后端 - [Rich](https://rich.readthedocs.io/) — 终端格式化 - [slowapi](https://github.com/laurentS/slowapi) — 速率限制 - [uvicorn](https://www.uvicorn.org/) — ASGI 服务器 ## 许可证 MIT
标签:AES-256, ARP发现, AV绕过, BACnet, DNP3, EtherNet/IP, FastAPI, GitHub, ICS安全, impacket, OPC-UA, OT安全, PKINIT, Python, S7comm, Scapy, Web仪表盘, 关键基础设施, 协议识别, 后端开发, 密码管理, 工业互联网, 工控安全, 批量查询, 插件系统, 数据统计, 无后门, 漏洞评估, 端口扫描, 网络安全, 网络扫描器, 资产探测, 资产测绘, 逆向工具, 隐私保护