
Dashboard di fusione dell'intelligence multi-sorgente — feed WiFi, cellulari, CCTV, ADS-B, orbitali e SDR unificati in un'unica mappa tattica. Solo per ricerca sulla sicurezza.
Una piattaforma di fusione di intelligence sui segnali a spettro completo e multi-sorgente per la ricerca e la formazione sulla sicurezza. Signal OPS raccoglie decine di fonti di raccolta aperte — database WiFi/Bluetooth/stazioni cellulari, scanner di esposizione internet, indici di telecamere, feed di volo ADS-B, tracciamento satellitare TLE e reti SDR/APRS — in un'unica mappa tattica e API Flask, correlando i domini RF, cellulare, spazio aereo, orbitale e di sorveglianza in un unico quadro operativo in tempo reale, con riepiloghi opzionali delle minacce assistiti da AI sovrapposti.
Quasi ogni sorgente è opzionale. Se una chiave non è impostata, quel fetcher viene saltato con garbo — le sorgenti gratuite (OpenStreetMap, Insecam, ipinfo.io, ADS-B, CelesTrak, KiwiSDR) funzionano senza alcuna chiave.
La mappa principale fonde i layer WiFi, Bluetooth, cellulare, telecamere e aeromobili sulla stessa area, con overlay attivabili per telecamere OSM, reti ALPR/Flock e distretti di polizia.


| Feed di sorveglianza | Scoperta CCTV |
|---|---|
![]() | ![]() |
L'elenco di sorveglianza valuta ogni dispositivo (es. "Sospetto 35/100: telecamera non autenticata") e fonde router, TV e telecamere esposte da WiGLE, Insecam e OSM. La vista CCTV raggruppa le telecamere scoperte per sorgente con rischio per singola telecamera e stato live/metadati.
| Mappa di calore stazioni cellulari | Rete SDR / APRS |
|---|---|
![]() | ![]() |
Dipendenze principali:
flask
requests
python-dotenv
Consigliati (abilitano la piena funzionalità — caching, rate limiting, propagazione satellitare):
cachetools # geo-cache limitata (ripiega su un dict illimitato se mancante)
flask-limiter # rate limiting delle richieste
sgp4 # propagazione posizione satellitare per /api/satellites
google-genai # analisi AI Gemini (solo se usi GEMINI_API_KEY)
Installa tutto:
pip install flask requests python-dotenv cachetools flask-limiter sgp4 google-genai
git https://github.com/emrekybs/signalops.git
unzip signalops-v1.zip
python -m venv venv
source venv/bin/activate # Windows: venv\Scripts\activate
pip install -r requirements.txt
Se non hai un requirements.txt, usa la riga pip install della sezione Requisiti sopra.
Copia il file di esempio e inserisci le chiavi che hai:
cp .env.example .env
Poi apri .env e incolla le tue chiavi API. Ogni chiave è opzionale — lascia vuota qualsiasi riga (o cancellala) per disabilitare quella sorgente. Vedi la sezione successiva per cosa fa ciascuna e dove ottenerla.
Per ricerche istantanee offline di telecamere e distretti, posiziona questi file in una directory data/ (o punta DATA_DIR altrove):
data/CAMERAS_WITH_NETWORK_DATA.geojson # Feature Point (telecamere)
data/police_precincts_usa.geojson # Feature Polygon (distretti USA)
data/camera_networks.json # metadati condivisione rete
data/tiles/{z}/{x}/{y}.json # dataset telecamere a tile opzionale
Se questi file sono assenti, l'app ripiega automaticamente su query live OpenStreetMap Overpass.
python app_v2.py
Il server si avvia su http://0.0.0.0:8080. Apri http://localhost:8080 nel tuo browser.
Controlla quali provider sono stati caricati correttamente in qualsiasi momento:
GET /api/status # chiavi attive vs. mancanti
GET /api/debug # booleano per chiave + test auth WiGLE live
Crea un file .env nella radice del progetto. Di seguito l'elenco completo letto dall'app.
Queste non richiedono configurazione: OpenStreetMap Overpass, Insecam, EarthCam, ipinfo.io, ADS-B (adsb.fi / OpenSky), CelesTrak TLE, SatNOGS e KiwiSDR.
.env.exampleSalva questo come .env.example nel tuo repository così gli altri conoscono il formato:
# ── Ambiente Signal OPS ──
# Ogni chiave è opzionale. Lascia vuoto per disabilitare quella sorgente.
# WiFi / Bluetooth / Cellulare
WIGLE_API_NAME=
WIGLE_API_TOKEN=
OPENCELLID_API_KEY=
# Scanner esposizione internet
SHODAN_API_KEY=
CENSYS_API_ID=
CENSYS_API_SECRET=
ZOOMEYE_API_KEY=
FOFA_EMAIL=
FOFA_API_KEY=
HUNTERHOW_API_KEY=
NETLAS_API_KEY=
LEAKIX_API_KEY=
CRIMINALIP_API_KEY=
BINARYEDGE_API_KEY=
# Telecamere e reputazione IP
WINDY_API_KEY=
ABUSEIPDB_API_KEY=
# Aeromobili e radioamatori
ADSB_API_KEY=
APRS_FI_KEY=
# Analisi AI
GEMINI_API_KEY=
GEMINI_MODEL=gemini-2.0-flash
# Configurazione app
DATA_DIR=./data
FLASK_SECRET_KEY=
Una selezione degli endpoint esposti (vedi il sorgente per l'insieme completo):
| Variabile | Provider | Ottieni una chiave su |
|---|
WIGLE_API_NAME | WiGLE (WiFi/BT/cellulare) — nome utente | https://wigle.net/account |
WIGLE_API_TOKEN | WiGLE — token API | https://wigle.net/account |
OPENCELLID_API_KEY | OpenCellID (stazioni cellulari) | https://opencellid.org |
SHODAN_API_KEY | Shodan (esposizione / telecamere) | https://account.shodan.io |
CENSYS_API_ID | Censys — API ID | https://search.censys.io/account/api |
CENSYS_API_SECRET | Censys — segreto API | https://search.censys.io/account/api |
ZOOMEYE_API_KEY | ZoomEye | https://www.zoomeye.org/profile |
FOFA_EMAIL | FOFA — email account | https://fofa.info |
FOFA_API_KEY | FOFA — chiave API | https://fofa.info |
HUNTERHOW_API_KEY | Hunter.how | https://hunter.how |
NETLAS_API_KEY | Netlas | https://netlas.io |
LEAKIX_API_KEY | LeakIX | https://leakix.net |
CRIMINALIP_API_KEY | CriminalIP | https://www.criminalip.io |
BINARYEDGE_API_KEY | BinaryEdge | https://www.binaryedge.io |
WINDY_API_KEY | Windy Webcams | https://api.windy.com/keys |
ABUSEIPDB_API_KEY | AbuseIPDB (reputazione IP) | https://www.abuseipdb.com/account/api |
ADSB_API_KEY | adsb.fi (opzionale; funziona senza) | https://adsb.fi |
APRS_FI_KEY | APRS.fi (stazioni radioamatoriali) | https://aprs.fi/page/api_key |
GEMINI_API_KEY | Google Gemini (analisi AI) | https://aistudio.google.com/apikey |
| Variabile | Default | Descrizione |
|---|
GEMINI_MODEL | gemini-2.0-flash | Modello Gemini usato per l'analisi |
DATA_DIR | ./data | Directory per dataset locali GeoJSON/JSON |
FLASK_SECRET_KEY | casuale per esecuzione | Segreto sessione Flask; imposta un valore fisso in produzione |
| Endpoint | Scopo |
|---|
GET /nearby?lat=&lon=&mode= | Scansione RF/OSINT unificata attorno a un punto |
GET /api/cctv?lat=&lon= o ?country= | Scoperta telecamere per posizione o paese |
GET /api/search?type=&query= | Ricerca per SSID, IP, posizione o paese |
POST /api/analyze | Riepilogo AI di un elenco di dispositivi |
GET /api/ip-intel?ip= | Intelligence minacce IP multi-sorgente |
GET /api/adsb?lat=&lon=&radius= | Aeromobili live + rilevamento emergenze |
GET /api/satellites?categories= | Posizioni satellitari (TLE + SGP4) |
GET /api/gps-jamming?lat=&lon= | Mappa di calore GPS-jamming da ADS-B |
GET /api/sdr/kiwisdr | Elenco ricevitori pubblici KiwiSDR |
GET /api/aprs/stations?lat=&lon= | Stazioni APRS vicine |
GET/POST /api/watchlist | Gestisci identificatori tracciati |
POST /api/watchlist/check | Controlla un elenco di dispositivi contro la watchlist |
GET /api/status · GET /api/debug | Salute provider / diagnostica chiavi |