Findphone:通过信号强度定位附近的蓝牙设备

Hacker News Top 工具

摘要

findphone 是一个 macOS 命令行工具,可通过信号强度定位附近的蓝牙设备,在“查找”不可用时(例如在 MDM 管理下)很有用。它提供扫描(survey)和追踪(hunt)模式、可选的声音反馈以及地址脱敏等隐私功能。

暂无内容
查看原文
查看缓存全文

缓存时间: 2026/08/10 14:35

ben-z/findphone

来源:https://github.com/ben-z/findphone

findphone

通过信号强度从命令行定位附近的蓝牙设备。

专为“查找”不可用的情况而构建——例如当设备被 MDM 禁用该功能时——但设备仍在蓝牙范围内,你只需要知道它在房间的哪个角落。

安装

从 Releases(https://github.com/ben-z/findphone/releases)获取通用二进制文件:

sh tar -xzf findphone-macos-universal.tar.gz xattr -dr com.apple.quarantine findphone ./findphone --help

它未签名,因此 macOS 会在下载时将其隔离;xattr 行可清除该隔离标记。需要 macOS 13 或更高版本。

构建

sh swift build -c release cp .build/release/findphone ~/bin/findphone

需要 Xcode 命令行工具提供的 Swift 工具链。无依赖。如需 CI 发布的通用 arm64 + x86_64 二进制文件:

sh ./scripts/build-universal.sh dist

使用

sh findphone # 扫描模式:按信号列出附近所有 Apple 手持设备 findphone iphone # 追踪模式:按名称追踪一台设备(不区分大小写) findphone --list # 已配对设备及其地址

在追踪模式下添加 --sound,靠近时点击声会加速,就像停车传感器一样——在房间范围内大约每秒一次,当信号接近约 -50 dBm 时变为急促的蜂鸣声,这大约相当于笔记本电脑放在手机上的距离。这样你可以用耳朵扫过整个房间,而不必盯着屏幕。当信号不再更新时点击声会停止,因此静音意味着没有信号而不是没有设备。

这不是盖革计数器,尽管听起来有点像。盖革计数器每检测到一个粒子就点击一次,其速率本身就是测量值;而这里的速率是根据平滑后的信号计算出来的。数据包按固定的 0.3 秒轮询定时器到达,因此它们的到达速率与距离几乎没有关系。

如果你在录屏,请添加 --redact。它会屏蔽蓝牙地址,并在扫描模式下将发现的设备名称替换为设备类型,因为这些名称不一定属于你。公共地址是稳定的硬件标识符,不像 BLE 广播地址那样会轮换,因此值得将其排除在视频之外。

有两项内容会刻意保持可见:你在追踪模式中输入的设备名称,以及 --list 中的名称,因为选择目标需要读取它们。即使使用 --redact--list 也不适合拍摄。

慢慢走动并观察进度条。读数是信号强度(dBm),数值为负,越接近零表示越近:

dBm大致含义
-45 及以上一臂之遥
-60同一张桌子
-72同一个房间
-85较远,或有遮挡
更低非常远,或被屏蔽

信号强度只是距离的粗略近似。金属、墙壁和人体会严重衰减信号,因此两米外文件柜里的设备,其读数可能与开阔空间中十五米外的设备相同。移动时相信趋势,而不是任何单一数值。

工作原理

三个数据源按质量从高到低共同提供一个读数:

  1. GATT 链接 — 通过 BLE 连接到设备后,readRSSI() 大约每秒返回三次新测量值。这是最好的数据源。
  2. BLE 广播 — 被动观察。Apple 设备大约每十五分钟轮换一次广播地址,并且只在偶尔的数据包中包含设备名称,因此这个数据源很稀疏。
  3. 经典链接 RSSI — 通过 system_profiler SPBluetoothDataType 读取,以已配对设备的稳定公共地址为键。

数据源 3 有一个值得注意的陷阱:macOS 每三到十二秒才刷新一次该值,期间会提供缓存数字。更快地轮询不会获得更多信息。在以 0.4 秒间隔进行的 112 次轮询中,每次轮询都返回了一个值,但相同的值会连续重复 8 到 31 次。因此,该工具仅在值实际变化时才计数一次测量,这就是为什么报告的测量次数远低于轮询频率——而且很诚实。

权限

需要为运行它的终端授予蓝牙访问权限,路径为“系统设置”>“隐私与安全性”>“蓝牙”。如果缺失,它会明确提示。

限制

  • 无法让设备响铃。没有“查找”就无法做到这一点。
  • 无法提供方向。单个无线电只能提供距离,不能提供方向。
  • 只能找到蓝牙已开启且在范围内的设备,室内大约 10-20 米,穿过墙壁时距离会短得多。

相似文章

Megaphone

Product Hunt

Megaphone 是一款开源的 Mac 听写应用,完全在设备上运行,保护隐私。