echowz/mdns-scanner
GitHub: echowz/mdns-scanner
基于 mDNS 协议的网络资产发现 CLI 工具,支持深度 Banner 识别与并发扫描,解决局域内服务可见性问题。
Stars: 0 | Forks: 0
# mDNS 网络资产测绘
基于 mDNS 协议的网络资产测绘 CLI 工具。扫描指定 IP 网段和端口范围,发现并输出 mDNS 服务资产信息,支持深度 banner 识别。
## 功能特性
- 🔍 **DNS-SD 服务发现** - 自动发现目标网段内的所有 mDNS 服务类型
- 📋 **深度 Banner 识别** - 解析 TXT 记录获取设备型号、固件版本、访问方式等详细信息
- 🌐 **完整资产信息** - 输出 IP、Port、Hostname、IPv4/IPv6、TTL、服务名等
- ⚡ **并发扫描** - 支持多 worker 并发,高效扫描大网段
- 📊 **多格式输出** - 支持 Text、JSON、YAML 格式,可导出到文件
## 安装
```
go build -o mdns-scanner .
```
## 使用方法
### 基本用法
```
# 扫描整个 /24 网段的全部端口
./mdns-scanner -c 192.168.1.0/24 -p 1-65535
# 扫描指定端口范围
./mdns-scanner -c 192.168.1.0/24 --port-min 1 --port-max 10000
# 详细模式 + JSON 输出到文件
./mdns-scanner -c 10.0.0.0/24 -p 1-65535 -v -f json -o results.json
# 调整超时和并发数
./mdns-scanner -c 192.168.1.0/24 -p 1-65535 -t 5 -w 100
```
### 参数说明
| 参数 | 缩写 | 默认值 | 说明 |
|------|------|--------|------|
| `--cidr` | `-c` | (必填) | 目标 CIDR 网段 |
| `--ports` | `-p` | - | 端口范围简写 (如 `1-65535`) |
| `--port-min` | - | `0` | 最小端口号 |
| `--port-max` | - | `65535` | 最大端口号 |
| `--timeout` | `-t` | `3` | 每主机超时(秒) |
| `--workers` | `-w` | `50` | 并发 worker 数 |
| `--output` | `-o` | - | 输出文件路径 |
| `--format` | `-f` | `text` | 输出格式: text/json/yaml |
| `--verbose` | `-v` | `false` | 详细日志模式 |
## 输出示例
```
Host: 192.168.1.100 (slw-nas.local)
------------------------------------------------------------
services:
9/tcp workstation:
Name=slw-nas [24:5e:be:69:a3:13]
IPv4=192.168.1.100
IPv6=fe80::265e:beff:fe69:a313
Hostname=slw-nas.local
TTL=10
5000/tcp http:
Name=slw-nas
IPv4=192.168.1.100
Hostname=slw-nas.local
TTL=10
path=/
445/tcp smb:
Name=slw-nas
IPv4=192.168.1.100
Hostname=slw-nas.local
TTL=10
5000/tcp qdiscover:
Name=slw-nas
IPv4=192.168.1.100
Hostname=slw-nas.local
TTL=10
accessType=https,accessPort=86,model=TS-X64,displayModel=TS-464C,fwVer=5.2.9,fwBuildNum=20260214
answers:
PTR:
_workstation._tcp.local
_http._tcp.local
_smb._tcp.local
_qdiscover._tcp.local
_device-info._tcp.local
_afpovertcp._tcp.local
```
## 技术原理
1. **DNS-SD 浏览** - 向目标 IP 发送 `_services._dns-sd._udp.local.` PTR 查询,发现所有注册的服务类型
2. **服务实例枚举** - 对每个服务类型发送 PTR 查询,获取具体服务实例
3. **实例解析** - 对每个实例发送 SRV/TXT/A/AAAA 查询,获取完整信息
4. **深度 Banner** - 解析 TXT 记录中的键值对,提取设备型号、固件版本等深度信息
## 依赖
- [miekg/dns](https://github.com/miekg/dns) - DNS 协议库
- [spf13/cobra](https://github.com/spf13/cobra) - CLI 框架
标签:API安全, Banner识别, DNS-SD, EVTX分析, Go语言, IPv4, IPv6, JSON输出, Linux安全, mDNS, PowerShell, TTL, TXT记录解析, YAML输出, 固件版本, 多格式输出, 局域网扫描, 并发扫描, 广播协议, 数据泄露防护, 数据统计, 文本输出, 日志审计, 服务发现, 程序破解, 端口扫描, 网段扫描, 网络探测, 网络资产测绘, 计算机应急响应小组, 设备识别, 资产清单