
Rastreador de flota fantasma del mar Báltico de código abierto. Más de 1200 buques, AIS en vivo, alertas de proximidad a cables. Sin nube, sin suscripción, se ejecuta localmente.
Monitoreo de la flota fantasma del Mar Báltico mediante datos AIS en vivo. Observa más de 1200 embarcaciones del catálogo GUR de Ucrania sobre Guerra y Sanciones contra el feed WebSocket de AISStream, traza posiciones en un mapa que se actualiza solo, señala la proximidad a cables submarinos y detecta patrones de transbordo Rusia↔Occidente.
Gratuito, de código abierto, se ejecuta localmente. Sin nube, sin suscripción más allá de una clave API gratuita de AISStream.
Parte de la cadena de herramientas de inteligencia soberana de Former Lab.
Shadow Fleet Tracker Light es desarrollado y mantenido por el equipo de Former Lab — computación soberana, construyendo herramientas abiertas y centradas en la privacidad en hardware antiguo sin respaldo de capital de riesgo.
Si esta herramienta te resulta útil, considera apoyar en Patreon. Hay un nivel gratuito disponible, con una prueba de 7 días en los niveles de pago. ¡Siempre apoya a Ucrania!
Entrada de blog sobre el rastreador, capturas de pantalla y más: https://www.patreon.com/posts/153285871
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 # gratis en aisstream.io
python shadow_tracker.py &
uvicorn webserver:app --host 0.0.0.0 --port 8000
Abre http://localhost:8000 — el mapa está en /map.
Usuarios de Windows: consulta la sección Configuración para la sintaxis de variables de entorno en PowerShell/cmd.
Usuarios de Linux / macOS pueden usar start.sh. Usuarios de Windows pueden usar start.bat o start.ps1 — ambos abren el rastreador y el panel en ventanas separadas e inician el navegador automáticamente.
Vessels1.db)filtered_cables.kml)Mapa base oscuro de CartoDB con rutas de cables superpuestas en verde. Los marcadores de embarcaciones se actualizan cada 3 minutos con una cuenta regresiva en vivo hasta la siguiente actualización — la página se recarga automáticamente. Las ventanas emergentes muestran MMSI, IMO, bandera, velocidad, rumbo, destino y enlaces profundos a MarineTraffic, VesselFinder y War&Sanctions. El estado de sanciones de OpenSanctions se muestra si se ha configurado una clave API.
Los nombres de embarcaciones conocidos de Vessels1.db se muestran inmediatamente en la primera aparición sin esperar un mensaje estático AIS.
Al inicio, el mapa se puebla previamente con las últimas 24 horas del registro de posiciones. Las embarcaciones no vistas aún en la sesión actual se muestran como marcadores grises con una etiqueta "visto por última vez hace Xh" — pasan a color vivo a medida que llegan nuevos pings.
shadow_tracker.py Proceso principal — consumidor WS, renderizador de mapa, escrituras DB
loitering_module.py Detección de merodeo y anotación en mapa
transshipment_module.py Detección de escalas en puertos y señalización de transbordos Rusia↔Occidente
webserver.py Panel FastAPI
gur_scrape.py Recopilador único — construye mapeo IMO→ID GUR + catálogo completo de embarcaciones
check.py Verificaciones previas — versión de Python, dependencias, clave API, red
start.sh Lanzador para Linux / macOS
start.bat Lanzador para Windows (Símbolo del sistema)
start.ps1 Lanzador para Windows (PowerShell)
requirements.txt Dependencias
Vessels1.db Lista de vigilancia — más de 1200 embarcaciones (MMSI + IMO + nombre cuando se conoce)
vessel_data_log.db Registro de posiciones — solo añadir, en tiempo de ejecución
vessel_static.db Caché de datos estáticos AIS (nombre, destino, historial de bandera)
transshipment.db Registro de escalas en puertos y eventos de transbordo
loitering_events.db Eventos de merodeo
filtered_cables.kml Geometría de cables submarinos del Mar Báltico
cables.kml Conjunto completo de cables (fuente previa al filtro)
gur_mapping.json Mapeo IMO→ID GUR (producido por gur_scrape.py, opcional)
gur_vessels_full.json Catálogo GUR completo — ID GUR→{imo, mmsi, name, flag} (producido por gur_scrape.py)
Vessels1.db es la lista canónica de embarcaciones rastreadas. Más de 1200 entradas obtenidas del catálogo GUR de Ucrania sobre Guerra y Sanciones, que cubre petroleros y buques de carga identificados como parte de la flota fantasma rusa o implicados en actividades híbridas en el Báltico.
La lista incluye embarcaciones recientemente incautadas o interceptadas por autoridades bálticas:
| Embarcación | IMO | Evento |
|---|---|---|
| EAGLE S | 9329760 | Finlandia incautó dic 2024 — sabotaje del cable Estlink-2, equipo de espionaje encontrado |
| EVENTIN | 9308065 | Alemania incautó ene–mar 2025 — derivó frente a Rügen, 100 000 t de crudo ruso confiscadas |
| KIWALA | 9332810 | Estonia detuvo abr 2025 — sin bandera, sancionada por UE/Reino Unido |
| JAGUAR | 9293002 | Estonia interceptó may 2025 — Rusia desplegó Su-35 para escoltarlo |
| KIRA K | 9346720 | Tripulación de Wagner/GRU confirmada a bordo dic 2025 |
| QENDIL | 9310525 | Tripulación de Wagner/GRU sep 2025 — ataque de dron ucraniano dic 2025 |
| FITBURG | 9250397 | Finlandia incautó 31 dic 2025 — sabotaje del cable Helsinki-Tallin |
| CAFFA | 9143611 | Suecia incautó 6 mar 2026 — grano ucraniano robado, bandera falsa |
| SEA OWL I | 9321172 | Suecia incautó 12 mar 2026 — sancionada por UE, bandera falsa de Comoras |
Los MMSI se corrigen con los datos AIS actuales — los buques de la flota fantasma cambian de bandera con frecuencia. El archivo update_vessels_2026_03.sql documenta todos los cambios con fuentes.
La lista de vigilancia está intencionalmente abierta. Añade embarcaciones directamente a Vessels1.db mientras el rastreador está en ejecución — serán recogidas en menos de 5 minutos sin necesidad de reiniciar.
Linux / macOS:
sqlite3 Vessels1.db "INSERT OR IGNORE INTO vessels (mmsi, imo, name) VALUES ('123456789', '9999999', 'VESSEL NAME');"
Windows (sin necesidad de CLI sqlite3):
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 — lista de vigilancia
vessels(mmsi TEXT PK, imo TEXT, name TEXT, destination TEXT)