
Überwachen Sie die Bluetooth-Aktivität in Ihrer Nachbarschaft
Bluetooth Neighborhood – BLE-Geräte in Ihrer Umgebung verfolgen und Verkehrsmuster analysieren.
WARNUNG: Alpha-Software
Dieses Projekt befindet sich in der Frühphase und ist nicht für den Produktionseinsatz bereit. Funktionen können sich ändern, ausfallen oder ohne Vorankündigung entfernt werden. Nutzung auf eigene Gefahr. Erfasste Daten sollten als experimentell betrachtet werden.
Haupt-Dashboard mit Geräteliste, Filterung, Suche und Echtzeitstatistiken
Registerkarten-Konfigurationsseite – Benachrichtigungen, Operationen, Gruppen und Sicherheit
Intel-Seite mit Projektinformationen und Funktionsübersicht
Dieses Projekt wurde von der WhisperPair-Sicherheitslücke (CVE-2025-36911) inspiriert, die auf Datenschutzrisiken bei Bluetooth-Geräten aufmerksam machte.
Tausende Bluetooth-Geräte umgeben uns ständig: Telefone, Autos, Fernseher, Kopfhörer, Hörgeräte, Lieferfahrzeuge und mehr. Bluehood zeigt, wie einfach es ist, diese Geräte passiv zu erkennen und Muster in deren Anwesenheit zu beobachten.
Mit genügend Daten könnten Sie möglicherweise:
Diese Metadaten können überraschend persönliche Informationen preisgeben, ohne dass eine aktive Interaktion mit den Geräten erforderlich ist.
Bluehood ist ein Bildungswerkzeug, um das Bewusstsein für Bluetooth-Datenschutz zu schärfen. Es ist ein Wochenendprojekt, aber die Implikationen sind es wert, darüber nachzudenken.
Bluehood ist ein Bluetooth-Scanner, der:
? drücken, um anzuzeigen)Voraussetzungen – Nur Linux-Hosts
Bluehood kommuniziert über BlueZ, den Linux-Bluetooth-Stack, mit Ihrem Bluetooth-Adapter. BlueZ muss vor dem Starten des Containers auf dem Host installiert und ausgeführt werden – das Docker-Image enthält es nicht selbst.
# Debian / Ubuntu (including Ubuntu Server) sudo apt install bluez sudo systemctl enable --now bluetooth # Arch Linux sudo pacman -S bluez bluez-utils sudo systemctl enable --now bluetoothOhne BlueZ auf dem Host erscheint ein Fehler wie:
BLE scan error: [org.freedesktop.DBus.Error.ServiceUnknown] The name org.bluez was not provided by any .service files
# Create a docker-compose.yml or download the one from this repo
# Then start with Docker Compose
docker compose up -d
# View logs
docker compose logs -f
Das Docker-Image ist auf der GitHub Container Registry verfügbar:
ghcr.io/dannymcc/bluehood:latest
Das Web-Dashboard wird unter http://localhost:8080 verfügbar sein.
sudo apt install bluez && sudo systemctl enable --now bluetooth)Hinweis: Ältere Adapter (Bluetooth 2.x/3.x) unterstützen kein BLE-Scannen. Wenn Ihr Adapter keine BLE-Central-Rolle unterstützt, sehen Sie:
No Bluetooth adapters with BLE 'central' role found.
Hinweis: Docker läuft im privilegierten Modus mit Host-Netzwerk für Bluetooth-Zugriff. Dies ist für BLE-Scan erforderlich.
Bluehood erfordert einen BLE-fähigen Bluetooth-Adapter (Bluetooth 4.0 oder neuer) mit Central-Rollenunterstützung. Ältere Bluetooth 2.x/3.x-Adapter unterstützen kein BLE-Scannen und funktionieren nicht.
Wenn Ihr Adapter die BLE-Central-Rolle nicht unterstützt, wird Bluehood mit folgendem Fehler beendet:
No Bluetooth adapters with BLE 'central' role found
Sie können die Fähigkeiten Ihres Adapters mit bluetoothctl show überprüfen und nach central in den unterstützten Rollen suchen.
# Install system dependencies (Arch Linux)
sudo pacman -S bluez bluez-utils python-pip
# Install system dependencies (Debian/Ubuntu)
sudo apt install bluez python3-pip
# Clone and install
git clone https://github.com/dannymcc/bluehood.git
cd bluehood
pip install -e .
Bluetooth-Scan erfordert erhöhte Rechte. Wählen Sie eine Option:
Als Root ausführen (am einfachsten):
sudo bluehood
Python Capabilities verleihen:
sudo setcap 'cap_net_admin,cap_net_raw+eip' $(readlink -f $(which python))
bluehood
Systemd-Dienst verwenden (empfohlen für Dauerbetrieb):
sudo cp bluehood.service /etc/systemd/system/
sudo systemctl daemon-reload
sudo systemctl enable --now bluehood
Bluehood funktioniert nativ unter macOS ohne Docker. macOS verwendet CoreBluetooth anstelle von BlueZ, was automatisch von der bleak-Bibliothek gehandhabt wird.
# Clone the repository
git clone https://github.com/dannymcc/bluehood.git
cd bluehood
# Create a virtual environment
python3 -m venv .venv
source .venv/bin/activate
# Install
pip install -e .
# Run
python -m bluehood.daemon
Das Web-Dashboard wird unter http://localhost:8080 verfügbar sein.
Hinweis: Beim ersten Start fordert macOS Sie auf, den Bluetooth-Zugriff zu erlauben. Sie müssen diese Berechtigung erteilen, damit das Scannen funktioniert.
# Start with web dashboard (default port 8080)
bluehood
# Specify a different port
bluehood --port 9000
# Use a specific Bluetooth adapter
bluehood --adapter hci1
# Use separate adapters for BLE and classic scanning (concurrent)
bluehood --adapter hci0 --classic-adapter hci1
# List available adapters
bluehood --list-adapters
# Disable web dashboard (scanning only)
bluehood --no-web
# Enable Prometheus metrics exporter on port 9199
bluehood --metrics-port 9199
Das Dashboard bietet:
/settings#operations)Aktivieren Sie den Screenshot-Modus über die Seitenleiste, um sensible Daten vor dem Teilen von Screenshots zu verschleiern:
AA:BB:XX:XX:XX:XX)Da********)Bluehood kann Push-Benachrichtigungen über ntfy.sh senden, einen kostenlosen Open-Source-Benachrichtigungsdienst.
bluehood-myname-alerts)Die Daten werden in ~/.local/share/bluehood/bluehood.db (SQLite) gespeichert.
Überschreiben Sie den Speicherort mit Umgebungsvariablen:
BLUEHOOD_DATA_DIR – Verzeichnis für DatendateienBLUEHOOD_DB_PATH – Direkter Pfad zur DatenbankdateiHinweis: Heartbeat- und Bereinigungseinstellungen können über die Weboberfläche (Einstellungen > Operationen) oder über Umgebungsvariablen konfiguriert werden. GUI-Werte haben Vorrang vor Umgebungsvariablen.
Bluehood klassifiziert Geräte anhand mehrerer Signale (in Prioritätsreihenfolge):
Moderne Geräte randomisieren ihre MAC-Adressen aus Datenschutzgründen. Bluehood:
Bluehood analysiert Sichtungszeitstempel, um Muster zu erkennen:
Beispielmuster: „Täglich, abends (17-21 Uhr)“, „Wochentage, morgens (8-12 Uhr)“
Bluehood erkennt Geräte, die häufig innerhalb eines konfigurierbaren Zeitfensters zusammen auftauchen. Dies kann aufdecken:
Basierend auf der RSSI-Signalstärke werden Geräte in Nähezonen eingeteilt:
Verfolgt, wie lange Geräte in Reichweite sind, indem Lücken zwischen Sichtungen analysiert werden. Ein konfigurierbarer Lückenschwellenwert (Standard 15 Minuten) bestimmt, wann eine neue „Sitzung“ beginnt.
Bluehood kann Metriken zum Scraping durch Prometheus bereitstellen. Aktivieren Sie dies durch Setzen der Umgebungsvariablen BLUEHOOD_METRICS_PORT oder des CLI-Flags --metrics-port.
# Via environment variable
export BLUEHOOD_METRICS_PORT=9199
# Via CLI
bluehood --metrics-port 9199
Metriken werden unter http://host:9199/metrics bereitgestellt.
Ein importfertiges Grafana-Dashboard ist unter grafana/bluehood-dashboard.json enthalten. Importieren Sie es über die Grafana-Oberfläche (Dashboards > Import) oder die 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 ist nicht installiert oder läuft nicht auf dem Host. Behebung:
sudo apt install bluez # Debian/Ubuntu
sudo systemctl enable --now bluetooth
docker compose restart
Allgemeine Checkliste:
systemctl status bluetoothbluetoothctl listBeiträge willkommen! Bitte öffnen Sie ein Issue oder einen PR auf GitHub.
MIT-Lizenz – Einzelheiten finden Sie in der LICENSE-Datei.
Dieses Werkzeug dient nur zu Bildungszwecken. Beachten Sie die Datenschutzgesetze in Ihrem Zuständigkeitsbereich, wenn Sie Bluetooth-Geräte überwachen. Der Autor übernimmt keine Verantwortung für Missbrauch dieser Software.
Erstellt von Danny McClelland
| Variable | Standard | Beschreibung |
|---|
PUID | 1000 | UID für den Container-Benutzer – auf Ihren Host-Benutzer setzen (id -u) bei Verwendung von Bind-Mounts |
PGID | 1000 | GID für den Container-Benutzer – auf Ihre Host-Gruppe setzen (id -g) bei Verwendung von Bind-Mounts |
TZ | UTC | Container-Zeitzone (z.B. Europe/London) |
BLUEHOOD_ADAPTER | auto | Bluetooth-Adapter für BLE-Scan (z.B. hci0) |
BLUEHOOD_CLASSIC_ADAPTER | gleich wie BLUEHOOD_ADAPTER | Separater Adapter für klassischen Bluetooth-Scan (z.B. hci1). Wenn auf einen anderen Adapter gesetzt, laufen BLE- und klassische Scans gleichzeitig. |
BLUEHOOD_DATA_DIR | /data | Datenbankspeicherverzeichnis |
BLUEHOOD_METRICS_PORT | deaktiviert | Prometheus-Metriken-Port (z.B. 9199) |
BLUEHOOD_HEARTBEAT_URL | deaktiviert | URL für Heartbeat-Check-ins (z.B. eine healthchecks.io oder uptime-kuma Push-URL) |
BLUEHOOD_HEARTBEAT_INTERVAL | 300 | Sekunden zwischen Heartbeat-Check-ins |
BLUEHOOD_PRUNE_DAYS | 0 (deaktiviert) | Sichtungen älter als N Tage automatisch löschen, um Speicher freizugeben |
| Taste | Aktion |
|---|
/ | Suchleiste fokussieren |
r | Geräteliste aktualisieren |
c | Kompakte Ansicht umschalten |
w | Beobachtung des ausgewählten Geräts umschalten |
Esc | Modal schließen |
? | Tastaturkürzel anzeigen |
| Metrik | Typ | Beschreibung |
|---|
bluehood_scans_total | Counter | Abgeschlossene Scan-Zyklen insgesamt |
bluehood_scan_errors_total | Counter | Scan-Fehler (Label: scan_type) |
bluehood_sightings_total | Counter | Insgesamt aufgezeichnete Gerätesichtungen |
bluehood_new_devices_total | Counter | Neue eindeutige Geräte entdeckt |
bluehood_last_scan_devices | Gauge | Geräte im letzten Scan (Label: scan_type) |
bluehood_devices_total | Gauge | Eindeutige Geräte in der DB (Label: bt_type) |
bluehood_devices_active | Gauge | Geräte, die in den letzten 5 Minuten gesehen wurden |
bluehood_devices_watched | Gauge | Anzahl beobachteter Geräte |
bluehood_devices_ignored | Gauge | Anzahl ignorierter Geräte |
bluehood_scan_duration_seconds | Histogram | Dauer des Scan-Zyklus |
bluehood_device_rssi_dbm | Histogram | RSSI-Verteilung von BLE-Geräten |
bluehood_build_info | Info | Versionsinformationen |