Whosthere 核心原理揭秘:mDNS、SSDP 与 ARP 三大发现机制如何协同工作
Whosthere 核心原理揭秘mDNS、SSDP 与 ARP 三大发现机制如何协同工作【免费下载链接】whosthereLocal Area Network discovery tool with an interactive Terminal User Interface (TUI) written in Go. Discover, explore, and understand your LAN in an intuitive way. Knock Knock.. whos there? 项目地址: https://gitcode.com/gh_mirrors/wh/whosthereWhosthere 是一款用 Go 编写的开源局域网发现工具通过 mDNS、SSDP 和 ARP 缓存三种无特权扫描机制并发探测网段内的所有设备并自动通过 OUI 查询显示设备厂商。本文将带你深入了解它的三大发现机制是如何协同工作的。总体架构一个指挥官协调三路侦察兵Whosthere 的核心是发现引擎 Engine它像一个指挥官同时调度多个扫描器Scanner和一个 ARP 填充器Sweeper。每个扫描器独立并发运行把发现的设备发送到同一个通道引擎再按IP 地址去重合并。默认节奏如下定义在 engine.go机制默认行为扫描周期每 20 秒一轮每轮最长 10 秒子网清扫每 5 分钟触发一次最长 20 秒扫描器mDNS SSDP ARP 缓存全部默认启用引擎的并发调度逻辑见 performScan每个扫描器一个 goroutine结果汇入共享通道互不阻塞。mDNS让愿意自我介绍的设备现身mDNS多播 DNS扫描器位于 pkg/discovery/scanners/mdns/基于 hashicorp/mdns 库实现。它的工作原理很简单向网段发送一条_services._dns-sd._udp的多播查询任何支持 mDNS 的服务AirPlay、Chromecast、打印服务、NAS 等都会主动应答。能拿到什么✅ 设备 IP 和设备名称如My-MacBook.local✅ 设备提供的所有服务列表会作为附加数据展示❌ 拿不到 MAC 地址擅长发现苹果生态设备、投屏设备、NAS、带投屏功能的路由器。查询结果会被过滤只保留属于当前接口网段的 IPv4 地址见 acceptsIPv4。SSDP智能家电的点名广播SSDP简单服务发现协议是 UPnP 标准的一部分扫描器位于 pkg/discovery/scanners/ssdp/。它的流程分两步见 sendSearch广播点名向固定多播地址239.255.255.250:1900发送一条M-SEARCH * HTTP/1.1请求相当于喊一声网段里所有 UPnP 设备请举手收集应答设备返回的响应里带有LOCATION设备描述 XML 地址和SERVER头扫描器解析出 IP 和服务信息能拿到什么✅ 设备 IP 和服务器标识如Linux UPnP/1.0❌ 同样没有 MAC 地址擅长发现智能电视、机顶盒、网络打印机、智能音箱、家庭自动化设备——这些设备大多只实现了 UPnP 而没有 mDNS。 正因为 mDNS 和 SSDP 覆盖面不同Whosthere 才两者都要一个抓苹果系和网络服务一个抓智能家电系。ARP 缓存不发消息只查考勤第三个扫描器思路完全不同它不发送任何数据包而是直接读取操作系统的 ARP 缓存表pkg/discovery/scanners/arp/。ARP地址解析协议是局域网通信的基础设备之间通过 IP 通信但二层实际认的是 MAC 地址。每次本机要和某 IP 通信OS 都会自动执行 ARP 解析并把IP ↔ MAC映射存入缓存。ARP 扫描器每 250 毫秒轮询一次系统缓存Scan跨 Linux/macOS/Windows 读取各自的 ARP 表顺便过滤掉多播、广播等无效条目。能拿到什么✅ 设备 IP MAC 地址这是其他两个扫描器都给不了的❌ 拿不到设备名称短板也很明显缓存是被动积累的——设备最近没和你在网上说句话缓存里就没有它。所以才需要下一位主角登场。Sweeper无特权下的敲门秘诀 既然发送原始 ARP 请求需要 root 权限Whosthere 坚持无特权运行它如何解决缓存稀疏的问题答案是 Sweeper——项目签名语Knock Knock.. whos there?的由来。它的巧妙之处在于借力打力生成目标子网内所有 IP 的列表跳过本机并发 200 路向每个 IP 的常见端口敲门UDP 端口9、33434各发送一个字节TCP 端口80、443尝试连接300ms 超时连接成不成功无所谓——只要目标是活设备OS 为了发包就会自动执行 ARP 解析把IP ↔ MAC写进缓存随后 ARP 扫描器查考勤时这些新条目就被读出来了。触发逻辑在 sendARPTarget每 5 分钟轮一次可配置。这种以应用层流量触发协议层行为的设计是完全不需要提权就能填充 ARP 缓存的关键。三源合一设备合并与 OUI 厂商识别三路侦察兵汇报回来后引擎在 processDevice 中按 IP 做合并同一 IP 的多条记录调用 Device.Merge 互补字段mDNS 提供名称SSDP 提供服务信息ARP 提供 MAC每个设备会记录自己是被哪些源发现的sources在 TUI 中可以看到若设备有 MAC 但缺厂商信息引擎会用内置的 OUI 数据库 查询 MAC 前缀自动填上制造商标识如小米Apple最终你在 TUI 里看到的每一行设备都是三个机制叠加补全后的完整画像192.168.1.50 | AA:BB:CC:11:22:33 | 小米 | My-Phone.local | sources: mdns arp-cache协同效果一览mDNSSSDPARP 缓存工作方式主动多播查询主动多播点名被动读取系统缓存得到 IP✅✅✅得到 MAC❌❌✅得到名称/服务✅✅❌需要 Sweeper 配合否否是典型目标AirPlay/Chromecast/NAS电视/音箱/打印机几乎所有设备一句话总结mDNS 和 SSDP 负责点名要名字Sweeper 负责挨家敲门ARP 缓存负责登记花名册——三者并发互补让 Whosthere 无需 root 就能画出一幅尽可能完整的局域网设备地图。延伸阅读引擎与扫描调度pkg/discovery/engine.go扫描器统一接口定义Scanner/Sweeperpkg/discovery/engine.go子网解析工具pkg/discovery/internal/subnet/subnet.go端口扫描器发现设备后进一步探测服务pkg/discovery/port_scanner.go配置各扫描器开关internal/core/config/config.go【免费下载链接】whosthereLocal Area Network discovery tool with an interactive Terminal User Interface (TUI) written in Go. Discover, explore, and understand your LAN in an intuitive way. Knock Knock.. whos there? 项目地址: https://gitcode.com/gh_mirrors/wh/whosthere创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

基于监督学习的Web入侵检测系统:从数据预处理到模型部署全方案解析

基于监督学习的Web入侵检测系统:从数据预处理到模型部署全方案解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 6:28:26 阅读更多 →
基于YOLOv9的监控场景手机检测:从数据标注到部署的完整实践

基于YOLOv9的监控场景手机检测:从数据标注到部署的完整实践

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 6:28:26 阅读更多 →
Codex 配置避坑指南:401 报错、配置不生效与模型不支持排查

Codex 配置避坑指南:401 报错、配置不生效与模型不支持排查

1. 从一次深夜排障说起:Codex 配置问题到底卡在哪凌晨一点半,群里有人甩了一张截图,红字写着unexpected status 401 unauthorized: {"code":"invalid_api_key","message":"inv..."},紧接…

2026/10/4 6:27:25 阅读更多 →

最新新闻

Claude Code插件市场配置全攻略:Skills、MCP与第三方模型接入

Claude Code插件市场配置全攻略:Skills、MCP与第三方模型接入

先说个真实经历。上个月我想给本地的Claude Code加一个批量文件处理的技能,去网上逛了一圈,资料要么是课程广告,要么是论坛里一句“我装好了,你试试”,没找到一篇能把安装、配置、排错串起来的完整流程。后来我自己把C…

2026/10/4 7:07:47 阅读更多 →
ChatGLM3 对话格式全解析:基于 System / User / Assistant / Observation 的统一提示词规范

ChatGLM3 对话格式全解析:基于 System / User / Assistant / Observation 的统一提示词规范

大模型人工智能微调本地部署AI AgentRAG 【免费下载链接】ChatGLM3 ChatGLM3 series: Open Bilingual Chat LLMs | 开源双语对话语言模型 项目地址: https://gitcode.com/gh_mirrors/ch/ChatGLM3 点击查看 免费下载 本篇文章完整解读 ChatGLM3 系列开源模型所采用的…

2026/10/4 7:07:47 阅读更多 →
C#图像处理入门:用OpenCvSharp实现图片读取、灰度化与保存

C#图像处理入门:用OpenCvSharp实现图片读取、灰度化与保存

作为一个玩过Python版OpenCV、又因为工作原因切到C#生态的开发者,我第一次接触OpenCvSharp的时候其实挺感慨的——C#这边终于有一个“用起来像原生OpenCV”的库了。很多人觉得C#做图像处理很别扭,要么调用麻烦,要么性能不理想,但O…

2026/10/4 7:07:47 阅读更多 →
Win10 64位安装LightTools 8.4完整教程与常见问题排查

Win10 64位安装LightTools 8.4完整教程与常见问题排查

Light Tools 8.4,做照明光学和背光设计的人应该都绕不开这个名字。它是Synopsys旗下用于照明设计、光学仿真和光度分析的重量级工具,在LED照明、车载灯具、显示屏背光模组这些领域几乎算得上标配。我自己在Win10 64位系统上装过好几版LightTools&#xf…

2026/10/4 7:07:47 阅读更多 →
CPU和内存显示修改:注册表、SMBIOS与注入工具完全指南

CPU和内存显示修改:注册表、SMBIOS与注入工具完全指南

简介:这份PDF教程面向希望自定义Windows系统属性显示信息的电脑爱好者和装机维护人员,系统讲解如何修改“我的电脑”右键属性中常规选项的CPU型号、内存容量等硬件信息,并延伸到DXDiag诊断工具、设备管理器中的相关显示,使系统属性…

2026/10/4 7:07:47 阅读更多 →
《三国演义》人物出场统计:Python中文文本挖掘实战

《三国演义》人物出场统计:Python中文文本挖掘实战

最近在整理中文文本挖掘的入门案例时,手边一直放着一个名为threekingdoms.txt的文件——《三国演义》的中文纯文本。很多人都拿它当过练手语料,最经典的需求就是“人物出场统计”:把三国人物按出现次数排个序,看看谁才是全书真正的…

2026/10/4 7:06:46 阅读更多 →

日新闻

KT148A语音芯片外挂8002D功放的工程实践指南

KT148A语音芯片外挂8002D功放的工程实践指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 1:00:58 阅读更多 →
LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 1:00:58 阅读更多 →
ARM架构深度解析:从RISC设计理念到交叉编译实战

ARM架构深度解析:从RISC设计理念到交叉编译实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 1:00:58 阅读更多 →

周新闻

KT148A语音芯片外挂8002D功放的工程实践指南

KT148A语音芯片外挂8002D功放的工程实践指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 1:00:58 阅读更多 →
LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 1:00:58 阅读更多 →
ARM架构深度解析:从RISC设计理念到交叉编译实战

ARM架构深度解析:从RISC设计理念到交叉编译实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 1:00:58 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/2 10:36:31 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/3 9:42:35 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/3 9:42:36 阅读更多 →