
متعقب مفتوح المصدر لأسطول الظل في بحر البلطيق. أكثر من 1200 سفينة، نظام AIS المباشر، تنبيهات القرب من الكابلات. لا سحابة، لا اشتراك، يعمل محلياً.
مراقبة الأسطول الظل في بحر البلطيق عبر بيانات AIS الحية. يراقب أكثر من 1200 سفينة من كتالوج العقوبات والحرب الأوكراني GUR مقابل تغذية WebSocket الخاصة بـ AISStream، ويعرض المواقع على خريطة محدثة ذاتيًا، ويُنبّه عند الاقتراب من الكابلات تحت البحر، ويكشف أنماط الشحن بين روسيا والغرب.
مجاني، مفتوح المصدر، يعمل محليًا. لا سحابة، لا اشتراك سوى مفتاح API مجاني من AISStream.
جزء من سلسلة أدوات الاستخبارات السيادية Former Lab.
متعقب الأسطول الظل الخفيف مبني ومُصان بواسطة فريق Former Lab — حوسبة سيادية، بناء أدوات مفتوحة تراعي الخصوصية على أجهزة قديمة دون دعم من رأس المال الاستثماري.
إذا كانت هذه الأداة مفيدة لك، ففكّر في دعمنا على Patreon. تتوفر طبقة مجانية، مع نسخة تجريبية لمدة 7 أيام على الطبقات المدفوعة. ادعم أوكرانيا دائمًا!
git clone https://github.com/FormerLab/shadow-fleet-tracker-light.git
cd shadow-fleet-tracker-light
pip install -r requirements.txt
export AISSTREAM_API_KEY=your_key_here # مجاني على aisstream.io
python shadow_tracker.py &
uvicorn webserver:app --host 0.0.0.0 --port 8000
افتح http://localhost:8000 — الخريطة على /map.
مستخدمو Windows: راجع قسم الإعداد لصياغة متغيرات البيئة في PowerShell/cmd.
يمكن لمستخدمي Linux / macOS استخدام start.sh. يمكن لمستخدمي Windows استخدام start.bat أو start.ps1 — كلاهما يفتح المتعقب ولوحة القيادة في نوافذ منفصلة ويشغّل المتصفح تلقائيًا.
Vessels1.db)filtered_cables.kml)خريطة أساسية CartoDB داكنة مع مسارات الكابلات متراكبة باللون الأخضر. علامات السفن تُحدّث كل 3 دقائق مع عدّاد تنازلي حي للتحديث التالي — تُعاد تحميل الصفحة تلقائيًا. تظهر النوافذ المنبثقة MMSI، IMO، العلم، السرعة، الاتجاه، الوجهة، وروابط عميقة إلى MarineTraffic وVesselFinder وWar&Sanctions. حالة عقوبات OpenSanctions تُظهر إذا تم تكوين مفتاح API.
أسماء السفن المعروفة من Vessels1.db تظهر فورًا عند أول ظهور دون انتظار رسالة AIS ثابتة.
عند بدء التشغيل، تُملأ الخريطة مسبقًا من آخر 24 ساعة من سجل المواقع. السفن التي لم تُرَ بعد في الجلسة الحالية تظهر كعلامات رمادية مع تسمية "شوهدت آخر مرة منذ X ساعات" — تتحول إلى اللون الحي عند وصول نقاط جديدة.
shadow_tracker.py العملية الرئيسية — مستهلك WS، معالج الخريطة، كتابات DB
loitering_module.py كشف التباطؤ وتعليق الخريطة
transshipment_module.py كشف زيارات الموانئ ووضع علامات الشحن بين روسيا والغرب
webserver.py لوحة قيادة FastAPI
gur_scrape.py أداة مسح لمرة واحدة — بناء تعيين IMO→GUR-ID + كتالوج كامل للسفن
check.py فحوصات أولية — إصدار Python، التبعيات، مفتاح API، الشبكة
start.sh مُشغّل لنظام Linux / macOS
start.bat مُشغّل لنظام Windows (Command Prompt)
start.ps1 مُشغّل لنظام Windows (PowerShell)
requirements.txt التبعيات
Vessels1.db قائمة المراقبة — أكثر من 1200 سفينة (MMSI + IMO + اسم حيث عُرف)
vessel_data_log.db سجل المواقع — زمن التشغيل، إلحاق فقط
vessel_static.db ذاكرة تخزين مؤقت لبيانات AIS الثابتة (الاسم، الوجهة، تاريخ العلم)
transshipment.db سجل زيارات الموانئ وأحداث الشحن
loitering_events.db أحداث التباطؤ
filtered_cables.kml هندسة الكابلات تحت البحر في بحر البلطيق
cables.kml مجموعة بيانات الكابلات الكاملة (مصدر ما قبل التصفية)
gur_mapping.json تعيين IMO→GUR-ID (يُنتج بواسطة gur_scrape.py، اختياري)
gur_vessels_full.json كتالوج GUR الكامل — GUR-ID→{imo, mmsi, name, flag} (يُنتج بواسطة gur_scrape.py)
Vessels1.db هي القائمة الأساسية للسفن المُتتبعة. أكثر من 1200 إدخال مأخوذ من كتالوج العقوبات والحرب الأوكراني GUR، تغطي ناقلات وسفن شحن تم تحديدها كجزء من الأسطول الظل الروسي أو متورطة في أنشطة هجينة في بحر البلطيق.
تتضمن القائمة سفن تم الاستيلاء عليها أو اعتراضها مؤخرًا من قبل سلطات البلطيق:
| السفينة | IMO | الحدث |
|---|---|---|
| EAGLE S | 9329760 | استولت عليها فنلندا ديسمبر 2024 — تخريب كابل Estlink-2، معدات تجسس عُثر عليها |
| EVENTIN | 9308065 | استولت عليها ألمانيا يناير-مارس 2025 — انجرفت قبالة Rügen، صودرت 100,000 طن من النفط الروسي |
| KIWALA | 9332810 | احتجزتها إستونيا أبريل 2025 — بلا علم، خاضعة لعقوبات الاتحاد الأوروبي/المملكة المتحدة |
| JAGUAR | 9293002 | اعترضتها إستونيا مايو 2025 — أرسلت روسيا طائرة Su-35 لمرافقتها |
| KIRA K | 9346720 | تأكيد طاقم فاغنر/GRU على متنها ديسمبر 2025 |
| QENDIL | 9310525 | طاقم فاغنر/GRU سبتمبر 2025 — ضربة طائرة مسيرة أوكرانية ديسمبر 2025 |
| FITBURG | 9250397 | استولت عليها فنلندا 31 ديسمبر 2025 — تخريب كابل هلسنكي-تالين |
| CAFFA | 9143611 | استولت عليها السويد 6 مارس 2026 — حبوب أوكرانية مسروقة، علم مزيف |
| SEA OWL I | 9321172 | استولت عليها السويد 12 مارس 2026 — خاضعة لعقوبات الاتحاد الأوروبي، علم جزر القمر مزيف |
يتم تصحيح MMSIs مقابل بيانات AIS الحالية — سفن الأسطول الظل تغير أعلامها بشكل متكرر. يوثق ملف update_vessels_2026_03.sql جميع التغييرات مع المصادر.
قائمة المراقبة مفتوحة عن قصد. يمكنك إضافة سفن مباشرة إلى Vessels1.db أثناء تشغيل المتعقب — سيتم التقاطها في غضون 5 دقائق دون إعادة تشغيل.
Linux / macOS:
sqlite3 Vessels1.db "INSERT OR IGNORE INTO vessels (mmsi, imo, name) VALUES ('123456789', '9999999', 'VESSEL NAME');"
Windows (بدون الحاجة لواجهة sqlite3 CLI):
import sqlite3
conn = sqlite3.connect("Vessels1.db")
conn.execute("INSERT OR IGNORE INTO vessels (mmsi, imo, name) VALUES ('123456789', '9999999', 'VESSEL NAME')")
conn.commit()
conn.close()
Vessels1.db — قائمة المراقبة
vessels(mmsi TEXT PK, imo TEXT, name TEXT, destination TEXT)
vessel_data_log.db — سجل المواقع
vessel_data_log(timestamp, mmsi, name, imo, destination, speed, heading, latitude, longitude, cable_alert)
إلحاق فقط. يُكتب في كل دورة عرض خريطة.
vessel_static.db — ذاكرة تخزين مؤقت لبيانات AIS الثابتة
vessel_static(mmsi TEXT PK, name TEXT, imo TEXT, destination TEXT, flag TEXT)
flag_history(id, mmsi, flag, timestamp)
يُملأ من رسائل ShipStaticData الحية. يأخذ الأولوية على أسماء Vessels1.db بمجرد استلامه. يسجل flag_history كل تغيير علم مع طابع زمني — يتم تسجيل وتغيير العلم وعرضه في صفحة السفينة الفردية.
loitering_events.db — سجل التباطؤ (يُنشأ أثناء التشغيل)
loitering_events(id, mmsi, timestamp, latitude, longitude, near_cable)
transshipment.db — سجل زيارات الموانئ والشحن (يُنشأ أثناء التشغيل)
port_calls(id, mmsi, name, port, port_type, entry_ts, exit_ts, min_speed)
transshipment_events(id, mmsi, name, direction, from_port, from_exit_ts,
to_port, to_entry_ts, days_between, detected_ts)
requirements.txt