mdnsmap 是一个 Golang 编写的网站/服务测绘 CLI,面向 mDNS / DNS-SD 资产发现。
它可以输入 IPv4 网段和端口范围,主动探测 mDNS 响应,解析 PTR/SRV/TXT/A/AAAA 记录,并输出资产的深度 banner:
ipporthostservicesNameIPv4/IPv6HostnameTTL- TXT 深度字段,例如
path=/、model=...、fwVer=...、fwBuildNum=... answers.PTR服务清单
说明:mDNS 标准端口是 UDP/5353。本工具的
-ports表示“输出/过滤服务的业务端口范围”,例如 mDNS banner 中 SRV 记录声明的9/tcp、445/tcp、548/tcp、5000/tcp。
go build -o mdnsmap ./cmd/mdnsmap./mdnsmap -cidr 192.168.1.0/24 -ports 9,445,548,5000
./mdnsmap -cidr 192.168.1.10 -ports all
./mdnsmap -cidr 192.168.1.0/24 -ports 5000 -service _qdiscover._tcp.local
./mdnsmap -cidr 192.168.1.0/24 -ports 1-10000 -json常用参数:
-cidr IPv4 网段或单 IP,例如 192.168.1.0/24
-ports 端口列表/范围:9,445,548,5000、1-10000、all
-timeout 每轮等待响应时间,例如 3s、1500ms
-retries 重试次数
-concurrency 单播主动探测并发数
-service 额外查询的 DNS-SD 服务类型,可重复
-json JSON 输出
-all-mdns 输出没有匹配端口的 PTR-only 服务
-active 是否对 CIDR 中每个 IP 做单播 mDNS 探测,默认 true
-qu 设置 QU bit 请求单播响应,默认 true
ip: 192.168.1.10
host: slw-nas.local
port: 9
services:
9/tcp workstation:
Name=slw-nas [24:5e:be:69:a3:13]
IPv4=192.168.1.10
IPv6=fe80::265e:beff:fe69:a313
Hostname=slw-nas.local
TTL=10
5000/tcp http:
Name=slw-nas
IPv4=192.168.1.10
IPv6=fe80::265e:beff:fe69:a313
Hostname=slw-nas.local
TTL=10
path=/
445/tcp smb:
Name=slw-nas
IPv4=192.168.1.10
IPv6=fe80::265e:beff:fe69:a313
Hostname=slw-nas.local
TTL=10
5000/tcp qdiscover:
Name=slw-nas
IPv4=192.168.1.10
IPv6=fe80::265e:beff:fe69:a313
Hostname=slw-nas.local
TTL=10
accessType=https,accessPort=86,model=TS-X64,displayModel=TS-464C,fwVer=5.2.9,fwBuildNum=20260214
device-info:
Name=slw-nas(AFP)
IPv4=192.168.1.10
TTL=10
model=Xserve
548/tcp afpovertcp:
Name=slw-nas(AFP)
IPv4=192.168.1.10
IPv6=fe80::265e:beff:fe69:a313
Hostname=slw-nas.local
TTL=10
answers:
PTR:
_afpovertcp._tcp.local
_device-info._tcp.local
_http._tcp.local
_qdiscover._tcp.local
_smb._tcp.local
_workstation._tcp.local
- 发送
_services._dns-sd._udp.localPTR 查询获取设备公布的服务类型。 - 查询常见服务类型:
_workstation、_http、_smb、_qdiscover、_device-info、_afpovertcp等。 - 解析:
- PTR:服务类型和服务实例名
- SRV:端口、协议、hostname
- TXT:深度 banner 字段
- A/AAAA:IPv4/IPv6 地址
- 按用户输入端口范围过滤 SRV 端口,聚合为资产输出。
项目内置了一个深度 banner 聚合单元测试,覆盖题目示例中的字段深度:
go test ./...