Findphone:通过信号强度定位附近的蓝牙设备
摘要
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 | 较远,或有遮挡 |
| 更低 | 非常远,或被屏蔽 |
信号强度只是距离的粗略近似。金属、墙壁和人体会严重衰减信号,因此两米外文件柜里的设备,其读数可能与开阔空间中十五米外的设备相同。移动时相信趋势,而不是任何单一数值。
工作原理
三个数据源按质量从高到低共同提供一个读数:
- GATT 链接 — 通过 BLE 连接到设备后,
readRSSI()大约每秒返回三次新测量值。这是最好的数据源。 - BLE 广播 — 被动观察。Apple 设备大约每十五分钟轮换一次广播地址,并且只在偶尔的数据包中包含设备名称,因此这个数据源很稀疏。
- 经典链接 RSSI — 通过
system_profiler SPBluetoothDataType读取,以已配对设备的稳定公共地址为键。
数据源 3 有一个值得注意的陷阱:macOS 每三到十二秒才刷新一次该值,期间会提供缓存数字。更快地轮询不会获得更多信息。在以 0.4 秒间隔进行的 112 次轮询中,每次轮询都返回了一个值,但相同的值会连续重复 8 到 31 次。因此,该工具仅在值实际变化时才计数一次测量,这就是为什么报告的测量次数远低于轮询频率——而且很诚实。
权限
需要为运行它的终端授予蓝牙访问权限,路径为“系统设置”>“隐私与安全性”>“蓝牙”。如果缺失,它会明确提示。
限制
- 无法让设备响铃。没有“查找”就无法做到这一点。
- 无法提供方向。单个无线电只能提供距离,不能提供方向。
- 只能找到蓝牙已开启且在范围内的设备,室内大约 10-20 米,穿过墙壁时距离会短得多。
相似文章
在办公室丢了手机,Claude 建议跟踪蓝牙信号强度
作者丢了手机,用 Claude 生成了 findphone,一个通过信号强度跟踪附近蓝牙设备的命令行工具,展示了 AI 如何快速创建自定义工具。
适用于苹果和安卓手机的最佳蓝牙追踪器
一份关于寻找丢失物品的最佳蓝牙追踪器的全面指南,涵盖iPhone(AirTag)、安卓(Tile)以及Pebblebee等替代品的首选推荐。
@rohanpaul_ai: 关于Claude的疯狂故事,他在工作中丢了手机,因为公司禁用了"Find My Phone",他无法使用……
一个人在Claude(AI助手)的帮助下编写了一个小程序,通过测量蓝牙信号强度来定位丢失的手机,因为公司政策禁用了"Find My Phone"。
Megaphone
Megaphone 是一款开源的 Mac 听写应用,完全在设备上运行,保护隐私。
@IndieDevHailey: 这个开源项目,让你的 iOS 随便改位置! wloc 一键把 iPhone 网络定位改到全世界任何地方(香港、东京、纽约、巴黎……随便选)! - 地图上一点就行,无需手动输经纬度 - 支持 Surge / Quantumult X / L…
wloc 是一个开源工具,允许 iOS 用户通过地图选点一键更改网络定位到世界各地,支持多种代理应用,无需越狱。