
Rastreador open source de frota fantasma do Mar Báltico. Mais de 1200 embarcações, AIS ao vivo, alertas de proximidade de cabos. Sem nuvem, sem assinatura, executa localmente
Monitoramento da frota sombra do Mar Báltico através de dados AIS ao vivo. Observa mais de 1200 embarcações do catálogo War&Sanctions da GUR ucraniana contra o feed WebSocket do AISStream, plota posições em um mapa auto-atualizável, sinaliza proximidade de cabos submarinos e detecta padrões de transbordo Rússia↔Ocidente.
Gratuito, código aberto, executa localmente. Sem nuvem, sem assinatura além de uma chave de API gratuita do AISStream.
Parte da cadeia de ferramentas de inteligência soberana do Former Lab.
O Shadow Fleet Tracker Light é construído e mantido pela equipe do Former Lab — computação soberana, construindo ferramentas abertas e focadas em privacidade em hardware antigo sem apoio de capital de risco.
Se esta ferramenta é útil para você, considere apoiar no Patreon. Um plano gratuito está disponível, com teste de 7 dias nos planos pagos. Apoie sempre a Ucrânia!
Postagem no blog sobre o rastreador, capturas de tela e mais: 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 # free at aisstream.io
python shadow_tracker.py &
uvicorn webserver:app --host 0.0.0.0 --port 8000
Abra http://localhost:8000 — o mapa está em /map.
Usuários do Windows: veja a seção Configuração para a sintaxe de variável de ambiente no PowerShell/cmd.
Usuários Linux/macOS podem usar start.sh. Usuários do Windows podem usar start.bat ou start.ps1 — ambos abrem o rastreador e o painel em janelas separadas e iniciam o navegador automaticamente.
Vessels1.db)filtered_cables.kml)Mapa base escuro do CartoDB com rotas de cabos sobrepostas em verde. Marcadores de embarcações são atualizados a cada 3 minutos com uma contagem regressiva ao vivo para a próxima atualização — a página recarrega automaticamente. Popups mostram MMSI, IMO, bandeira, velocidade, rumo, destino e links diretos para MarineTraffic, VesselFinder e War&Sanctions. Status de sanções do OpenSanctions exibido se uma chave de API estiver configurada.
Os nomes conhecidos de embarcações de Vessels1.db são exibidos imediatamente na primeira aparição, sem esperar por uma mensagem estática AIS.
Na inicialização, o mapa é pré-preenchido com as últimas 24 horas do registro de posição. Embarcações ainda não vistas na sessão atual são mostradas como marcadores cinza com um rótulo 'visto pela última vez Xh atrás' — elas transitam para cor viva à medida que novos pings chegam.
shadow_tracker.py Main process — WS consumer, map renderer, DB writes
loitering_module.py Loitering detection and map annotation
transshipment_module.py Port call detection and Russia↔West transshipment flagging
webserver.py FastAPI dashboard
gur_scrape.py One-shot scraper — builds IMO→GUR-ID mapping + full vessel catalogue
check.py Preflight checks — Python version, deps, API key, network
start.sh Launcher for Linux / macOS
start.bat Launcher for Windows (Command Prompt)
start.ps1 Launcher for Windows (PowerShell)
requirements.txt Dependencies
Vessels1.db Watchlist — 1200+ vessels (MMSI + IMO + name where known)
vessel_data_log.db Position log — runtime, append-only
vessel_static.db AIS static data cache (name, destination, flag history)
transshipment.db Port call log and transshipment events
loitering_events.db Loitering events
filtered_cables.kml Baltic Sea undersea cable geometry
cables.kml Full cable dataset (pre-filter source)
gur_mapping.json IMO→GUR-ID mapping (produced by gur_scrape.py, optional)
gur_vessels_full.json Full GUR catalogue — GUR-ID→{imo, mmsi, name, flag} (produced by gur_scrape.py)
Vessels1.db é a lista canônica de embarcações rastreadas. Mais de 1200 entradas provenientes do catálogo War&Sanctions da GUR ucraniana, cobrindo petroleiros e cargueiros identificados como parte da frota sombra russa ou implicados em atividades híbridas no Báltico.
A lista inclui embarcações recentemente apreendidas ou interceptadas por autoridades do Báltico:
| Embarcação | IMO | Evento |
|---|---|---|
| EAGLE S | 9329760 | Finlândia apreendeu Dez 2024 — sabotagem do cabo Estlink-2, equipamento de espionagem encontrado |
| EVENTIN | 9308065 | Alemanha apreendeu Jan–Mar 2025 — derivou perto de Rügen, 100.000t de petróleo bruto russo confiscado |
| KIWALA | 9332810 | Estônia deteve Abr 2025 — sem bandeira, sancionado pela UE/Reino Unido |
| JAGUAR | 9293002 | Estônia interceptou Mai 2025 — Rússia mobilizou Su-35 para escoltá-lo |
| KIRA K | 9346720 | Tripulação Wagner/GRU confirmada a bordo Dez 2025 |
| QENDIL | 9310525 | Tripulação Wagner/GRU Set 2025 — ataque de drone ucraniano Dez 2025 |
| FITBURG | 9250397 | Finlândia apreendeu 31 Dez 2025 — sabotagem do cabo Helsinque-Tallinn |
| CAFFA | 9143611 | Suécia apreendeu 6 Mar 2026 — grão ucraniano roubado, bandeira falsa |
| SEA OWL I | 9321172 | Suécia apreendeu 12 Mar 2026 — sancionado pela UE, bandeira falsa de Comores |
Os MMSIs são corrigidos com base nos dados AIS atuais — as embarcações da frota sombra mudam de bandeira com frequência. O arquivo update_vessels_2026_03.sql documenta todas as alterações com fontes.
A lista de observação é intencionalmente aberta. Adicione embarcações diretamente ao Vessels1.db enquanto o rastreador estiver em execução — elas serão detectadas em até 5 minutos sem necessidade de reinicialização.
Linux / macOS:
sqlite3 Vessels1.db "INSERT OR IGNORE INTO vessels (mmsi, imo, name) VALUES ('123456789', '9999999', 'VESSEL NAME');"
Windows (no sqlite3 CLI needed):
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 observação
vessels(mmsi TEXT PK, imo TEXT, name TEXT, destination TEXT)
vessel_data_log.db — registro de posição
vessel_data_log(timestamp, mmsi, name, imo, destination, speed, heading, latitude, longitude, cable_alert)
Somente anexação. Escrito a cada ciclo de renderização do mapa.