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仪表盘, 关键基础设施, 协议识别, 后端开发, 密码管理, 工业互联网, 工控安全, 批量查询, 插件系统, 数据统计, 无后门, 漏洞评估, 端口扫描, 网络安全, 网络扫描器, 资产探测, 资产测绘, 逆向工具, 隐私保护