一个基于 Python 的高级局域网扫描与监控工具。底层使用 Scapy 进行网络包的构建与捕获,支持 IPv4 和 IPv6,提供了 交互式命令行界面 (CLI) 以便使用。
该项目旨在实现快速的设备发现、端口扫描、被动流量监听以及设备在线状态的心跳监控。
本项目是为计算机网络课程编写的,基于MIT许可公开
-
多协议设备发现 (Discovery):
- 快速扫描: 利用 ARP (IPv4), ICMPv6 (IPv6), SSDP, mDNS, NetBIOS (UDP 137) 等协议进行广播/多播发现。
- 全量扫描 (CIDR): 支持对指定网段进行 ARP/ICMP 暴力轮询扫描。
- IPv4/IPv6 支持: 完美支持双栈网络环境。
-
端口扫描 (Port Scan):
- 支持 TCP SYN (半连接), TCP FIN, TCP XMAS 和 UDP 扫描。
- 支持自定义端口列表和并发数设置。
-
被动监听 (Passive Monitor):
- 不主动发送探测包,通过监听广播/多播流量(如 DHCP, mDNS, ARP)被动发现网络中的设备。
-
心跳监控 (Heartbeat):
- 对已知设备定期发送单播探测包,实时监控设备在线/离线状态。
-
厂商识别:
- 解析 MAC 地址以识别设备制造商 (支持
manuf2)。
- 解析 MAC 地址以识别设备制造商 (支持
-
终端界面:
- 基于
Typer和Rich构建的精美终端界面,支持 TUI 风格的实时监控面板。
- 基于
-
Python 3.10+ (代码中使用了
match-case语法)。 -
底层驱动:
- Windows: 需要安装 Npcap (安装时请勾选 "Install Npcap in WinPcap API-compatible Mode")。
- Linux/macOS: 需要安装
libpcap。
-
权限: 由于涉及发送 ARP/SYN 包,程序必须以 管理员 (Administrator/Root) 权限运行。
项目包含核心依赖和 CLI 依赖,请运行以下命令安装:
# 安装核心服务依赖
pip install scapy>=2.7.0 pydantic flask psutil
# 安装命令行界面(CLI)所需的额外依赖
pip install typer rich manuf2(注意:manuf2 是可选的,用于 MAC 厂商识别,建议安装)
scanner_cli.py 提供了丰富的功能命令。
1. 列出网络接口 查看当前系统的网卡及其 IP/MAC 信息。
sudo python scanner_cli.py list-ifaces2. 交互式网络监控 (推荐) 启动一个 TUI(终端用户界面) 面板,进行被动监听。你可以按键触发主动扫描。
sudo python scanner_cli.py monitor --manuf-instead- 界面操作:
[b]: 触发广播发现 (Broadcast)。[s]: 触发全网段扫描 (CIDR Scan)。[c]: 清除已离线的设备。[q]: 退出。
3. 端口扫描 对特定 IP 进行 TCP SYN 扫描。
sudo python scanner_cli.py scan_ports 192.168.1.100 "22,80,443" --method syn4. 局域网广播发现
sudo python scanner_cli.py broadcast 4 --manufLAN_SCANNER/
├── scanner_cli.py # 命令行工具入口 (Typer/Rich)
├── requirements.txt # 依赖列表
├── requirements_cli.txt # CLI 额外依赖
└── service/ # 核心逻辑包
├── core.py # 扫描引擎核心 (Scapy封装)
├── models.py # Pydantic 数据模型 (HostDiscoveryResult, PortResult)
└── utils.py # 工具函数 (CIDR计算, SSDP解析等)
ScannerEngine 是本项目的核心类,位于 service/core.py。它使用了 asyncio 和 ThreadPoolExecutor 来解决 Scapy 的同步阻塞问题,实现了高并发扫描。
- 并发模型: 使用异步生成器 (
AsyncGenerator) 流式返回扫描结果,前端或 CLI 可以实时显示发现的设备,无需等待扫描全部结束。 - 协议指纹: 引擎会自动分析返回包的特征(如 UDP 端口、mDNS 记录、NetBIOS 响应)来推断设备的主机名 (Hostname) 和服务类型。
- 防火墙: 某些防火墙可能会拦截发送的 ARP 或 SYN 包,导致扫描结果不全,建议在测试环境中暂时关闭防火墙。
- 网络合规: 请勿在未经授权的网络中运行全量扫描或端口扫描,这可能违反网络安全规定。