
راقب نشاط البلوتوث في حيك المحلي
حي بلوتوث - تتبع أجهزة BLE في منطقتك وتحليل أنماط حركة المرور.
تحذير: برنامج ألفا
هذا المشروع في مرحلة التطوير المبكر وليس جاهزًا للاستخدام الإنتاجي. قد تتغير الميزات أو تتعطل أو تُزال دون إشعار. استخدمه على مسؤوليتك الخاصة. يجب التعامل مع البيانات التي تم جمعها كبيانات تجريبية.
لوحة التحكم الرئيسية تعرض قائمة الأجهزة مع خيارات التصفية والبحث والإحصائيات الفورية
صفحة الإعدادات بعلامات تبويب — التنبيهات، العمليات، المجموعات، والأمان
صفحة المعلومات التي تعرض تفاصيل المشروع ونظرة عامة على الإمكانيات
هذا المشروع مستوحى من ثغرة WhisperPair (CVE-2025-36911)، التي سلطت الضوء على مخاطر الخصوصية في أجهزة البلوتوث.
آلاف أجهزة البلوتوث تحيط بنا في جميع الأوقات: الهواتف، السيارات، أجهزة التلفاز، سماعات الرأس، أجهزة السمع، مركبات التوصيل، وغيرها. يوضح Bluehood مدى سهولة الكشف السلبي عن هذه الأجهزة ومراقبة أنماط وجودها.
مع كمية كافية من البيانات، يمكنك نظريًا:
يمكن لهذه البيانات الوصفية أن تكشف معلومات شخصية مفاجئة دون أي تفاعل نشط مع الأجهزة.
Bluehood هو أداة تعليمية لزيادة الوعي حول خصوصية البلوتوث. إنه مشروع عطلة نهاية أسبوع، لكن الآثار تستحق التفكير فيها.
Bluehood هو ماسح بلوتوث يقوم بما يلي:
? للعرض)المتطلبات الأساسية — أنظمة Linux فقط
يتواصل Bluehood مع محول البلوتوث الخاص بك عبر BlueZ، حزمة بلوتوث لينكس. يجب تثبيت 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)ملاحظة: المحولات القديمة (بلوتوث 2.x/3.x) لا تدعم مسح BLE. إذا كان محولك يفتقر إلى دعم دور BLE المركزي، سترى:
No Bluetooth adapters with BLE 'central' role found.
ملاحظة: يعمل Docker في الوضع المميز مع شبكة المضيف للوصول إلى البلوتوث. هذا مطلوب لمسح BLE.
يتطلب Bluehood محول بلوتوث يدعم BLE (بلوتوث 4.0 أو أحدث) مع دعم دور المركزي (Central). المحولات القديمة بلوتوث 2.x/3.x لا تدعم مسح BLE ولن تعمل.
إذا كان محولك لا يدعم دور BLE المركزي، سيخرج 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 .
يتطلب مسح البلوتوث صلاحيات مرتفعة. اختر أحد الخيارات:
التشغيل كجذر (الأبسط):
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 السماح بالوصول إلى البلوتوث. يجب عليك منح هذا الإذن لكي يعمل المسح.
# التشغيل مع لوحة تحكم الويب (المنفذ الافتراضي 8080)
bluehood
# تحديد منفذ مختلف
bluehood --port 9000
# استخدام محول بلوتوث معين
bluehood --adapter hci1
# استخدام محولات منفصلة لمسح BLE والكلاسيكي (متزامن)
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 إرسال إشعارات لحظية عبر ntfy.sh، خدمة إشعارات مجانية ومفتوحة المصدر.
bluehood-myname-alerts)يتم تخزين البيانات في ~/.local/share/bluehood/bluehood.db (SQLite).
تجاوز الموقع باستخدام متغيرات البيئة:
BLUEHOOD_DATA_DIR - دليل ملفات البياناتBLUEHOOD_DB_PATH - مسار مباشر لملف قاعدة البياناتملاحظة: يمكن تكوين إعدادات نبض القلب والتقليم من واجهة الويب (الإعدادات > العمليات) أو عبر متغيرات البيئة. قيم واجهة المستخدم تأخذ الأولوية على متغيرات البيئة.
يصّنف Bluehood الأجهزة باستخدام إشارات متعددة (حسب الأولوية):
تقوم الأجهزة الحديثة بتعشية عناوين MAC الخاصة بها للخصوصية. يقوم Bluehood بما يلي:
يحلل Bluehood الطوابع الزمنية للمشاهدات لكشف الأنماط:
أمثلة على الأنماط: "يومي، مساءً (5م-9م)"، "أيام الأسبوع، صباحًا (8ص-12م)"
يكتشف Bluehood الأجهزة التي تظهر معًا بشكل متكرر خلال نافذة زمنية قابلة للتكوين. يمكن أن يكشف هذا عن:
بناءً على قوة إشارة RSSI، تصنف الأجهزة إلى مناطق قرب:
يتتبع المدة التي تقضيها الأجهزة في النطاق من خلال تحليل الفجوات بين المشاهدات. حد فجوة قابل للتكوين (الافتراضي 15 دقيقة) يحدد متى تبدأ "جلسة" جديدة.
يمكن لـ Bluehood عرض مقاييس لجمعها بواسطة Prometheus. قم بتمكينه عن طريق تعيين متغير البيئة BLUEHOOD_METRICS_PORT أو علامة --metrics-port في CLI.
# عبر متغير البيئة
export BLUEHOOD_METRICS_PORT=9199
# عبر CLI
bluehood --metrics-port 9199
يتم تقديم المقاييس على http://host:9199/metrics.
تم تضمين لوحة تحكم Grafana جاهزة للاستيراد في grafana/bluehood-dashboard.json. قم باستيرادها عبر واجهة Grafana (Dashboards > Import) أو عبر 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 للتفاصيل.
هذه الأداة مخصصة للأغراض التعليمية فقط. كن على دراية بقوانين الخصوصية في منطقتك عند مراقبة أجهزة البلوتوث. المؤلف ليس مسؤولاً عن أي استخدام سيء لهذا البرنامج.
تم الإنشاء بواسطة Danny McClelland
| المتغير | القيمة الافتراضية | الوصف |
|---|
PUID | 1000 | UID لمستخدم الحاوية — قم بتعيينه ليطابق مستخدم المضيف (id -u) عند استخدام روابط التثبيت |
PGID | 1000 | GID لمستخدم الحاوية — قم بتعيينه ليطابق مجموعة المضيف (id -g) عند استخدام روابط التثبيت |
TZ | UTC | منطقة زمنية للحاوية (مثل Europe/London) |
BLUEHOOD_ADAPTER | auto | محول بلوتوث لمسح BLE (مثل hci0) |
BLUEHOOD_CLASSIC_ADAPTER | نفس BLUEHOOD_ADAPTER | محول منفصل لمسح البلوتوث الكلاسيكي (مثل hci1). عند تعيينه لمحول مختلف، تعمل عمليات مسح BLE والكلاسيكي بشكل متزامن. |
BLUEHOOD_DATA_DIR | /data | دليل تخزين قاعدة البيانات |
BLUEHOOD_METRICS_PORT | معطل | منفذ مقاييس Prometheus (مثل 9199) |
BLUEHOOD_HEARTBEAT_URL | معطل | عنوان URL لإرسال فحوصات نبض القلب (مثل عنوان push في healthchecks.io أو uptime-kuma) |
BLUEHOOD_HEARTBEAT_INTERVAL | 300 | الثواني بين فحوصات نبض القلب |
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 | معلومات الإصدار |