
お住まいの地域のBluetoothアクティビティを監視します
Bluetooth Neighborhood - 周辺のBLEデバイスを追跡し、トラフィックパターンを分析します。
警告: アルファ版ソフトウェア
このプロジェクトは開発の初期段階にあり、本番環境での使用には適していません。機能は予告なく変更、破損、削除される可能性があります。自己責任でご使用ください。収集されたデータは実験的なものとして扱うべきです。
フィルタリング、検索、リアルタイム統計を備えたデバイスリストを表示するメインダッシュボード
タブ形式の設定ページ — アラート、オペレーション、グループ、セキュリティ
プロジェクト情報と機能概要を掲載したIntelページ
このプロジェクトは、Bluetoothデバイスにおけるプライバシーリスクを浮き彫りにしたWhisperPair脆弱性(CVE-2025-36911)に触発されて生まれました。
私たちの周囲には常に何千もの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スキャンに必要です。
| Variable | Default | Description |
|---|---|---|
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と同じ | Classic Bluetoothスキャン用の別アダプター(例: hci1)。別のアダプターに設定すると、BLEとClassicのスキャンが同時に実行されます。 |
BLUEHOOD_DATA_DIR | /data | データベースの保存ディレクトリ |
BLUEHOOD_PORT | 8080 | Webダッシュボードのポート。コンテナはホストネットワーキングを使用するため、8080が使用中の場合は(ポートマッピングではなく)これを変更してください |
BLUEHOOD_NTFY_SERVER | https://ntfy.sh | プッシュ通知用のntfyサーバーのベースURL。セルフホストインスタンスを指定してください。設定ページで保存された値が優先されます |
BLUEHOOD_METRICS_PORT | disabled | Prometheusメトリクスポート(例: 9199) |
BLUEHOOD_HEARTBEAT_URL | disabled | ハートビートチェックインをPOSTするURL(例: healthchecks.ioやuptime-kumaのプッシュURL) |
BLUEHOOD_HEARTBEAT_INTERVAL | 300 | ハートビートチェックイン間の秒数 |
BLUEHOOD_PRUNE_DAYS | 0 (disabled) | ストレージを解放するために、N日より古い目撃情報を自動削除 |
BLUEHOOD_PRUNE_MIN_SIGHTINGS | 0 (disabled) | 0より大きい場合、古い目撃情報の行のみを削除するのではなく、古いデバイス全体(BLUEHOOD_PRUNE_DAYSより古く、合計目撃回数がN回未満)を削除します。監視対象デバイスは決して削除されません |
Bluehoodには、CentralロールをサポートするBLE対応Bluetoothアダプター(Bluetooth 4.0以降)が必要です。古い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を設定)
bluehood --port 9000
# 特定のBluetoothアダプターを使用
bluehood --adapter hci1
# BLEとClassicスキャンに別々のアダプターを使用 (同時実行)
bluehood --adapter hci0 --classic-adapter hci1
# 利用可能なアダプターを一覧表示
bluehood --list-adapters
# Webダッシュボードを無効化 (スキャンのみ)
bluehood --no-web
# ポート9199でPrometheusメトリクスエクスポーターを有効化
bluehood --metrics-port 9199
ダッシュボードは以下を提供します: