
All-Source-Intelligence-Fusion-Dashboard – WiFi-, Mobilfunk-, CCTV-, ADS-B-, Orbital- und SDR-Feeds, vereint in einer einzigen taktischen Karte. Nur für Sicherheitsforschung.
Eine Full-Spectrum-All-Source-Signalerfassungs-Fusionsplattform für Sicherheitsforschung und -training. Signal OPS zieht Dutzende offene Sammelquellen — WLAN/Bluetooth/Mobilfunkmast-Datenbanken, Internet-Expositions-Scanner, Kamera-Indizes, ADS-B-Flugdaten-Feeds, Satelliten-TLE-Tracking und SDR/APRS-Netzwerke — in eine einzige taktische Karte und Flask-API zusammen, korreliert die RF-, Mobilfunk-, Luftraum-, Orbital- und Überwachungsdomänen in einem einzigen Echtzeit-Betriebsbild, mit optionalen KI-gestützten Bedrohungszusammenfassungen obendrauf.
Fast jede Quelle ist optional. Wenn ein Schlüssel nicht gesetzt ist, wird dieser Fetcher elegant übersprungen — die kostenlosen Quellen (OpenStreetMap, Insecam, ipinfo.io, ADS-B, CelesTrak, KiwiSDR) funktionieren ganz ohne Schlüssel.
Die Hauptkarte verschmilzt WLAN-, Bluetooth-, Mobilfunk-, Kamera- und Flugzeug-Ebenen über demselben Gebiet, mit umschaltbaren Overlays für OSM-Kameras, ALPR/Flock-Netzwerke und Polizeireviere.


| Überwachungs-Feed | CCTV-Erkennung |
|---|---|
![]() | ![]() |
Die Überwachungsliste bewertet jedes Gerät (z. B. "Verdacht 35/100: Nicht authentifizierte Kamera") und führt Router, Fernseher und exponierte Kameras aus WiGLE, Insecam und OSM zusammen. Die CCTV-Ansicht gruppiert entdeckte Kameras nach Quelle mit gerätespezifischem Risiko und Live-/Metadaten-Status.
| Mobilfunkmast-Heatmap | SDR / APRS-Netzwerk |
|---|---|
![]() | ![]() |
Kernabhängigkeiten:
flask
requests
python-dotenv
Empfohlen (aktiviert die volle Funktionalität — Caching, Ratenbegrenzung, Satellitenausbreitung):
cachetools # begrenzter Geo-Cache (fällt auf ein unbegrenztes Dict zurück, wenn nicht vorhanden)
flask-limiter # Anfrage-Ratenbegrenzung
sgp4 # Satellitenpositions-Ausbreitung für /api/satellites
google-genai # Gemini-KI-Analyse (nur wenn Sie GEMINI_API_KEY verwenden)
Alles installieren:
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
Wenn Sie keine requirements.txt haben, verwenden Sie die pip install-Zeile aus dem Abschnitt „Anforderungen" oben.
Kopieren Sie die Beispieldatei und füllen Sie die Schlüssel aus, die Sie haben:
cp .env.example .env
Öffnen Sie dann .env und fügen Sie Ihre API-Schlüssel ein. Jeder Schlüssel ist optional — lassen Sie jede Zeile leer (oder löschen Sie sie), um diese Quelle zu deaktivieren. Im nächsten Abschnitt erfahren Sie, was jeder Schlüssel bewirkt und wo Sie ihn erhalten.
Für sofortige Offline-Kamera- und Revierabfragen platzieren Sie diese unter einem data/-Verzeichnis (oder zeigen Sie mit DATA_DIR woanders hin):
data/CAMERAS_WITH_NETWORK_DATA.geojson # Punkt-Features (Kameras)
data/police_precincts_usa.geojson # Polygon-Features (US-Reviere)
data/camera_networks.json # Netzwerk-Sharing-Metadaten
data/tiles/{z}/{x}/{y}.json # optionaler gekachelter Kamera-Datensatz
Wenn diese Dateien fehlen, fällt die App automatisch auf Live-OpenStreetMap-Overpass-Abfragen zurück.
python app_v2.py
Der Server startet auf http://0.0.0.0:8080. Öffnen Sie http://localhost:8080 in Ihrem Browser.
Prüfen Sie jederzeit, welche Anbieter erfolgreich geladen wurden:
GET /api/status # aktive vs. fehlende Schlüssel
GET /api/debug # Bool pro Schlüssel + Live-WiGLE-Auth-Test
Erstellen Sie eine .env-Datei im Projektstammverzeichnis. Unten ist die vollständige Liste, die von der App gelesen wird.
Diese benötigen keine Konfiguration: OpenStreetMap Overpass, Insecam, EarthCam, ipinfo.io, ADS-B (adsb.fi / OpenSky), CelesTrak TLE, SatNOGS und KiwiSDR.
.env.exampleSpeichern Sie dies als .env.example in Ihrem Repository, damit andere das Format kennen:
# ── Signal OPS-Umgebung ──
# Jeder Schlüssel ist optional. Leer lassen, um diese Quelle zu deaktivieren.
# WLAN / Bluetooth / Mobilfunk
WIGLE_API_NAME=
WIGLE_API_TOKEN=
OPENCELLID_API_KEY=
# Internet-Expositions-Scanner
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=
# Kameras & IP-Reputation
WINDY_API_KEY=
ABUSEIPDB_API_KEY=
# Flugzeuge & Amateurfunk
ADSB_API_KEY=
APRS_FI_KEY=
# KI-Analyse
GEMINI_API_KEY=
GEMINI_MODEL=gemini-2.0-flash
# App-Konfiguration
DATA_DIR=./data
FLASK_SECRET_KEY=
Eine Auswahl der verfügbaren Endpunkte (die vollständige Liste finden Sie im Quellcode):
| Variable | Anbieter | Schlüssel erhalten unter |
|---|
WIGLE_API_NAME | WiGLE (WLAN/BT/Mobilfunk) — Benutzername | https://wigle.net/account |
WIGLE_API_TOKEN | WiGLE — API-Token | https://wigle.net/account |
OPENCELLID_API_KEY | OpenCellID (Mobilfunkmasten) | https://opencellid.org |
SHODAN_API_KEY | Shodan (Exposition / Kameras) | https://account.shodan.io |
CENSYS_API_ID | Censys — API-ID | https://search.censys.io/account/api |
CENSYS_API_SECRET | Censys — API-Geheimnis | https://search.censys.io/account/api |
ZOOMEYE_API_KEY | ZoomEye | https://www.zoomeye.org/profile |
FOFA_EMAIL | FOFA — Konto-E-Mail | https://fofa.info |
FOFA_API_KEY | FOFA — API-Schlüssel | 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 (IP-Reputation) | https://www.abuseipdb.com/account/api |
ADSB_API_KEY | adsb.fi (optional; funktioniert auch ohne) | https://adsb.fi |
APRS_FI_KEY | APRS.fi (Amateurfunk-Stationen) | https://aprs.fi/page/api_key |
GEMINI_API_KEY | Google Gemini (KI-Analyse) | https://aistudio.google.com/apikey |
| Variable | Standard | Beschreibung |
|---|
GEMINI_MODEL | gemini-2.0-flash | Gemini-Modell für die Analyse |
DATA_DIR | ./data | Verzeichnis für lokale GeoJSON/JSON-Datensätze |
FLASK_SECRET_KEY | zufällig pro Lauf | Flask-Session-Geheimnis; in Produktion einen festen Wert setzen |
| Endpunkt | Zweck |
|---|
GET /nearby?lat=&lon=&mode= | Unified RF/OSINT-Scan um einen Punkt |
GET /api/cctv?lat=&lon= oder ?country= | Kamera-Erkennung nach Standort oder Land |
GET /api/search?type=&query= | Suche nach SSID, IP, Standort oder Land |
POST /api/analyze | KI-Zusammenfassung einer Geräteliste |
GET /api/ip-intel?ip= | Multi-Quellen-IP-Bedrohungsintelligenz |
GET /api/adsb?lat=&lon=&radius= | Live-Flugzeuge + Notfallerkennung |
GET /api/satellites?categories= | Satellitenpositionen (TLE + SGP4) |
GET /api/gps-jamming?lat=&lon= | GPS-Störungs-Heatmap aus ADS-B |
GET /api/sdr/kiwisdr | Öffentliche KiwiSDR-Empfängerliste |
GET /api/aprs/stations?lat=&lon= | Nahegelegene APRS-Stationen |
GET/POST /api/watchlist | Verwaltung verfolgter Kennungen |
POST /api/watchlist/check | Geräteliste gegen die Watchlist prüfen |
GET /api/status · GET /api/debug | Anbieter-Health / Schlüssel-Diagnose |