Terrormixer3000/lan_scanner
GitHub: Terrormixer3000/lan_scanner
一款原生macOS局域网扫描器,整合ping探测、ARP解析、DNS查询和端口扫描,实现网络设备发现与资产管理的完整方案。
Stars: 1 | Forks: 0
# LAN Scanner
[](https://github.com/Terrormixer3000/lan_scanner/actions/workflows/ci.yml)
[](https://github.com/Terrormixer3000/lan_scanner/releases)
[](LICENSE)


一款使用 SwiftUI 构建的原生 macOS 网络扫描器。发现本地网络上的所有设备,解析主机名,识别厂商,测量延迟,并扫描开放端口 —— 无需任何外部依赖。
## 功能特性
- **Subnet ping sweep** —— 并发 ICMP 扫描以发现存活主机
- **ARP resolution** —— 从系统 ARP 缓存中获取 MAC 地址
- **Hostname resolution** —— DNS 反向查询,mDNS (`.local`),以及跨 16 种服务类型的 Bonjour 服务浏览
- **Vendor identification** —— 使用 IEEE 数据库将 MAC 地址 OUI 前缀映射到制造商名称(本地缓存,每 30 天自动刷新)
- **Latency measurement** —— 来自 ping 的每主机往返时间
- **Port scanner** —— 并发 TCP 扫描 27 个常用服务端口(SSH, HTTP, HTTPS, SMB, RDP, VNC 等)
- **Device labelling** —— 为设备分配自定义标签和备注,在多次扫描间保留
- **Scan history** —— 存储最近 50 次扫描会话,包含设备数量和时间戳
- **Export** —— 将结果保存为 CSV 或 JSON
- **Notifications** —— 当新(未标记)设备出现在网络上时发出桌面提醒
- **Resizable split-view UI** —— 侧边栏,带可排序列的设备表格,以及带可拖动分隔符的详情面板
- **Auto-scan** —— 可配置的基于定时的后台重新扫描
## 系统要求
| 需求 | 版本 |
|---|---|
| macOS | 14.0 (Sonoma) 或更高版本 |
| Swift | 5.9 或更高版本 |
| Xcode | 15 或更高版本 *(用于本地构建)* |
## 安装说明
### 下载预构建版本
1. 前往 [Releases](https://github.com/Terrormixer3000/lan_scanner/releases) 页面。
2. 从最新版本中下载 `LanScanner.zip`。
3. 解压并将 `LAN Scanner.app` 移动到您的 `/Applications` 文件夹。
4. 首次启动时,右键点击应用并选择 **Open** 以绕过 Gatekeeper(该应用未签名)。
### 从源码构建
```
# 克隆仓库
git clone https://github.com/Terrormixer3000/lan_scanner.git
cd lan_scanner
# 以 release 模式构建
swift build -c release
# 直接运行
.build/release/LanScanner
```
要在本地构建正确的 `.app` 包:
```
swift build -c release
mkdir -p "LAN Scanner.app/Contents/MacOS"
cp .build/release/LanScanner "LAN Scanner.app/Contents/MacOS/"
cp Sources/LanScanner/Info.plist "LAN Scanner.app/Contents/"
open "LAN Scanner.app"
```
## 使用说明
1. 启动应用。左侧的侧边栏显示扫描统计信息和历史记录。
2. 从工具栏的 **Auto** 下拉菜单中选择一个网络接口,或者切换到 **CIDR** 模式并输入自定义子网(例如 `192.168.1.0/24`)。
3. 点击 **Scan** 按钮(天线图标)开始。进度条指示扫描阶段:
- Ping sweep → ARP resolution → Hostname/Bonjour resolution → Vendor lookup
4. 点击表格中的设备以在右侧面板查看详情。
5. 在详情面板中使用 **Scan Ports** 来识别设备上开放的 TCP 端口。
6. 为设备分配 **Label** 和 **Notes** 并点击 **Save Label** 以保存。
7. 使用 **Export** 按钮(上传图标)将结果保存为 CSV 或 JSON。
### 设置
打开 **Settings** (⌘,) 进行配置:
- **Concurrency** —— 同时进行的 ping 探测数量 (10–200)
- **Ping Timeout** —— 每台主机的超时秒数 (0.2–3.0)
- **Auto Refresh** —— 启用定期重新扫描并设置间隔 (30–600 秒)
## 项目结构
```
Sources/LanScanner/
├── LanScannerApp.swift # @main entry point and AppDelegate
├── ContentView.swift # Root view, 3-pane resizable layout
├── Models/
│ ├── NetworkDevice.swift # Core device data model
│ ├── NetworkInterface.swift # Network interface descriptor
│ └── ScanSession.swift # Historical scan snapshot
├── Services/
│ ├── NetworkScanner.swift # Main scan orchestrator (@MainActor ObservableObject)
│ ├── PingHelper.swift # ICMP ping sweep via /sbin/ping
│ ├── ARPResolver.swift # ARP cache queries via /usr/sbin/arp
│ ├── HostnameResolver.swift # DNS + mDNS reverse lookups
│ ├── BonjourResolver.swift # Bonjour/NetServiceBrowser hostname discovery
│ ├── PortScanner.swift # TCP port scanning via Network framework
│ ├── NetworkInterfaceManager.swift # Active interface enumeration
│ ├── VendorLookup.swift # IEEE OUI database for MAC → vendor mapping
│ └── Utilities.swift # Shared concurrency primitives (Counter, LockIsolated)
└── Views/
├── SidebarView.swift # Left panel: stats and scan history
├── DeviceListView.swift # Centre panel: sortable/searchable device table
├── DeviceDetailView.swift # Right panel: device info, port scanner, labels
├── ScanToolbarView.swift # Toolbar: network selector, scan/stop, export
├── NetworkSelectorView.swift # Auto/CIDR network picker
├── ExportView.swift # CSV/JSON export popover
└── SettingsView.swift # Preferences window
```
## 基于 Vibe Coding 构建
本项目使用 **vibe coding** 构建 —— 整个代码库是通过自然语言提示和迭代优化,与 AI(Anthropic 的 Claude 和 OpenAI 的 Codex)协作开发的。
## 许可证
LAN Scanner 是在 **GNU General Public License v3.0** 下发布的免费软件。
Copyright © 2026 Terrormixer3000
有关全文,请参阅 [LICENSE](LICENSE)。简而言之:您可以自由使用、修改和分发本软件,但任何衍生作品必须在相同的 GPL-3.0 条款下分发并包含源代码。
标签:ARP 解析, Bonjour, DNS 查询, Docker 部署, GUI, ICMP, MAC 地址查询, mDNS, Ping Sweep, Swift, SwiftUI, TCP 扫描, 厂商识别, 原生应用, 局域网, 局域网安全, 开源, 插件系统, 数据统计, 检测规则, 端口扫描, 网络安全, 网络扫描器, 网络资产发现, 网络运维, 设备发现, 设备管理, 防御绕过, 隐私保护