【免费下载链接】bluehood
Monitor your local neighbourhood's bluetooth activity
Bluehood 是一款被动监测周边蓝牙设备的开源工具,它能通过共现窗口相关性算法自动发现总是"形影不离"一起出现的设备——比如你的手机和智能手表。本文带你拆解这套相关性算法的运作原理、关键参数与它背后的追踪含义,帮助新手理解蓝牙隐私监测的核心机制。
Bluehood 是什么:被动监测你的蓝牙邻居
想象你家附近飘着成百上千个蓝牙信号:邻居的手机、路过的车辆钥匙、送货员的智能设备、楼下的智能门锁……它们大多不会主动跟你"打招呼",却一直在广播自己的存在。
Bluehood 就是这样一个旁观者。它不连接、不配对、不发起任何交互,只是持续地"监听"这些广播,并把每一次"看到"记录为一条带时间戳的sighting( sightings sighting)。正因如此,它能悄悄拼出谁在什么时间、以多高的频率出现在这片区域。
Bluehood 主仪表盘:左侧是识别统计,右侧是可过滤搜索的设备列表,实时显示每台设备的类型、厂商与最近一次出现
这套工具的诞生,源自对WhisperPair 漏洞(CVE-2025-36911)的关注。它提醒我们:即便什么都不做,仅靠蓝牙元数据就足以勾勒出一个人的生活轨迹。项目本身也强调这是一件教育性质的隐私意识工具,而非攻击武器。核心扫描与识别逻辑位于 bluehood/scanner.py,数据则统一落库到 SQLite。
什么是"形影不离":设备相关性到底在找什么
单台设备能告诉我们"这里有一台 Apple 手机",但真正有意思的是设备之间的关系。Bluehood 的**设备相关性(Device Correlation)**功能,专门用来找出那些"总是同时出现"的设备组合。典型场景有三类:
- 同一人的设备:手机 + 智能手表 + 耳机,走到哪跟到哪。
- 结伴出行的人:两人各自的手机总在同一时间窗内出现。
- 共享日程的设备:比如公司里同时上下班的几台设备。
问题在于:怎么从几千条零散的时间戳里,自动识别出这种"绑定关系",而不是靠人眼一条条比对?这就是共现窗口相关性算法登场的地方。
共现窗口相关性算法:三步拆解运作原理
这套算法的核心实现是get_correlated_devices函数,位于 bluehood/db.py。它并不复杂,却非常巧妙——整个过程可以拆成三步。
第一步:圈定分析范围,划定"同框"时间窗口
算法先取出目标设备(比如那台手机)在过去 N 天(默认 30 天)的所有出现记录。然后对每一条记录,以它为圆心,向前后各扩展一个时间窗口(默认 ±5 分钟),去问:"这段时间里,还有哪些别的设备也被扫到了?"
用一段极简的 SQL 逻辑就能表达"同框"这个动作:
s2.timestamp BETWEEN datetime(s1.timestamp, '-5 minutes') AND datetime(s1.timestamp, '+5 minutes')s1是目标设备,s2是其它设备。只要某台设备在目标设备出现的窗口内"现身",就记一次共现(co-occurrence)。这一步的巧妙之处是一次 SQL 自连接就扫描完所有组合,无需在 Python 里循环比对。
第二步:统计共现次数,并设一道"防噪声"门槛
每台候选设备被统计出总的共现次数后,算法会加上一道关键过滤:
HAVING co_occurrences >= 2至少共现 2 次才被视为"相关"。这一条极其重要——它把偶发的巧合(比如外卖小哥恰好路过一次)挡在门外,只留下反复出现的稳定关系。最终结果还会按共现次数从高到低排序,最多返回前 20 台(LIMIT 20),避免噪声淹没重点。
第三步:计算 0–100 的相关性分数
最后,把"共现强度"换算成一个直观的百分比分数:
相关性分数 = min(100, 共现次数 ÷ 目标设备总出现次数 × 100)举个直观的例子:那台手机 30 天内一共被记录100 次,而某智能手表在其中的80 次里都出现在 ±5 分钟窗口内,那么它的相关性分数就是80%。分数越接近 100,说明两者"绑定"得越紧。这里的min(100, …)是封顶保护——因为一个窗口内同一设备可能出现多次,分数理论上可能超标,封顶后保证落在 0–100 的合理区间。
关键参数速查表:如何调出你想要的结果
相关性结果对参数非常敏感,调整它们就像调节"灵敏度"。这些默认值定义在 bluehood/db.py 的函数签名中,也可通过 Web API 覆盖:
| 参数 | 默认值 | 作用 | 调大/调小的影响 |
|---|---|---|---|
days | 30 | 分析的时间跨度 | 调大覆盖更长周期,可能稀释近期强关系 |
window | 5 分钟 | "同框"窗口半径 | 调大更易捕获慢节奏共现,但会引入无关设备 |
| 共现门槛 | ≥ 2 次 | 防噪声底线 | 调高可筛出更"铁"的绑定关系 |
| 返回数量 | 前 20 名 | 结果集上限 | 只影响展示,不改变计算 |
经验法则:想看"铁杆绑定"(如同一人设备),把window调小、days调小,分数会更有说服力;想找"偶尔结伴"的关系,则适当放宽窗口。
在 Web 仪表盘里查看相关设备
算完的结果并不会藏在数据库里。当你点击任意设备打开详情弹窗时,Bluehood 会向后端发起一次请求拉取相关设备:
GET /api/device/{mac}/correlation?days=30对应实现见 bluehood/webapp/server.py。前端拿到数据后,取最相关的前 5 台,为每一台画一条随分数变化的红色进度条——一眼就能看出哪台设备"如影随形"。这段渲染逻辑在 bluehood/webapp/templates.py。
Bluehood 项目能力页:展示双模扫描、厂商 OUI 查找、模式分析等核心能力,直观呈现其追踪潜力
追踪含义:这套算法为何值得警惕
相关性算法本身只是几行 SQL,但它揭示的隐私风险却不容小觑:
- 无需接触即可关联身份:只要手机和手表"绑定",攻击者就找到了一个稳定的跟踪锚点——换信号、换 IP 都无用。
- 拼出生活作息:结合 bluehood/patterns.py 里的模式分析,共现设备的时间线能还原出"几点遛狗、几点到家、访客何时到来"。
- 被动即威慑:正因为监测方什么都不用做,普通用户几乎无从察觉自己正被"画像"。
这就是为什么 Bluehood 反复强调:它是教育工具,请遵守当地隐私法规,切勿用于未经授权的人员监控。
快速上手:5 分钟跑起 Bluehood 监测
想让这套算法在你的环境里真正跑起来,最快的方式是 Docker。唯一的前置条件是宿主机装好BlueZ(Linux 蓝牙栈),容器本身不含它:
# 宿主机准备(Debian / Ubuntu) sudo apt install bluez sudo systemctl enable --now bluetooth # 启动 Bluehood(仓库内已提供 docker-compose.yml) docker compose up -d启动后访问http://localhost:8080即可打开仪表盘。硬件上需要一块支持BLE Central 角色的蓝牙适配器(蓝牙 4.0+);更多环境参数与适配器配置见 bluehood/config.py。数据默认存于~/.local/share/bluehood/bluehood.db,可通过BLUEHOOD_DATA_DIR环境变量自定义位置。
小结
Bluehood 的共现窗口相关性算法用"时间窗 + 共现计数 + 相关性分数"三步,从海量 sightings 里精准揪出"形影不离"的设备组合。它没有花哨的模型,却道破了蓝牙隐私监测最本质的一点:元数据的被动关联,往往比任何主动探测都更可怕。理解它,既是读懂一款开源工具,也是读懂我们身处的蓝牙世界有多"透明"。
【免费下载链接】bluehood
Monitor your local neighbourhood's bluetooth activity
相关推荐
大麦抢票终极指南:5分钟实现演唱会门票自动化抢购
大麦抢票终极指南:5分钟实现演唱会门票自动化抢购 还在为心仪明星演唱会门票秒空而烦恼吗?大麦自动抢票项目为你提供了一套完整的解决方案,让你告别手动抢票的焦虑和失
GUI 自动化RPA揭秘GitHub Docs搜索算法:从精准匹配到智能排序的完整指南
揭秘GitHub Docs搜索算法:从精准匹配到智能排序的完整指南 GitHub Docs搜索算法是帮助开发者快速找到所需文档的核心引擎,它通过精准匹配与智能排
文档教程知识库终极指南:DocsGPT相关性排序算法如何实现精准文档匹配
终极指南:DocsGPT相关性排序算法如何实现精准文档匹配 DocsGPT是一款强大的私有AI平台,专为智能代理、助手和企业搜索打造。其核心功能之一是通过先进的
人工智能AI 应用AI AgentRAG后端前端MCP 服务深度研究
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考