dharkangel666/lan-network-scanner
GitHub: dharkangel666/lan-network-scanner
一款带有 Web 仪表盘的局域网扫描器,支持 ARP 设备发现、端口扫描、供应商识别和操作系统检测。
Stars: 0 | Forks: 0
# 网络扫描器
一款带有 Web 仪表板的本地网络扫描器。发现局域网上的活动主机,解析 MAC 地址和供应商,并扫描开放的 TCP 端口。
## 功能
- **ARP 发现** — 在拥有 raw socket 访问权限时进行主动 ARP 扫描
- **备用发现** — 当 ARP 不可用时,使用 ping 扫描结合 Linux 邻居表
- **MAC + 供应商查询** — 解析硬件地址和 IEEE OUI 供应商名称
- **mDNS 主机名** — 当反向 DNS 不可用时,通过 Avahi 解析 `.local` 名称
- **操作系统检测** — 结合 TTL、开放端口、服务 banner 和供应商提示
- **端口扫描** — 支持常用端口或自定义范围的 TCP connect 扫描
- **Web 仪表板** — 带有实时流式更新的浏览器 UI
- **自动网络检测** — 从 `ip route` 读取您的默认路由和接口
## 环境要求
- Python 3.11+
- Linux 系统且需安装 `ip`、`ping` 和 `avahi-daemon`
- 发送 ICMP ping 的权限(在 Linux 上通常普通用户即可运行)
- 进行主动 ARP 扫描所需的 raw socket 访问权限(`sudo` 或 `cap_net_raw`)
## 安装说明
```
cd ~/Projects/network-scanner
python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
```
## 运行方式
```
python run.py
```
日常使用无需 `sudo`。当主动 ARP 扫描不可用时,发现机制将使用 ping 结合内核 ARP 邻居表。
### 主动 ARP 的一次性设置(可选)
主动 ARP 扫描需要 raw socket 访问权限。您只需使用一次 `sudo` 即可将该权限授予项目的 virtualenv:
```
chmod +x scripts/setup-capabilities.sh
sudo ./scripts/setup-capabilities.sh
python run.py
```
设置脚本会在必要时使用复制的 Python 二进制文件重新创建 virtualenv,因此这些 capabilities 不会应用到您的系统级 Python 上。
要撤销该更改:
```
sudo ./scripts/remove-capabilities.sh
```
即使 ARP 可用,若要强制使用备用发现机制:
```
NETWORK_SCANNER_FORCE_FALLBACK=1 python run.py
```
在浏览器中打开 [http://localhost:8080](http://localhost:8080)。
## 使用说明
1. 点击 **Scan Network** 以发现局域网上的活动设备。
2. 查看每个主机的 MAC 地址和供应商名称。
3. 点击任意已发现主机上的 **Scan Ports**,或手动输入目标 IP。
4. 从下拉菜单中选择端口预设,或选择 **Custom** 并输入类似 `22,80,443` 或 `9000-9010` 的值。
## API
- `GET /api/network` — 本地网络信息
- `GET /api/scan/discovery` — 已发现主机的 SSE 流
- `GET /api/scan/ports?host=IP&ports=common` — 开放端口的 SSE 流
Host 对象包括:
- `ip`
- `mac`
- `vendor`
- `hostname`
- `method`(`arp`、`ping`、`ping+arp`、`neighbor` 或 `local`)
## 注意事项
- 仅扫描您拥有或已获得测试授权的网络。
- 供应商查询会在首次扫描时下载 IEEE OUI 数据库,并将其缓存到 `~/.cache/network-scanner/oui.csv`。
- 主机名首先通过反向 DNS 解析,然后通过 Avahi 使用 mDNS 解析。两者均不可用的设备将显示为空白的主机名。
- 操作系统检测为启发式(TTL、端口、banner、供应商)方法。这是一个最佳推测,而不是像 nmap -O 那样的完整指纹识别。
- 如果没有 raw socket 访问权限,发现机制将回退到 ping 结合内核 ARP 邻居表。
- 端口扫描使用 TCP connect,并报告接受连接的端口。
标签:Python, Web面板, 云存储安全, 局域网发现, 插件系统, 数据统计, 无后门, 端口扫描, 网络扫描, 网络测绘, 设备指纹, 逆向工具