
お住まいの地域のBluetoothアクティビティを監視します
Bluetooth近隣 - 周囲のBLEデバイスを追跡し、トラフィックパターンを分析します。
警告: アルファソフトウェア
このプロジェクトは開発初期段階であり、本番環境での使用には適していません。機能は予告なく変更、破損、削除される場合があります。自己責任で使用してください。収集されたデータは実験的なものとして扱ってください。
フィルタリング、検索、リアルタイム統計を備えたデバイス一覧メインダッシュボード
タブ付き設定ページ — アラート、運用、グループ、セキュリティ
プロジェクト情報と機能概要を表示するインテルページ
このプロジェクトはWhisperPair脆弱性 (CVE-2025-36911)に触発されました。これはBluetoothデバイスのプライバシーリスクを浮き彫りにしました。
私たちの周りには常に何千ものBluetoothデバイスが存在します:スマートフォン、車、テレビ、ヘッドホン、補聴器、配送車両など。Bluehoodは、これらのデバイスを受動的に検出し、その存在パターンを観察することがいかに簡単かを示しています。
十分なデータがあれば、以下のようなことが可能になる可能性があります:
このメタデータは、デバイスと積極的にやり取りしなくても驚くほど個人的な情報を明らかにすることができます。
BluehoodはBluetoothのプライバシーについて認識を高めるための教育ツールです。 週末プロジェクトですが、その影響について考える価値があります。
BluehoodはBluetoothスキャナーで、以下のことを行います:
?で表示)前提条件 — Linuxホストのみ
BluehoodはLinuxのBluetoothスタックBlueZを介してBluetoothアダプターと通信します。コンテナを起動する前にホストにBlueZがインストールされ実行されている必要があります — Dockerイメージ自体には含まれていません。
# Debian / Ubuntu(Ubuntu Server含む) sudo apt install bluez sudo systemctl enable --now bluetooth # Arch Linux sudo pacman -S bluez bluez-utils sudo systemctl enable --now bluetoothホストにBlueZがない場合、以下のようなエラーが表示されます:
BLE scan error: [org.freedesktop.DBus.Error.ServiceUnknown] The name org.bluez was not provided by any .service files
# docker-compose.ymlを作成するか、このリポジトリからダウンロードします
# その後、Docker Composeで起動
docker compose up -d
# ログを表示
docker compose logs -f
DockerイメージはGitHub Container Registryで利用可能です:
ghcr.io/dannymcc/bluehood:latest
Webダッシュボードは http://localhost:8080 で利用可能になります。
sudo apt install bluez && sudo systemctl enable --now bluetooth)注意:古いアダプター(Bluetooth 2.x/3.x)はBLEスキャンをサポートしていません。アダプターにBLE Centralロールのサポートがない場合、次の表示が出ます:
No Bluetooth adapters with BLE 'central' role found。
注意:DockerはBluetoothアクセスのため、特権モードでホストネットワーキングを使用して実行されます。これはBLEスキャンに必要です。
Bluehoodには BLE対応Bluetoothアダプター(Bluetooth 4.0以降) で Central ロールをサポートするものが必要です。古いBluetooth 2.x/3.xアダプターはBLEスキャンをサポートしておらず、動作しません。
アダプターがBLE Centralロールをサポートしていない場合、Bluehoodは次のエラーで終了します:
No Bluetooth adapters with BLE 'central' role found
アダプターの機能は bluetoothctl show で確認し、サポートされるロールに central があるか確認してください。
# システム依存関係のインストール(Arch Linux)
sudo pacman -S bluez bluez-utils python-pip
# システム依存関係のインストール(Debian/Ubuntu)
sudo apt install bluez python3-pip
# クローンしてインストール
git clone https://github.com/dannymcc/bluehood.git
cd bluehood
pip install -e .
Bluetoothスキャンには昇格された権限が必要です。以下のいずれかを選択してください:
rootとして実行(最も簡単):
sudo bluehood
Pythonにケーパビリティを付与:
sudo setcap 'cap_net_admin,cap_net_raw+eip' $(readlink -f $(which python))
bluehood
systemdサービスを使用(常時稼働に推奨):
sudo cp bluehood.service /etc/systemd/system/
sudo systemctl daemon-reload
sudo systemctl enable --now bluehood
BluehoodはDockerなしでmacOSでネイティブに動作します。macOSはBlueZの代わりにCoreBluetoothを使用しますが、bleak ライブラリが自動的に処理します。
# リポジトリをクローン
git clone https://github.com/dannymcc/bluehood.git
cd bluehood
# 仮想環境を作成
python3 -m venv .venv
source .venv/bin/activate
# インストール
pip install -e .
# 実行
python -m bluehood.daemon
Webダッシュボードは http://localhost:8080 で利用可能になります。
注意:初回実行時、macOSはBluetoothアクセスを許可するようプロンプトを表示します。スキャンを機能させるにはこの許可を付与する必要があります。
# Webダッシュボードを起動(デフォルトポート8080)
bluehood
# 別のポートを指定
bluehood --port 9000
# 特定のBluetoothアダプターを使用
bluehood --adapter hci1
# BLEとクラシックスキャンに別々のアダプターを使用(同時実行)
bluehood --adapter hci0 --classic-adapter hci1
# 利用可能なアダプターを一覧表示
bluehood --list-adapters
# Webダッシュボードを無効にする(スキャンのみ)
bluehood --no-web
# Prometheusメトリクスエクスポーターをポート9199で有効にする
bluehood --metrics-port 9199
ダッシュボードは以下を提供します:
/settings#operations)サイドバーからスクリーンショットモードを有効にすると、スクリーンショットを共有する前に機密データを難読化します:
AA:BB:XX:XX:XX:XX)Da******)Bluehoodは無料のオープンソース通知サービスntfy.shを介してプッシュ通知を送信できます。
bluehood-myname-alerts)データは ~/.local/share/bluehood/bluehood.db(SQLite)に保存されます。
環境変数で場所を上書きします:
BLUEHOOD_DATA_DIR - データファイルのディレクトリBLUEHOOD_DB_PATH - データベースファイルへの直接パス注意:ハートビートとプルーニングの設定は、Web UI(設定 > 運用)または環境変数から設定できます。GUIの値が環境変数より優先されます。
Bluehoodは複数のシグナルを使用してデバイスを分類します(優先順位順):
最新のデバイスはプライバシーのためMACアドレスをランダム化します。Bluehoodは:
Bluehoodは視認タイムスタンプを分析してパターンを検出します:
パターンの例: "毎日、夕方(5PM-9PM)"、"平日、午前(8AM-12PM)"
Bluehoodは、設定可能な時間枠内で頻繁に一緒に現れるデバイスを検出します。これにより以下のことが明らかになる可能性があります:
RSSI信号強度に基づいて、デバイスは近接ゾーンに分類されます:
視認間のギャップを分析することで、デバイスが範囲内に滞在する時間を追跡します。設定可能なギャップしきい値(デフォルト15分)で新しい「セッション」の開始を判断します。
BluehoodはPrometheusスクレイピング用のメトリクスを公開できます。BLUEHOOD_METRICS_PORT 環境変数または --metrics-port CLIフラグを設定して有効にします。
# 環境変数経由
export BLUEHOOD_METRICS_PORT=9199
# CLI経由
bluehood --metrics-port 9199
メトリクスは http://host:9199/metrics で提供されます。
すぐにインポート可能なGrafanaダッシュボードが grafana/bluehood-dashboard.json に含まれています。Grafana UI(ダッシュボード > インポート)またはAPI経由でインポートします:
curl -X POST "http://localhost:3000/api/dashboards/db" \
-H "Authorization: Bearer <your-api-key>" \
-H "Content-Type: application/json" \
-d "{\"dashboard\": $(cat grafana/bluehood-dashboard.json), \"overwrite\": true}"
bluetoothctl power onbluehood --list-adaptersBLE scan error: org.freedesktop.DBus.Error.ServiceUnknown / The name org.bluez was not provided
BlueZがホストにインストールされていないか、実行されていません。修正方法:
sudo apt install bluez # Debian/Ubuntu
sudo systemctl enable --now bluetooth
docker compose restart
一般的なチェックリスト:
systemctl status bluetoothbluetoothctl list貢献は歓迎します!GitHubでIssueまたはPRを開いてください。
MITライセンス - 詳細は LICENSE を参照してください。
このツールは教育目的のみです。Bluetoothデバイスを監視する際は、お住まいの地域のプライバシー法に注意してください。作者は本ソフトウェアの誤用について一切の責任を負いません。
作成者: Danny McClelland
| 変数 | デフォルト | 説明 |
|---|
PUID | 1000 | コンテナユーザーのUID — バインドマウント使用時にホストユーザーに合わせる(id -u) |
PGID | 1000 | コンテナユーザーのGID — バインドマウント使用時にホストグループに合わせる(id -g) |
TZ | UTC | コンテナのタイムゾーン(例:Europe/London) |
BLUEHOOD_ADAPTER | auto | BLEスキャン用Bluetoothアダプター(例:hci0) |
BLUEHOOD_CLASSIC_ADAPTER | BLUEHOOD_ADAPTER と同じ | クラシックBluetoothスキャン用の別アダプター(例:hci1)。異なるアダプターに設定すると、BLEとクラシックスキャンが同時に実行されます。 |
BLUEHOOD_DATA_DIR | /data | データベース保存ディレクトリ |
BLUEHOOD_METRICS_PORT | 無効 | Prometheusメトリクスポート(例:9199) |
BLUEHOOD_HEARTBEAT_URL | 無効 | ハートビートチェックインをPOSTするURL(例:healthchecks.ioまたはuptime-kumaのプッシュURL) |
BLUEHOOD_HEARTBEAT_INTERVAL | 300 | ハートビートチェックイン間隔(秒) |
BLUEHOOD_PRUNE_DAYS | 0(無効) | N日より古い視認データを自動削除してストレージを節約 |
| キー | 操作 |
|---|
/ | 検索バーにフォーカス |
r | デバイス一覧を更新 |
c | コンパクトビューを切り替え |
w | 選択したデバイスの監視を切り替え |
Esc | モーダルを閉じる |
? | キーボードショートカットを表示 |
| メトリクス | タイプ | 説明 |
|---|
bluehood_scans_total | Counter | 完了したスキャンサイクルの総数 |
bluehood_scan_errors_total | Counter | スキャンエラー(ラベル: scan_type) |
bluehood_sightings_total | Counter | 記録されたデバイス視認の総数 |
bluehood_new_devices_total | Counter | 発見された新しいユニークデバイスの数 |
bluehood_last_scan_devices | Gauge | 最後のスキャンでのデバイス数(ラベル: scan_type) |
bluehood_devices_total | Gauge | DB内のユニークデバイス数(ラベル: bt_type) |
bluehood_devices_active | Gauge | 直近5分間に見られたデバイス数 |
bluehood_devices_watched | Gauge | 監視対象デバイス数 |
bluehood_devices_ignored | Gauge | 無視されたデバイス数 |
bluehood_scan_duration_seconds | Histogram | スキャンサイクルの期間 |
bluehood_device_rssi_dbm | Histogram | BLEデバイスのRSSI分布 |
bluehood_build_info | Info | バージョン情報 |