
Monitora l'attività Bluetooth del tuo quartiere.
Bluetooth Neighborhood - Traccia i dispositivi BLE nella tua area e analizza i pattern di traffico.
ATTENZIONE: Software Alpha
Questo progetto è in fase di sviluppo iniziale 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 devono essere considerati sperimentali.
Dashboard principale che mostra l'elenco dei dispositivi con filtri, ricerca e statistiche in tempo reale
Pagina di configurazione a schede — Avvisi, Operazioni, Gruppi e Sicurezza
Pagina Intel con informazioni sul progetto e panoramica delle funzionalità
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 le consegne e altro ancora. Bluehood dimostra quanto sia semplice rilevare passivamente questi dispositivi e osservare i pattern della loro presenza.
Con dati sufficienti, 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 da weekend, ma le implicazioni meritano una riflessione.
Bluehood è uno scanner Bluetooth che:
? per visualizzarle)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
# 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
L'immagine Docker è disponibile su GitHub Container Registry:
ghcr.io/dannymcc/bluehood:latest
La 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 supporta il ruolo BLE Central, 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 compatibile BLE (Bluetooth 4.0 o successivo) con supporto al 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 BLE Central, Bluehood terminerà con:
No Bluetooth adapters with BLE 'central' role found
Puoi verificare le capacità del tuo adattatore con bluetoothctl show e cercare central tra i ruoli supportati.
# 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 .
La scansione Bluetooth richiede privilegi elevati. Scegli una delle seguenti opzioni:
Esegui come root (il più semplice):
sudo bluehood
Concedi le capabilities a Python:
sudo setcap 'cap_net_admin,cap_net_raw+eip' $(readlink -f $(which python))
bluehood
Usa il servizio systemd (consigliato per l'esecuzione continua):
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, che viene gestito automaticamente dalla libreria bleak.
# 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
La dashboard web sarà disponibile all'indirizzo http://localhost:8080
Nota: Al primo avvio, macOS ti chiederà di consentire l'accesso al Bluetooth. Devi concedere questa autorizzazione affinché la scansione funzioni.
# Start with web dashboard (default port 8080)
bluehood
# Specify a different port (or set BLUEHOOD_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
La dashboard fornisce:
/settings#operations)Attiva la modalità screenshot dalla barra laterale per offuscare i dati sensibili prima di condividere gli screenshot:
AA:BB:XX:XX:XX:XX)Da********)Bluehood può inviare notifiche push tramite ntfy, un servizio di notifica gratuito e open-source. Puoi usare il server pubblico ntfy.sh o la tua istanza self-hosted.
bluehood-mionome-alerts), o sul tuo server ntfyhttps://ntfy.sh), il nome del tuo topic e un token di accesso se il tuo server lo richiede, poi abilita le notificheI dati sono archiviati in ~/.local/share/bluehood/bluehood.db (SQLite).
Sovrascrivi la posizione con le 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 dalla UI web (Impostazioni > Operazioni) o tramite variabili d'ambiente. I valori della GUI hanno la priorità sulle variabili d'ambiente.
Bluehood classifica i dispositivi usando 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: "Quotidiano, sera (17:00-21:00)", "Giorni feriali, mattina (8:00-12:00)"
Bluehood rileva i dispositivi che appaiono frequentemente insieme all'interno di una finestra temporale configurabile. Questo può rivelare:
In base all'intensità del segnale RSSI, i dispositivi sono classificati in zone di prossimità:
Traccia quanto tempo i dispositivi trascorrono nel raggio d'azione analizzando gli intervalli tra gli avvistamenti. Una soglia di intervallo configurabile (predefinita 15 minuti) determina quando inizia una nuova "sessione".
Bluehood può esporre metriche per lo scraping di Prometheus. Abilita impostando la variabile d'ambiente BLUEHOOD_METRICS_PORT o il flag CLI --metrics-port.
# Via environment variable
export BLUEHOOD_METRICS_PORT=9199
# Via CLI
bluehood --metrics-port 9199
Le metriche sono servite all'indirizzo http://host:9199/metrics.
Una dashboard Grafana pronta per l'importazione è inclusa in grafana/bluehood-dashboard.json. Importala tramite la UI di Grafana (Dashboards > Import) o l'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. Soluzione:
sudo apt install bluez # Debian/Ubuntu
sudo systemctl enable --now bluetooth
docker compose restart
Checklist generale:
systemctl status bluetoothbluetoothctl listContributi benvenuti! Apri una issue o una PR su GitHub.
Licenza MIT - Vedi LICENSE per i dettagli.
Questo strumento è solo a scopo educativo. Sii consapevole delle 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 la scansione BLE (es. hci0) |
BLUEHOOD_CLASSIC_ADAPTER | uguale a BLUEHOOD_ADAPTER | Adattatore separato per la scansione Bluetooth classic (es. hci1). Se impostato su un adattatore diverso, le scansioni BLE e classic vengono eseguite contemporaneamente. |
BLUEHOOD_DATA_DIR | /data | Directory di archiviazione del database |
BLUEHOOD_PORT | 8080 | Porta della dashboard web. Il container usa il networking host, quindi cambia questa (invece di una mappatura delle porte) se la 8080 è occupata |
BLUEHOOD_NTFY_SERVER | https://ntfy.sh | URL base del server ntfy per le notifiche push; puntalo a un'istanza self-hosted. Il valore salvato nella pagina Impostazioni ha la precedenza |
BLUEHOOD_METRICS_PORT | disabilitato | Porta delle metriche Prometheus (es. 9199) |
BLUEHOOD_HEARTBEAT_URL | disabilitato | URL a cui inviare i check-in heartbeat tramite POST (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 |
BLUEHOOD_PRUNE_MIN_SIGHTINGS | 0 (disabilitato) | Se >0, elimina interi dispositivi obsoleti (più vecchi di BLUEHOOD_PRUNE_DAYS e con meno di N avvistamenti totali) invece di limitarsi a rimuovere le righe di avvistamento vecchie; i dispositivi monitorati non vengono mai eliminati |
| Tasto | Azione |
|---|
/ | Attiva la barra di ricerca |
r | Aggiorna l'elenco dei dispositivi |
c | Attiva/disattiva la vista compatta |
w | Attiva/disattiva il monitoraggio sul dispositivo selezionato |
Esc | Chiudi la modale |
? | Mostra le scorciatoie da tastiera |
| Metrica | Tipo | Descrizione |
|---|
bluehood_scans_total | Counter | Cicli di scansione totali completati |
bluehood_scan_errors_total | Counter | Errori di scansione (label: scan_type) |
bluehood_sightings_total | Counter | Avvistamenti totali dei dispositivi registrati |
bluehood_new_devices_total | Counter | Nuovi dispositivi unici scoperti |
bluehood_last_scan_devices | Gauge | Dispositivi nell'ultima scansione (label: scan_type) |
bluehood_devices_total | Gauge | Dispositivi unici nel DB (label: bt_type) |
bluehood_devices_active | Gauge | Dispositivi visti negli ultimi 5 minuti |
bluehood_devices_watched | Gauge | Conteggio dei dispositivi monitorati |
bluehood_devices_ignored | Gauge | Conteggio dei dispositivi ignorati |
bluehood_scan_duration_seconds | Histogram | Durata del ciclo di scansione |
bluehood_device_rssi_dbm | Histogram | Distribuzione RSSI dei dispositivi BLE |
bluehood_build_info | Info | Informazioni sulla versione |