
# Tableau de bord de fusion de renseignements toutes sources — WiFi, cellulaire, CCTV, ADS-B, orbital et flux SDR unifiés en une seule carte tactique. Recherche en sécurité uniquement.
Une plateforme de fusion de renseignements d'origine électromagnétique (ROEM) tous azimuts et toutes sources, conçue pour la recherche et la formation en sécurité. Signal OPS agrège des dizaines de sources ouvertes de collecte — bases de données WiFi/Bluetooth/antennes-relais, scanners d'exposition Internet, index de caméras, flux de vols ADS-B, suivi orbital par TLE satellite, et réseaux SDR/APRS — dans une carte tactique unique et une API Flask, corrélant les domaines RF, cellulaire, aérien, orbital et de surveillance en une seule image opérationnelle en temps réel, avec des résumés de menaces assistés par IA en option.
Presque toutes les sources sont optionnelles. Si une clé n'est pas définie, ce collecteur est ignoré avec élégance — les sources gratuites (OpenStreetMap, Insecam, ipinfo.io, ADS-B, CelesTrak, KiwiSDR) fonctionnent sans aucune clé.
La carte principale fusionne les couches WiFi, Bluetooth, cellulaire, caméras et aéronefs sur la même zone, avec des superpositions activables pour les caméras OSM, les réseaux ALPR/Flock et les commissariats de police.


| Flux de surveillance | Découverte CCTV |
|---|---|
![]() | ![]() |
La liste de surveillance score chaque appareil (par ex. « Suspicion 35/100 : caméra non authentifiée ») et fusionne les routeurs, téléviseurs et caméras exposés provenant de WiGLE, Insecam et OSM. La vue CCTV regroupe les caméras découvertes par source avec un risque par caméra et un statut en direct/métadonnées.
| Carte de chaleur des antennes-relais | Réseau SDR / APRS |
|---|---|
![]() | ![]() |
Dépendances principales :
flask
requests
python-dotenv
Recommandé (active toutes les fonctionnalités — mise en cache, limitation de débit, propagation satellite) :
cachetools # cache géographique borné (repli sur un dict non borné s'il manque)
flask-limiter # limitation de débit des requêtes
sgp4 # propagation de position satellite pour /api/satellites
google-genai # analyse IA Gemini (uniquement si vous utilisez GEMINI_API_KEY)
Installez tout :
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
Si vous n'avez pas de requirements.txt, utilisez la ligne pip install de la section Prérequis ci-dessus.
Copiez le fichier d'exemple et remplissez les clés que vous possédez :
cp .env.example .env
Ouvrez ensuite .env et collez vos clés API. Chaque clé est optionnelle — laissez toute ligne vide (ou supprimez-la) pour désactiver cette source. Voir la section suivante pour savoir à quoi sert chacune et où l'obtenir.
Pour des recherches instantanées hors ligne de caméras et de commissariats, placez ces fichiers dans un répertoire data/ (ou pointez DATA_DIR ailleurs) :
data/CAMERAS_WITH_NETWORK_DATA.geojson # entités ponctuelles (caméras)
data/police_precincts_usa.geojson # entités polygonales (commissariats US)
data/camera_networks.json # métadonnées de partage de réseaux
data/tiles/{z}/{x}/{y}.json # jeu de données de caméras en tuiles (optionnel)
Si ces fichiers sont absents, l'application retombe automatiquement sur les requêtes Overpass OpenStreetMap en direct.
python app_v2.py
Le serveur démarre sur http://0.0.0.0:8080. Ouvrez http://localhost:8080 dans votre navigateur.
Vérifiez quels fournisseurs ont été chargés avec succès à tout moment :
GET /api/status # clés actives vs. manquantes
GET /api/debug # booléen par clé + test d'authentification WiGLE en direct
Créez un fichier .env à la racine du projet. Voici la liste complète lue par l'application.
Ces sources ne nécessitent aucune configuration : OpenStreetMap Overpass, Insecam, EarthCam, ipinfo.io, ADS-B (adsb.fi / OpenSky), CelesTrak TLE, SatNOGS et KiwiSDR.
.env.exampleEnregistrez ceci sous .env.example dans votre dépôt pour que d'autres connaissent le format :
# ── Environnement Signal OPS ──
# Chaque clé est optionnelle. Laissez vide pour désactiver cette source.
# WiFi / Bluetooth / Cellulaire
WIGLE_API_NAME=
WIGLE_API_TOKEN=
OPENCELLID_API_KEY=
# Scanners d'exposition 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=
# Caméras et réputation IP
WINDY_API_KEY=
ABUSEIPDB_API_KEY=
# Aéronefs et radioamateur
ADSB_API_KEY=
APRS_FI_KEY=
# Analyse IA
GEMINI_API_KEY=
GEMINI_MODEL=gemini-2.0-flash
# Configuration de l'application
DATA_DIR=./data
FLASK_SECRET_KEY=
Une sélection des points d'accès exposés (voir la source pour l'ensemble complet) :
| Variable | Fournisseur | Obtenir une clé sur |
|---|
WIGLE_API_NAME | WiGLE (WiFi/BT/cellulaire) — nom d'utilisateur | https://wigle.net/account |
WIGLE_API_TOKEN | WiGLE — jeton API | https://wigle.net/account |
OPENCELLID_API_KEY | OpenCellID (antennes-relais) | https://opencellid.org |
SHODAN_API_KEY | Shodan (exposition / caméras) | https://account.shodan.io |
CENSYS_API_ID | Censys — ID API | https://search.censys.io/account/api |
CENSYS_API_SECRET | Censys — secret API | https://search.censys.io/account/api |
ZOOMEYE_API_KEY | ZoomEye | https://www.zoomeye.org/profile |
FOFA_EMAIL | FOFA — e-mail du compte | https://fofa.info |
FOFA_API_KEY | FOFA — clé 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 (réputation IP) | https://www.abuseipdb.com/account/api |
ADSB_API_KEY | adsb.fi (optionnel ; fonctionne sans) | https://adsb.fi |
APRS_FI_KEY | APRS.fi (stations radioamateurs) | https://aprs.fi/page/api_key |
GEMINI_API_KEY | Google Gemini (analyse IA) | https://aistudio.google.com/apikey |
| Variable | Défaut | Description |
|---|
GEMINI_MODEL | gemini-2.0-flash | Modèle Gemini utilisé pour l'analyse |
DATA_DIR | ./data | Répertoire des jeux de données locaux GeoJSON/JSON |
FLASK_SECRET_KEY | aléatoire à chaque exécution | Secret de session Flask ; définissez une valeur fixe en production |
| Point d'accès | Objectif |
|---|
GET /nearby?lat=&lon=&mode= | Scan RF/OSINT unifié autour d'un point |
GET /api/cctv?lat=&lon= ou ?country= | Découverte de caméras par lieu ou pays |
GET /api/search?type=&query= | Recherche par SSID, IP, lieu ou pays |
POST /api/analyze | Résumé IA d'une liste d'appareils |
GET /api/ip-intel?ip= | Renseignement sur les menaces IP multi-sources |
GET /api/adsb?lat=&lon=&radius= | Aéronefs en direct + détection d'urgence |
GET /api/satellites?categories= | Positions satellites (TLE + SGP4) |
GET /api/gps-jamming?lat=&lon= | Carte de chaleur de brouillage GPS depuis ADS-B |
GET /api/sdr/kiwisdr | Liste publique des récepteurs KiwiSDR |
GET /api/aprs/stations?lat=&lon= | Stations APRS à proximité |
GET/POST /api/watchlist | Gérer les identifiants suivis |
POST /api/watchlist/check | Vérifier une liste d'appareils contre la liste de surveillance |
GET /api/status · GET /api/debug | Santé des fournisseurs / diagnostics des clés |