
Monitora l'attività Bluetooth del tuo quartiere.
Bluetooth Neighborhood - Tieni traccia dei dispositivi BLE nella tua zona e analizza i modelli di traffico.
AVVERTENZA: Software Alpha
Questo progetto è in fase iniziale di sviluppo e non è pronto per l'uso in produzione. Le funzionalità possono cambiare, rompersi o essere rimosse senza preavviso. Usalo a tuo rischio. I dati raccolti dovrebbero essere considerati sperimentali.
Dashboard principale che mostra l'elenco dei dispositivi con filtro, ricerca e statistiche in tempo reale
Pagina di configurazione a schede — Avvisi, Operazioni, Gruppi e Sicurezza
Pagina Informazioni con panoramica del progetto e delle capacità
Questo progetto è stato ispirato dalla vulnerabilità WhisperPair (CVE-2025-36911), che ha evidenziato i rischi per la privacy nei dispositivi Bluetooth.
Migliaia di dispositivi Bluetooth ci circondano in ogni momento: telefoni, auto, TV, cuffie, apparecchi acustici, veicoli per consegne e altro ancora. Bluehood dimostra quanto sia semplice rilevare passivamente questi dispositivi e osservare pattern nella loro presenza.
Con abbastanza dati, potresti potenzialmente:
Questi metadati possono rivelare informazioni sorprendentemente personali senza alcuna interazione attiva con i dispositivi.
Bluehood è uno strumento educativo per sensibilizzare sulla privacy Bluetooth. È un progetto del fine settimana, ma le implicazioni meritano di essere considerate.
Bluehood è uno scanner Bluetooth che:
? per visualizzare)Prerequisiti — Solo host Linux
Bluehood comunica con il tuo adattatore Bluetooth tramite BlueZ, lo stack Bluetooth di Linux. BlueZ deve essere installato e in esecuzione sull'host prima di avviare il container — l'immagine Docker stessa non lo include.
# Debian / Ubuntu (incluso Ubuntu Server) sudo apt install bluez sudo systemctl enable --now bluetooth # Arch Linux sudo pacman -S bluez bluez-utils sudo systemctl enable --now bluetoothSenza BlueZ sull'host vedrai un errore come:
BLE scan error: [org.freedesktop.DBus.Error.ServiceUnknown] The name org.bluez was not provided by any .service files
# Crea un docker-compose.yml o scarica quello da questo repository
# Quindi avvia con Docker Compose
docker compose up -d
# Visualizza i log
docker compose logs -f
L'immagine Docker è disponibile su GitHub Container Registry:
ghcr.io/dannymcc/bluehood:latest
Il dashboard web sarà disponibile all'indirizzo http://localhost:8080
sudo apt install bluez && sudo systemctl enable --now bluetooth)Nota: Gli adattatori più vecchi (Bluetooth 2.x/3.x) non supportano la scansione BLE. Se il tuo adattatore non ha il supporto per il ruolo Central BLE, vedrai:
No Bluetooth adapters with BLE 'central' role found.
Nota: Docker viene eseguito in modalità privilegiata con networking host per l'accesso Bluetooth. Questo è necessario per la scansione BLE.
Bluehood richiede un adattatore Bluetooth con supporto BLE (Bluetooth 4.0 o successivo) con supporto del ruolo Central. Gli adattatori Bluetooth 2.x/3.x più vecchi non supportano la scansione BLE e non funzioneranno.
Se il tuo adattatore non supporta il ruolo Central BLE, Bluehood terminerà con:
No Bluetooth adapters with BLE 'central' role found
Puoi verificare le capacità del tuo adattatore con bluetoothctl show e cercare central nei ruoli supportati.
# Installa le dipendenze di sistema (Arch Linux)
sudo pacman -S bluez bluez-utils python-pip
# Installa le dipendenze di sistema (Debian/Ubuntu)
sudo apt install bluez python3-pip
# Clona e installa
git clone https://github.com/dannymcc/bluehood.git
cd bluehood
pip install -e .
La scansione Bluetooth richiede privilegi elevati. Scegli una opzione:
Esegui come root (il più semplice):
sudo bluehood
Concedi capacità a Python:
sudo setcap 'cap_net_admin,cap_net_raw+eip' $(readlink -f $(which python))
bluehood
Usa il servizio systemd (consigliato per sempre acceso):
sudo cp bluehood.service /etc/systemd/system/
sudo systemctl daemon-reload
sudo systemctl enable --now bluehood
Bluehood funziona nativamente su macOS senza Docker. macOS usa CoreBluetooth invece di BlueZ, gestito automaticamente dalla libreria bleak.
# Clona il repository
git clone https://github.com/dannymcc/bluehood.git
cd bluehood
# Crea un ambiente virtuale
python3 -m venv .venv
source .venv/bin/activate
# Installa
pip install -e .
# Esegui
python -m bluehood.daemon
Il dashboard web sarà disponibile all'indirizzo http://localhost:8080
Nota: Al primo avvio, macOS ti chiederà di consentire l'accesso Bluetooth. Devi concedere questa autorizzazione affinché la scansione funzioni.
# Avvia con dashboard web (porta predefinita 8080)
bluehood
# Specifica una porta diversa
bluehood --port 9000
# Usa un adattatore Bluetooth specifico
bluehood --adapter hci1
# Usa adattatori separati per scansione BLE e classica (contemporanea)
bluehood --adapter hci0 --classic-adapter hci1
# Elenca gli adattatori disponibili
bluehood --list-adapters
# Disabilita il dashboard web (solo scansione)
bluehood --no-web
# Abilita l'esportatore di metriche Prometheus sulla porta 9199
bluehood --metrics-port 9199
Il dashboard fornisce:
/settings#operations)Abilita la modalità screenshot dalla barra laterale per offuscare i dati sensibili prima di condividere screenshot:
AA:BB:XX:XX:XX:XX)Da********)Bluehood può inviare notifiche push tramite ntfy.sh, un servizio di notifica gratuito e open-source.
bluehood-myname-alerts)I dati sono memorizzati in ~/.local/share/bluehood/bluehood.db (SQLite).
Sovrascrivi la posizione con variabili d'ambiente:
BLUEHOOD_DATA_DIR - Directory per i file di datiBLUEHOOD_DB_PATH - Percorso diretto al file del databaseNota: Le impostazioni di Heartbeat e pruning possono essere configurate dall'interfaccia web (Impostazioni > Operazioni) o tramite variabili d'ambiente. I valori dell'interfaccia grafica hanno la priorità sulle variabili d'ambiente.
Bluehood classifica i dispositivi utilizzando molteplici segnali (in ordine di priorità):
I dispositivi moderni randomizzano i loro indirizzi MAC per la privacy. Bluehood:
Bluehood analizza i timestamp degli avvistamenti per rilevare pattern:
Esempi di pattern: "Giornaliero, serate (17:00-21:00)", "Giorni feriali, mattina (8:00-12:00)"
Bluehood rileva dispositivi che appaiono frequentemente insieme entro una finestra temporale configurabile. Questo può rivelare:
Basandosi sull'intensità del segnale RSSI, i dispositivi sono classificati in zone di prossimità:
Tiene traccia di quanto tempo i dispositivi passano nel raggio analizzando gli intervalli tra gli avvistamenti. Una soglia di intervallo configurabile (default 15 minuti) determina quando inizia una nuova "sessione".
Bluehood può esporre metriche per il Prometheus scraping. Abilita impostando la variabile d'ambiente BLUEHOOD_METRICS_PORT o il flag CLI --metrics-port.
# Tramite variabile d'ambiente
export BLUEHOOD_METRICS_PORT=9199
# Tramite CLI
bluehood --metrics-port 9199
Le metriche sono servite all'indirizzo http://host:9199/metrics.
Un dashboard Grafana pronto per l'importazione è incluso in grafana/bluehood-dashboard.json. Importalo tramite l'interfaccia Grafana (Dashboard > Import) o tramite 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 non è installato o non è in esecuzione sull'host. Risolvi:
sudo apt install bluez # Debian/Ubuntu
sudo systemctl enable --now bluetooth
docker compose restart
Lista di controllo generale:
systemctl status bluetoothbluetoothctl listContributi benvenuti! Apri un issue o una PR su GitHub.
Licenza MIT - Vedi LICENSE per i dettagli.
Questo strumento è solo a scopo educativo. Presta attenzione alle leggi sulla privacy nella tua giurisdizione quando monitori dispositivi Bluetooth. L'autore non è responsabile per qualsiasi uso improprio di questo software.
Creato da Danny McClelland
| Variabile | Predefinito | Descrizione |
|---|
PUID | 1000 | UID per l'utente del container — impostalo per corrispondere al tuo utente host (id -u) quando usi bind mount |
PGID | 1000 | GID per l'utente del container — impostalo per corrispondere al tuo gruppo host (id -g) quando usi bind mount |
TZ | UTC | Fuso orario del container (es. Europe/London) |
BLUEHOOD_ADAPTER | auto | Adattatore Bluetooth per scansione BLE (es. hci0) |
BLUEHOOD_CLASSIC_ADAPTER | come BLUEHOOD_ADAPTER | Adattatore separato per scansione Bluetooth classica (es. hci1). Se impostato su un adattatore diverso, le scansioni BLE e classica vengono eseguite contemporaneamente. |
BLUEHOOD_DATA_DIR | /data | Directory di archiviazione del database |
BLUEHOOD_METRICS_PORT | disabilitato | Porta per le metriche Prometheus (es. 9199) |
BLUEHOOD_HEARTBEAT_URL | disabilitato | URL a cui inviare i check-in heartbeat (es. un URL push di healthchecks.io o uptime-kuma) |
BLUEHOOD_HEARTBEAT_INTERVAL | 300 | Secondi tra i check-in heartbeat |
BLUEHOOD_PRUNE_DAYS | 0 (disabilitato) | Elimina automaticamente gli avvistamenti più vecchi di N giorni per liberare spazio |
| Tasto | Azione |
|---|
/ | Focus sulla barra di ricerca |
r | Aggiorna elenco dispositivi |
c | Attiva/disattiva vista compatta |
w | Attiva/disattiva osservazione sul dispositivo selezionato |
Esc | Chiudi modale |
? | Mostra scorciatoie da tastiera |
| Metrica | Tipo | Descrizione |
|---|
bluehood_scans_total | Contatore | Cicli di scansione totali completati |
bluehood_scan_errors_total | Contatore | Errori di scansione (etichetta: scan_type) |
bluehood_sightings_total | Contatore | Totale avvistamenti dispositivi registrati |
bluehood_new_devices_total | Contatore | Nuovi dispositivi unici scoperti |
bluehood_last_scan_devices | Indicatore | Dispositivi nell'ultima scansione (etichetta: scan_type) |
bluehood_devices_total | Indicatore | Dispositivi unici nel DB (etichetta: bt_type) |
bluehood_devices_active | Indicatore | Dispositivi visti negli ultimi 5 minuti |
bluehood_devices_watched | Indicatore | Conteggio dispositivi osservati |
bluehood_devices_ignored | Indicatore | Conteggio dispositivi ignorati |
bluehood_scan_duration_seconds | Istogramma | Durata del ciclo di scansione |
bluehood_device_rssi_dbm | Istogramma | Distribuzione RSSI dei dispositivi BLE |
bluehood_build_info | Informazione | Informazioni sulla versione |