
Отслеживайте активность Bluetooth в вашем районе
Bluetooth Neighborhood — Отслеживайте BLE-устройства в вашем районе и анализируйте паттерны трафика.
ВНИМАНИЕ: Альфа-программное обеспечение
Этот проект находится на ранней стадии разработки и не готов к использованию в production. Функции могут меняться, ломаться или удаляться без предупреждения. Используйте на свой страх и риск. Собранные данные следует рассматривать как экспериментальные.
Главная панель управления со списком устройств, фильтрацией, поиском и статистикой в реальном времени
Страница с вкладками конфигурации — Уведомления, Операции, Группы и Безопасность
Страница «О программе» с информацией о проекте и обзором возможностей
Этот проект был вдохновлён уязвимостью WhisperPair (CVE-2025-36911), которая выявила риски конфиденциальности в Bluetooth-устройствах.
Тысячи Bluetooth-устройств окружают нас постоянно: телефоны, автомобили, телевизоры, наушники, слуховые аппараты, транспортные средства доставки и многое другое. Bluehood демонстрирует, насколько просто пассивно обнаруживать эти устройства и наблюдать паттерны их присутствия.
При достаточном количестве данных можно потенциально:
Эти метаданные могут раскрывать удивительно личную информацию без какого-либо активного взаимодействия с устройствами.
Bluehood — это образовательный инструмент для повышения осведомлённости о конфиденциальности Bluetooth. Это проект выходного дня, но его последствия стоит обдумать.
Bluehood — это Bluetooth-сканер, который:
? для просмотра)Требования — только Linux-хосты
Bluehood взаимодействует с Bluetooth-адаптером через BlueZ — стек Bluetooth для Linux. 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
Веб-панель будет доступна по адресу 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 работает нативно на macOS без Docker. macOS использует CoreBluetooth вместо BlueZ, что автоматически обрабатывается библиотекой 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
Веб-панель будет доступна по адресу http://localhost:8080
Примечание: При первом запуске macOS запросит разрешение на доступ к Bluetooth. Вы должны предоставить это разрешение для работы сканирования.
# Запуск с веб-панелью (порт по умолчанию 8080)
bluehood
# Указание другого порта
bluehood --port 9000
# Использование конкретного Bluetooth-адаптера
bluehood --adapter hci1
# Использование отдельных адаптеров для BLE и Classic сканирования (одновременно)
bluehood --adapter hci0 --classic-adapter hci1
# Список доступных адаптеров
bluehood --list-adapters
# Отключение веб-панели (только сканирование)
bluehood --no-web
# Включение экспортера метрик Prometheus на порту 9199
bluehood --metrics-port 9199
Панель предоставляет:
/settings#operations)Включите режим скриншота на боковой панели, чтобы скрыть чувствительные данные перед отправкой скриншотов:
AA:BB:XX:XX:XX:XX)Da********)Bluehood может отправлять push-уведомления через ntfy.sh — бесплатный сервис уведомлений с открытым исходным кодом.
bluehood-myname-alerts)Данные хранятся в ~/.local/share/bluehood/bluehood.db (SQLite).
Переопределить расположение можно с помощью переменных окружения:
BLUEHOOD_DATA_DIR — Директория для файлов данныхBLUEHOOD_DB_PATH — Прямой путь к файлу базы данныхПримечание: Настройки Heartbeat и очистки можно задать как через веб-интерфейс (Настройки > Операции), так и через переменные окружения. Значения в GUI имеют приоритет над переменными окружения.
Bluehood классифицирует устройства, используя несколько сигналов (в порядке приоритета):
Современные устройства рандомизируют свои MAC-адреса для конфиденциальности. Bluehood:
Bluehood анализирует временные метки обнаружений для выявления паттернов:
Примеры паттернов: «Ежедневно, вечера (17:00–21:00)», «Будни, утро (8:00–12:00)»
Bluehood обнаруживает устройства, которые часто появляются вместе в течение заданного временного окна. Это может выявить:
На основе уровня сигнала RSSI устройства классифицируются по зонам близости:
Отслеживает, сколько времени устройства проводят в зоне действия, анализируя промежутки между обнаружениями. Настраиваемый порог разрыва (по умолчанию 15 минут) определяет, когда начинается новый «сеанс».
Bluehood может экспортировать метрики для сбора Prometheus. Включите, задав переменную окружения BLUEHOOD_METRICS_PORT или флаг CLI --metrics-port.
# Через переменную окружения
export BLUEHOOD_METRICS_PORT=9199
# Через CLI
bluehood --metrics-port 9199
Метрики доступны по адресу http://host:9199/metrics.
Готовая к импорту панель Grafana находится в файле grafana/bluehood-dashboard.json. Импортируйте её через интерфейс Grafana (Панели > Импорт) или через 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Вклад приветствуется! Пожалуйста, открывайте Issue или PR на GitHub.
Лицензия MIT — Смотрите LICENSE для подробностей.
Этот инструмент предназначен только для образовательных целей. Помните о законах о конфиденциальности в вашей юрисдикции при мониторинге Bluetooth-устройств. Автор не несёт ответственности за любое неправомерное использование данного программного обеспечения.
Создано Danny McClelland
| Переменная | По умолчанию | Описание |
|---|
PUID | 1000 | UID для пользователя контейнера — установите равным вашему хост-пользователю (id -u) при использовании bind-монтирования |
PGID | 1000 | GID для группы контейнера — установите равным вашей хост-группе (id -g) при использовании bind-монтирования |
TZ | UTC | Часовой пояс контейнера (например, Europe/London) |
BLUEHOOD_ADAPTER | auto | Bluetooth-адаптер для BLE-сканирования (например, hci0) |
BLUEHOOD_CLASSIC_ADAPTER | тот же, что BLUEHOOD_ADAPTER | Отдельный адаптер для сканирования Classic Bluetooth (например, hci1). Если задан другой адаптер, BLE и Classic сканирования выполняются одновременно. |
BLUEHOOD_DATA_DIR | /data | Директория для хранения базы данных |
BLUEHOOD_METRICS_PORT | отключено | Порт Prometheus метрик (например, 9199) |
BLUEHOOD_HEARTBEAT_URL | отключено | URL для отправки heartbeat-проверок (например, URL push-уведомлений healthchecks.io или uptime-kuma) |
BLUEHOOD_HEARTBEAT_INTERVAL | 300 | Интервал между heartbeat-проверками в секундах |
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 | Уникальные устройства в БД (метка: 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 | Распределение RSSI BLE-устройств |
bluehood_build_info | Info | Информация о версии |