
Plateforme OSINT géospatiale en temps réel regroupant plus de 60 flux de télémétrie publics (ADS-B, AIS, satellites, CCTV) dans une carte unifiée, avec une boîte à outils de reconnaissance côté serveur, un canal d’agent IA et des communications maillées décentralisées.
Interception Globale des Menaces — Plateforme de Renseignement Géospatial en Temps Réel
ShadowBroker est une plateforme de renseignement décentralisée qui agrège, en temps réel, des données OSINT multi-domaines provenant de plus de 60 flux en direct sur une interface cartographique de type « dark ops ». Avions, navires, satellites, zones de conflit, réseaux de vidéosurveillance, brouillage GPS, appareils connectés à Internet, radios de police, nœuds maillés radio et événements géopolitiques majeurs — tous mis à jour en temps réel sur un seul écran, ainsi qu’un protocole de communication obscurci et une infrastructure d’échange d’informations.
Construit avec Next.js, MapLibre GL, FastAPI et Python. Plus de 40 couches de données activables, incluant la détection des changements au sol par SAR, l’OSINT Telegram (prévisualisation de canaux publics géoparcés sur la carte), une boîte à outils de reconnaissance côté serveur (DNS, WHOIS, sanctions, BGP, scan IP, etc.), des couches de risque liées à la chaîne d’approvisionnement, ainsi que des flux de menaces cyber (malwares/C2 et CISA KEV). Plusieurs modes visuels (DEFAULT / SATELLITE / FLIR / NVG / CRT). Clic droit sur n’importe quel point de la Terre pour obtenir un dossier pays, une fiche du chef d’État, une extension de graphe d’entités et la dernière photo satellite Sentinel-2. ShadowBroker n’a ni comptes, ni télémétrie, ni système d’analyse ; le tableau de bord communique avec votre backend auto-hébergé. Les requêtes sensibles de reconnaissance et de Shodan ne transitent jamais par des API tierces depuis le navigateur — elles sont relayées par le backend avec des gardes SSRF et une authentification d’opérateur local. Le canal de commande OpenClaw / agent expose les mêmes backends de reconnaissance ainsi qu’une recherche complète de télémétrie — aucune intégration API séparée n’est nécessaire.
Conçu pour les analystes, les chercheurs, les opérateurs radio et toute personne souhaitant voir à quoi ressemble le monde lorsque tous les signaux publics sont réunis sur une même carte.
Une quantité surprenante de données mondiales sont déjà publiques — les signaux ADS-B des aéronefs, les signaux AIS maritimes, les données orbitales des satellites, les capteurs sismiques, les réseaux radio maillés, les flux de radios de police, les stations de surveillance environnementale, la télémétrie des infrastructures Internet, et bien plus encore. Ces données sont dispersées dans des dizaines d’outils et d’API. ShadowBroker les combine en une seule interface.
Le projet n’introduit pas de nouvelles capacités de surveillance — il agrège et visualise des ensembles de données publiques existants. Il est entièrement open source afin que chacun puisse auditer exactement quelles données sont consultées et comment. ShadowBroker n’inclut ni télémétrie de produit, ni systèmes d’analyse, ni comptes. Les clés fournies par l’opérateur restent dans votre déploiement local, mais les fonctionnalités OSINT en temps réel effectuent nécessairement des requêtes sortantes vers les fournisseurs de données publiques que vous activez ou interrogez.
ShadowBroker inclut un connecteur Shodan optionnel pour l’accès à l’API fournie par l’opérateur (SHODAN_API_KEY) et un panneau Boîte à outils de Reconnaissance pour les recherches OSINT sans clé. Les deux s’exécutent uniquement côté serveur : le navigateur appelle vos routes auto-hébergées /api/osint/* et /api/tools/shodan/* ; les requêtes sortantes sont effectuées par le backend après validation SSRF. La reconnaissance nécessite un accès opérateur local (même modèle de confiance que les toggles de couches et les routes d’administration). Les résultats Shodan s’affichent en tant que couche cartographique distincte et restent soumis aux conditions d’utilisation de Shodan.
search_telemetry, search_news), la boîte à outils complète de reconnaissance (osint_lookup pour IP/DNS/WHOIS/sanctions/CVE, etc.), l’extension de graphe d’entités, le placement de marqueurs, le contrôle de la carte, la détection des changements au sol par SAR, le maillage réseau et la livraison d’alertes. Il voit tout ce que l’opérateur voit et peut agir sur la carte en temps réel.⚡ Démarrage Rapide (Docker)
git clone https://github.com/bigbodycobain/Shadowbroker.git cd Shadowbroker docker compose pull docker compose up -d
### Depuis GitLab (utilise GitLab Container Registry)```bash
git clone https://gitlab.com/bigbodycobain/Shadowbroker.git
cd Shadowbroker
docker compose -f docker-compose.yml -f docker-compose.gitlab.yml pull
docker compose -f docker-compose.yml -f docker-compose.gitlab.yml up -d
Les deux chemins produisent des conteneurs identiques — même source, même CI, mêmes images octet pour octet. Choisissez l'écosystème que vous utilisez déjà.
Ouvrez http://localhost:3000 pour voir le tableau de bord ! (Nécessite Docker Desktop ou Docker Engine)
Rejoignez l'essaim privé InfoNet (sb-testnet-0) : Cliquez sur NŒUD dans le tableau de bord, ou exécutez
./meshnode.shpour un participant sans interface. Pas de liste manuelle de pairs — les valeurs par défaut de la flotte découvrent le seed et récupèrent le manifeste signé automatiquement. DéfinissezMESH_INFONET_FLEET_JOIN=falsedans.envpour un nœud solo privé.
Port du backend déjà utilisé ? Le navigateur a besoin uniquement du port
3000, mais l'API backend est également publiée sur le port hôte8000pour les diagnostics locaux. Si une autre application utilise déjà8000, créez ou modifiez.envà côté dedocker-compose.ymlet définissezBACKEND_PORT=8001, puis exécutezdocker compose up -d.
Nouvelles/UAP/bases/eaux usées vides après plusieurs minutes ? Vérifiez les redémarrages du backend pour cause de OOM avec
docker events --since 30m --filter container=shadowbroker-backend --filter event=oom. Le fichier compose par défaut donne 4 Go au backend ; si votre hôte a moins de mémoire, réduisez les flux activés ou définissezBACKEND_MEMORY_LIMIT=3Get attendez-vous à ce que les couches plus lourdes/lentes se réchauffent plus progressivement.
Utilisateurs Podman : Podman fonctionne, mais
podman composeest une surcouche et nécessite encore un fournisseur Compose installé. Sur Windows/WSL, si vous voyezlooking up compose provider failed, installezpodman-composeet exécutezpodman-compose pullsuivi depodman-compose up -ddepuis le dossier clonéShadowbroker. Sur les shells Linux/macOS/WSL, vous pouvez aussi utiliser./compose.sh --engine podman pullet./compose.sh --engine podman up -d.
🔄 Comment mettre à jour
ShadowBroker utilise des images Docker pré-construites — aucune construction locale requise. La mise à jour prend quelques secondes :```bash docker compose pull docker compose up -d
C'est tout. `pull` récupère les dernières images, `up -d` redémarre les conteneurs.
> **Vous venez d'une version plus ancienne ?** Récupérez d'abord le dernier code du dépôt, puis les images :
>
> ```bash
> git pull origin main
> docker compose down
> docker compose pull
> docker compose up -d
> ```
>
> Les utilisateurs de Podman doivent exécuter la commande équivalente de leur fournisseur, par exemple `podman-compose pull` et `podman-compose up -d`, ou utiliser `./compose.sh --engine podman pull` et `./compose.sh --engine podman up -d` depuis un shell compatible bash.
### Intégrité des mises à jour
Les mises à jour Docker sont distribuées via des registres de conteneurs signés. Le programme de mise à jour automatique ZIP hérité vérifie les archives de version via cette chaîne, dans l'ordre :
* `MESH_UPDATE_SHA256` lorsqu'un opérateur définit explicitement un condensé.
* `backend/data/release_digests.json` pour les condensés de version fournis.
* Le fichier `SHA256SUMS.txt` de la version sur GitHub lorsqu'aucun condensé fourni n'est présent.
Les responsables de version doivent exécuter `python backend/scripts/release_helper.py hash <ShadowBroker_vX.Y.Z.zip>` avant de publier, puis publier `SHA256SUMS.txt` et mettre à jour `backend/data/release_digests.json` lors de la livraison d'une cible de mise à jour ZIP. Le programme de mise à jour conserve le chemin de remplacement de l'opérateur intact au lieu d'échouer en cas d'absence de condensés fournis, afin que les installations existantes ne soient pas bloquées par une erreur dans le processus de publication.
### Durcissement CSP
Le frontend de production est livré avec un CSP compatible avec l'hydratation et un CSP strict à nonce uniquement dans `Content-Security-Policy-Report-Only`. Définissez `SHADOWBROKER_STRICT_CSP=1` uniquement après avoir vérifié que la construction exacte s'hydrate correctement dans votre déploiement. Les polices Google d'exécution ne sont pas nécessaires ; le pipeline de polices Next intégré sert la police du tableau de bord depuis la construction de l'application.
### ⚠️ **Bloqué sur l'ancienne version ?**
**Si `git pull` échoue ou que `docker compose up` continue de construire à partir des sources au lieu de récupérer les images**, votre clone est antérieur à une migration du dépôt de mars 2026 qui a réécrit l'historique des commits. Un `git pull` normal ne peut pas résoudre ce problème. Exécutez :```bash
# Back up any local config you want to keep (.env, etc.)
cd ..
rm -rf Shadowbroker
git clone https://github.com/bigbodycobain/Shadowbroker.git
cd Shadowbroker
docker compose pull
docker compose up -d
Comment savoir si vous êtes concerné : Si docker compose up affiche RUN apt-get, RUN npm ci ou RUN pip install — cela signifie qu'il construit à partir des sources au lieu de télécharger des images pré-construites. Vous avez besoin d'un nouveau clone.
Autre dépannage :
docker compose pull --no-cachedocker image prune -fdocker compose logs -f backendPour les déploiements haute disponibilité ou les clusters de laboratoire domestique, ShadowBroker prend en charge le déploiement via Helm. Ce chart est basé sur le template bjw-s-labs et offre une configuration robuste et modulaire pour le backend et le frontend.
1. Ajouter le dépôt :```bash helm repo add bjw-s-labs https://bjw-s-labs.github.io/helm-charts/ helm repo update
**2. Installer le Chart :**```bash
# Default — pulls images from GHCR
helm install shadowbroker ./helm/chart --create-namespace --namespace shadowbroker
# GitLab registry variant
helm install shadowbroker ./helm/chart --create-namespace --namespace shadowbroker \
-f helm/chart/values.yaml \
-f helm/chart/values-gitlab.yaml
3. Fonctionnalités Clés :
Remerciements particuliers à @chr0n1x pour avoir contribué à l’architecture Kubernetes initiale.
ShadowBroker v0.9.7 embarque InfoNet (maillage d’intelligence décentralisé + économie de gouvernance Sovereign Shell), un canal de commandement IA agentique (prend en charge OpenClaw et tout agent signant en HMAC), la lecture de snapshots Time Machine et la détection de changements au sol par SAR satellite. Il s’agit d’un testnet expérimental — ni un messager privé, ni un système de gouvernance de production.
La première couche de communication d’intelligence et de gouvernance décentralisée intégrée directement dans une plateforme OSINT. Pas de comptes, pas d’inscription, pas d’identité requise. v0.9.7 élève InfoNet d’une couche de chat à une économie de gouvernance complète avec une voie claire vers une plateforme d’intelligence décentralisée préservant la confidentialité.
Couche de communication (depuis v0.9.6) :
send, dm, commandes de marché, inspection de l’état de la gate. Panneau déplaçable, se réduit dans la barre du haut. Tapez help pour voir toutes les commandes.Sovereign Shell — économie de gouvernance (NOUVEAU dans v0.9.7) :
Le dépôt inclut un fichier docker-compose.yml qui télécharge des images pré-construites depuis GitHub Container Registry.
Déploiement public ou sur un LAN ? Aucune configuration nécessaire pour la plupart des configurations. Le frontend proxyfie tous les appels API via le serveur Next.js vers
BACKEND_URL, qui par défaut esthttp://backend:8000(réseau interne Docker). Le port hôte8000n'est publié que pour l'accès API/debug local (127.0.0.1:8000dansdocker-compose.yml). S'il entre en conflit avec un autre service, définissezBACKEND_PORT=8001dans.env; laissezBACKEND_URLàhttp://backend:8000car c'est le port interne Docker.Exécution du backend en dehors de Docker (
cd backend && python main.py) : le serveur de développement se lie uniquement en boucle locale (127.0.0.1:8000) donc les autres machines sur votre LAN ne peuvent pas atteindre les routes admin/local-trust avec unADMIN_KEYvide. Définissez dans uniquement lorsque vous avez délibérément besoin de et utilisez un fort pour tout appelant non local. La limite de mémoire du backend est contrôlée par et par défaut est de . Si Docker signale des événements OOM, le backend redémarrera et les couches lentes peuvent sembler vides jusqu'à ce qu'elles se repeuplent.
Utilisateurs de Podman : Ne passez pas l'URL GitHub à podman compose pull ; clonez d'abord le dépôt, cd Shadowbroker, puis exécutez compose à partir de ce dossier. podman compose nécessite également un fournisseur Compose. Si Podman signale looking up compose provider failed, installez-en un :```bash
python3 -m pip install --user podman-compose podman-compose pull podman-compose up -d
Veuillez fournir le contenu Markdown à traduire.```powershell
# Windows PowerShell
py -m pip install --user podman-compose
podman-compose pull
podman-compose up -d
Si vous êtes dans un shell compatible bash, le wrapper inclus peut détecter automatiquement Docker ou Podman :```bash ./compose.sh --engine podman pull ./compose.sh --engine podman up -d
</details>
---
<details>
<summary>🐋 Déploiement autonome (Portainer, Uncloud, NAS, etc.)</summary>
Pas besoin de cloner le dépôt. Utilisez les images pré-construites depuis le GitHub Container Registry. Les images du registre GitLab peuvent être utilisées comme miroir si vous les y publiez.
Créez un fichier `docker-compose.yml` avec le contenu suivant et déployez-le directement — collez-le dans l'éditeur de pile de Portainer, `uncloud deploy`, ou tout hôte Docker :```yaml
## Image registry — uncomment ONE line per service:
## GitHub (primary): ghcr.io/bigbodycobain/shadowbroker-backend:latest
## GitLab (mirror): registry.gitlab.com/bigbodycobain/shadowbroker/backend:latest
services:
backend:
image: ghcr.io/bigbodycobain/shadowbroker-backend:latest
# image: registry.gitlab.com/bigbodycobain/shadowbroker/backend:latest
container_name: shadowbroker-backend
ports:
- "${BACKEND_PORT:-8000}:8000"
environment:
- AIS_API_KEY=your_aisstream_key # Required — get one free at aisstream.io
- OPENSKY_CLIENT_ID= # Optional — higher flight data rate limits
- OPENSKY_CLIENT_SECRET= # Optional — paired with Client ID above
- LTA_ACCOUNT_KEY= # Optional — Singapore CCTV cameras
- SHODAN_API_KEY= # Optional — Shodan device search overlay
- SH_CLIENT_ID= # Optional — Sentinel Hub satellite imagery
- SH_CLIENT_SECRET= # Optional — paired with Sentinel Hub ID
- CORS_ORIGINS= # Optional — comma-separated allowed origins
volumes:
- backend_data:/app/data
restart: unless-stopped
frontend:
image: ghcr.io/bigbodycobain/shadowbroker-frontend:latest
# image: registry.gitlab.com/bigbodycobain/shadowbroker/frontend:latest
container_name: shadowbroker-frontend
ports:
- "3000:3000"
environment:
- BACKEND_URL=http://backend:8000 # Docker internal networking — no rebuild needed
depends_on:
- backend
restart: unless-stopped
volumes:
backend_data:
Comment ça fonctionne : Le conteneur frontal proxye toutes les requêtes
/api/*via le serveur Next.js versBACKEND_URLen utilisant le réseau interne de Docker. Le navigateur ne communique jamais qu'avec le port 3000. Le port hôte du backend est réservé à l'accès API/local de débogage et peut être modifié avecBACKEND_PORT=8001sans changerBACKEND_URL.
BACKEND_URLest une simple variable d'environnement d'exécution (pas une variableNEXT_PUBLIC_*de construction), vous pouvez donc la modifier dans Portainer, Uncloud ou n'importe quel éditeur de compose sans reconstruire l'image. Définissez-la sur l'adresse à laquelle votre backend est accessible depuis l'intérieur du réseau Docker (par exemplehttp://backend:8000,http://192.168.1.50:8000).
Si vous souhaitez simplement exécuter le tableau de bord sans utiliser de commandes terminal :
.zip de la version.start.bat.
Mac/Linux : Ouvrez le terminal, tapez chmod +x start.sh, dos2unix start.sh, puis exécutez ./start.sh.Remarques sur le lanceur local :
start.bat / start.sh exécutent l'application sans Docker — ils installent les dépendances et démarrent les deux serveurs directement.docs/mesh/ pour le dépannage.docs/mesh/wormhole-dm-root-operations-runbook.md.Si vous souhaitez modifier le code ou exécuter à partir des sources :
pip — python.org (cochez « Ajouter au PATH » lors de l'installation)
aisstream.io (obligatoire), et optionnellement opensky-network.org (OAuth2), lta.gov.sggit clone https://github.com/BigBodyCobain/Shadowbroker.git cd Shadowbroker
cd backend python -m venv venv venv\Scripts\activate # Windows
Les 41 couches sont activables/désactivables indépendamment depuis le panneau de gauche :
La plateforme est optimisée pour gérer des ensembles de données massifs en temps réel :
304 Not Modified évitent l'analyse JSON redondantesetData()Les nouveaux contributeurs peuvent utiliser docs/contributor-map.md pour un guide d'orientation plus court.``` Shadowbroker/ ├── openclaw-skills/shadowbroker/ # OpenClaw skill — SKILL.md, sb_query.py client, alerts/monitor helpers ├── backend/ │ ├── main.py # FastAPI app, middleware, API routes (~4,000 lines) │ ├── cctv.db # SQLite CCTV camera database (auto-generated) │ ├── config/ │ │ └── news_feeds.json # User-customizable RSS feed list │ ├── services/ │ │ ├── data_fetcher.py # Core scheduler — orchestrates all data sources │ │ ├── ais_stream.py # AIS WebSocket client (25K+ vessels) │ │ ├── carrier_tracker.py # OSINT carrier position estimator (GDELT news scraping) │ │ ├── cctv_pipeline.py # 14-source CCTV camera ingestion pipeline │ │ ├── ssrf_guard.py # SSRF validation for operator recon fetches │ │ ├── sanctions/ofac.py # OpenSanctions OFAC SDN index │ │ ├── osint/lookups.py # Server-side recon lookups (Osiris port) │ │ ├── osint/openclaw_recon.py # OpenClaw dispatch for recon + entity_expand │ │ ├── osint_intel/resolve.py # Entity graph resolver (Wikidata + OFAC) │ │ ├── scm/suppliers.py # Supply-chain risk overlay │ │ ├── intel_feeds/ # Country risk index helpers │ │ ├── fetchers/malware.py # abuse.ch Feodo + URLhaus │ │ ├── fetchers/cyber_status.py # CISA KEV feed │ │ ├── fetchers/telegram_osint.py # Public Telegram channel scrape + geoparse │ │ ├── third_party/osiris/ # MIT attribution for Osiris-derived code │ │ ├── geopolitics.py # GDELT + Ukraine frontline + air alerts │ │ ├── region_dossier.py # Right-click country/city intelligence │ │ ├── radio_intercept.py # Police scanner feeds + OpenMHZ │ │ ├── kiwisdr_fetcher.py # KiwiSDR receiver scraper │ │ ├── sentinel_search.py # Sentinel-2 STAC imagery search │ │ ├── shodan_connector.py # Shodan device search connector │ │ ├── sigint_bridge.py # APRS-IS TCP bridge │ │ ├── network_utils.py # HTTP client with curl fallback │ │ ├── api_settings.py # API key management │ │ ├── news_feed_config.py # RSS feed config manager │ │ ├── fetchers/ │ │ │ ├── flights.py # OpenSky, adsb.lol, GPS jamming, holding patterns │ │ │ ├── geo.py # AIS vessels, carriers, GDELT, fishing activity │ │ │ ├── satellites.py # CelesTrak TLE + SGP4 propagation │ │ │ ├── earth_observation.py # Quakes, fires, volcanoes, air quality, weather │ │ │ ├── infrastructure.py # Data centers, power plants, military bases │ │ │ ├── trains.py # Amtrak + DigiTraffic European rail │ │ │ ├── sigint.py # SatNOGS, TinyGS, APRS, Meshtastic │ │ │ ├── meshtastic_map.py # Meshtastic MQTT + map node aggregation │ │ │ ├── military.py # Military aircraft classification │ │ │ ├── news.py # RSS intelligence feed aggregation │ │ │ ├── financial.py # Global markets data │ │ │ └── ukraine_alerts.py # Ukraine air raid alerts │ │ └── mesh/ # InfoNet / Wormhole protocol stack │ │ ├── mesh_protocol.py # Core mesh protocol + routing │ │ ├── mesh_crypto.py # Ed25519, X25519, AESGCM primitives │ │ ├── mesh_hashchain.py # Hash chain commitment system (~1,400 lines) │ │ ├── mesh_router.py # Multi-transport router (APRS, Meshtastic, WS) │ │ ├── mesh_wormhole_persona.py # Gate persona identity management │ │ ├── mesh_wormhole_dead_drop.py # Dead Drop token-based DM mailbox │ │ ├── mesh_wormhole_ratchet.py # Double-ratchet DM scaffolding │ │ ├── mesh_wormhole_gate_keys.py # Gate key management + rotation │ │ ├── mesh_wormhole_seal.py # Message sealing + unsealing │ │ ├── mesh_merkle.py # Merkle tree proofs for data commitment │ │ ├── mesh_reputation.py # Node reputation scoring │ │ ├── mesh_oracle.py # Oracle consensus protocol │ │ └── mesh_secure_storage.py # Secure credential storage │ ├── routers/ │ │ ├── osint.py # /api/osint/* recon routes (local operator) │ │ ├── entity_graph.py # /api/entity/expand │ │ ├── scm.py # /api/scm-suppliers │ │ └── intel_feeds.py # /api/malware, /api/cyber-threats, /api/telegram-feed, /api/country-risk ├── frontend/ │ ├── public/data/ │ │ └── submarine-cables.json # Static undersea cable GeoJSON │ ├── src/ │ │ ├── app/ │ │ │ └── page.tsx # Main dashboard — state, polling, layout │ │ └── components/ │ │ ├── MaplibreViewer.tsx # Core map — all GeoJSON layers │ │ ├── MeshChat.tsx # InfoNet / Mesh / Dead Drop chat panel │ │ ├── MeshTerminal.tsx # Draggable CLI terminal │ │ ├── NewsFeed.tsx # SIGINT feed + entity detail panels │ │ ├── WorldviewLeftPanel.tsx # Data layer toggles (40+ layers) │ │ ├── ShodanPanel.tsx # Shodan device search overlay │ │ ├── ReconPanel.tsx # Server-side OSINT recon toolkit │ │ ├── ScmPanel.tsx # Supply-chain risk command panel │ │ ├── EntityGraphPanel.tsx # Entity graph on map selection │ │ ├── MaplibreViewer/popups/TelegramOsintPopup.tsx # Threat-intercept styled Telegram pin popups │ │ ├── WorldviewRightPanel.tsx # Search + filter sidebar │ │ ├── AdvancedFilterModal.tsx # Airport/country/owner filtering │ │ ├── MapLegend.tsx # Dynamic legend with all icons │ │ ├── MarketsPanel.tsx # Global financial markets ticker │ │ ├── RadioInterceptPanel.tsx # Scanner-style radio panel │ │ ├── FindLocateBar.tsx # Search/locate bar │ │ ├── ChangelogModal.tsx # Version changelog popup (auto-shows on upgrade) │ │ ├── SettingsPanel.tsx # API Keys + News Feed + Shodan config │ │ ├── ScaleBar.tsx # Map scale indicator │ │ └── ErrorBoundary.tsx # Crash recovery wrapper │ └── package.json
ShadowBroker est construit en toute transparence. Ces personnes ont contribué du code concret :
Cet outil est entièrement basé sur des données de renseignement open source (OSINT) disponibles publiquement. Aucune donnée classifiée, restreinte ou non publique n'est utilisée. Les positions des transporteurs sont des estimations fondées sur des rapports publics. L'interface utilisateur à thème militaire est purement esthétique.
Ce projet est destiné à des fins éducatives et de recherche personnelle. Consultez les conditions d'utilisation de chaque fournisseur d'API pour les restrictions d'utilisation des données.
Construit avec ☕ et trop d'appels API
t.me/s (OSINTdefender, NEXTA, etc.) scrapés toutes les heures, notés selon le risque, géoparcés vers des ancres métropolitaines et affichés sous forme de marqueurs cliquables avec médias intégrés| Canal | Statut de Confidentialité | Détails |
|---|
| Meshtastic / APRS | PUBLIC | Les transmissions radio RF sont publiques et interceptables par conception. |
| Gate Chat InfoNet | OBFUSCATION | Les messages sont obfusqués avec des personas de gate et une signature canonique du payload, mais PAS de chiffrement de bout en bout. Les métadonnées ne sont pas masquées bien que conçues via Tor et Reticulum (Travail en cours). |
| MPs Dead Drop | VOIE ACTUELLE LA PLUS FORTE | Boîte aux lettres par époque basée sur un jeton avec vérification par mot SAS. Voie la plus forte dans cette version, mais pas encore confidentielle avec certitude. |
| Gouvernance Sovereign Shell | REGISTRE PUBLIC | Pétitions, votes, hachages de mise à jour et mises en jeu de litige sont des événements signés sur une chaîne de hachage publique. Pseudonyme via le persona de gate, mais les actions de gouvernance sont intentionnellement observables. |
| Primitives de confidentialité (RingCT / stealth / DEX) | PAS ENCORE CÂBLÉES | Les contrats de protocole verrouillés sont en place, mais le schéma cryptographique n’a pas été choisi. La crate Rust privacy-core est la cible d’intégration pour un futur sprint. |
Ne transmettez rien de sensible sur aucun canal. Considérez toutes les voies comme ouvertes et publiques pour l’instant. Le chiffrement E2E et un durcissement natif/Tauri plus profond sont les prochains jalons. Si vous fork ce projet, conservez ces étiquettes intactes et ne formulez pas de revendications de confidentialité plus fortes que ce que l’implémentation permet.
Pour une image complète de ce contre quoi le maillage se défend réellement et de ce contre quoi il ne se défend pas, lisez le modèle de menace et la réconciliation de revendications. Chaque phrase ci-dessus y est mappée au chemin de code qui l’applique (ou pas).
UPDATE_PARAM, BATCH_UPDATE_PARAMS, ENABLE_FEATURE et DISABLE_FEATURE. Des boutons réglables changent par vote — aucun déploiement de code requis.repr() de Python, afin que les hachages transitent proprement dans la chaîne.MappingProxyType.Piste de primitives de confidentialité (NOUVEAU dans v0.9.7) :
services/infonet/privacy/contracts.py pour les signatures en anneau, les adresses furtives, les engagements Pedersen, les preuves de plage et l’appariement DEX. La crate Rust privacy-core est la cible d’intégration — aucun appelant du module de confidentialité n’a besoin de savoir quel schéma est actif.Testnet Expérimental — Aucune Garantie de Confidentialité : Les messages InfoNet sont obfusqués mais PAS chiffrés de bout en bout. Le réseau maillé (Meshtastic/APRS) n’est PAS privé — les transmissions radio sont intrinsèquement publiques. Les contrats de primitive de confidentialité sont échafaudés mais pas encore câblés. N’envoyez rien de sensible sur aucun canal. Considérez tous les canaux comme ouverts et publics pour l’instant.
Adapté de la stack de reconnaissance OSIRIS (MIT) avec le modèle de proxy de ShadowBroker. Attribution : backend/third_party/osiris/NOTICE.md.
Toolkit de Reconnaissance (barre latérale gauche — opérateur local uniquement) :
us_ofac_sdn d’OpenSanctions (CC-BY) ; recoupements sur les entités WHOIS et les chaînes ISP/org des IP/api/osint/sweep/scan géolocalise une cible /24–/32 et proxy la découverte d’hôte InternetDB Shodan côté serveur (le navigateur ne contacte jamais InternetDB directement)Graphe d’entités — Sélectionnez n’importe quelle entité cartographique pour ouvrir le panneau Graphe d’entités (GET /api/entity/expand). Résout les aéronefs, navires, entreprises, personnes, adresses IP et pays en un graphe nœuds/liens (Wikidata SPARQL + OFAC + magasin en mémoire de vols/navires).
Accès OpenClaw / agent — Les mêmes backends de reconnaissance sont disponibles sur le canal de commandement HMAC (pas de gate d’opérateur local navigateur) : osint_lookup (IP/DNS/WHOIS/certs/BGP/sanctions/CVE/MAC/GitHub/leaks/menaces passif), entity_expand (graphe de relations) et osint_sweep (scan actif de sous-réseau — niveau d’accès complet uniquement). Appelez osint_tools pour lister les types de recherche pris en charge. Package de compétences : openclaw-skills/shadowbroker/ (SKILL.md + sb_query.py).
Superposition Shodan (inchangé) :
sar_pin_click) et déplacer la carte de l’opérateur vers n’importe quel centre de zone d’intérêt (sar_focus_aoi) — permettant des flux de travail collaboratifs d’analystes.frontend/public/data/submarine-cables.json). Superposition de lignes optionnelle./api/cyber-threats et le basculement de couche./api/country-risk.t.me/s/*) à partir de flux configurables guerre/OSINT. Fusion incrémentielle horaire (pas de ré-indexation redondante), notation de risque par mot-clé, alias de lieux cyrilliques/arabes, géocodage par ancre de métro (séparé des centroïdes d'actualités), photo/vidéo en ligne via proxy /api/telegram/media. Clé de couche : telegram_osint.Gaza
ShadowBroker expose un canal de commande IA agentique bidirectionnel — un pont signé et limité par paliers qui donne à tout agent IA compatible un accès complet en lecture/écriture à la plateforme de renseignement. OpenClaw est l'agent de référence, mais le canal est un protocole ouvert : tout agent piloté par LLM qui signe les requêtes avec HMAC-SHA256 (Claude Code, GPT, LangChain, clients Python/TypeScript personnalisés, ou votre propre intégration) peut se connecter en tant qu'analyste voyant les mêmes données que l'opérateur et pouvant agir sur la carte. ShadowBroker n'inclut pas de LLM, d'environnement d'exécution d'agent ou de poids de modèle — il fournit la surface ; vous apportez l'agent.
v0.9.7 transforme ShadowBroker d'un tableau de bord qu'un humain regarde en une surface de renseignement sur laquelle tout agent peut agir.
Transport du canal (NOUVEAU dans v0.9.7) :
POST /api/ai/channel/command accepte {cmd, args} et distribue à tout outil enregistré.POST /api/ai/channel/batch accepte jusqu'à 20 commandes dans une seule requête. Le backend les exécute de manière concurrente et renvoie une carte de résultats fan-out. Réduit la latence de l'agent d'un ordre de grandeur par rapport aux appels séquentiels.OPENCLAW_ACCESS_TIER contrôle les commandes que l'agent peut appeler : restricted expose l'ensemble en lecture seule, full ajoute les écritures et l'injection. Le point de terminaison de découverte renvoie available_commands afin que l'agent puisse inspecter ses propres capacités.HMAC-SHA256(secret, METHOD|path|timestamp|nonce|sha256(body)) avec protection anti-rejeu par timestamp + nonce et intégrité de la requête. Prend en charge le mode local (sans configuration) et le mode distant (agent sur une machine différente / VPS).Capacités :
get_summary → get_layer_slice avec since_layer_versions par couche (la poussée SSE layer_changed indique exactement à l'agent quelles couches ont été mises à jour). search_telemetry est l'index de mots-clés inter-couches de type Google. search_news couvre les actualités, GDELT, CrowdThreat, LiveUAMap, les lignes de front et les messages Telegram. entities_near, brief_area, find_flights/find_ships/find_entity et correlate_entity répondent à des questions ciblées sans extractions de plusieurs mégaoctets.osint_lookup exécute les mêmes backends protégés par SSRF que le panneau Recon (ip, dns, whois, certs, bgp, sanctions, cve, mac, github, leaks, threats, sweep_init). entity_expand construit des graphes de relations Wikidata + OFAC. osint_sweep exécute la découverte de sous-réseaux Shodan InternetDB (palier ). Alias de couches : , /, //, /, /.Connecter un agent : Ouvrez le panneau AI Intel dans la barre latérale gauche, cliquez sur Connect Agent, et copiez le secret HMAC. À partir de là, pointez n'importe quel agent compatible vers le canal — pour OpenClaw, importez ShadowBrokerClient depuis openclaw-skills/shadowbroker/sb_query.py (voir SKILL.md pour des exemples) ; pour tout autre agent, utilisez le même contrat HMAC documenté ci-dessus (timestamp + nonce + digest du corps, limité par palier). Découverte : GET /api/ai/tools et GET /api/ai/capabilities. Le canal est le protocole, pas l'agent.
Docker Compose + agents distants : L'interface utilisateur du tableau de bord communique avec le backend via le pont privé de Docker (approuvé automatiquement). Un agent OpenClaw s'exécutant sur l'hôte (en dehors du conteneur) atteint http://localhost:8000 depuis l'adresse IP de la passerelle Docker — HMAC est requis là. Dans AI Intel → Connect Agent, cliquez sur Bootstrap puis Reveal, copiez SHADOWBROKER_HMAC_SECRET dans votre environnement d'agent, et redémarrez le backend une fois pour que data/openclaw.env sur le volume backend_data soit chargé. Test de fumée avec :```bash
export SHADOWBROKER_URL=http://127.0.0.1:8000
export SHADOWBROKER_HMAC_SECRET=
python openclaw-skills/shadowbroker/verify_hmac.py
Utilisez le port du backend (`:8000`), pas le port du tableau de bord Next.js (`:3000`). Les signataires personnalisés doivent hacher exactement les octets POST : `json.dumps(payload, separators=(",", ":"), sort_keys=True)`.
### ⏱️ Machine à remonter le temps — Lecture des instantanés (NOUVEAU dans v0.9.7)
Un transport de type média pour l'ensemble du flux de télémétrie. Traitez la carte en direct comme un enregistrement qui peut être parcouru, mis en pause et rejoué.
* **Basculement Live ↔ Snapshot** — Le passage en mode instantané met en pause la boucle de sondage globale instantanément ; le retour en mode Live invalide les ETags et force l'actualisation des niveaux rapide et lent afin que le tableau de bord rattrape son retard sans scintillement d'image obsolète.
* **Index horaire** — Chaque instantané capturé est indexé par son créneau horaire avec `count`, `latest_id`, `latest_ts` et la liste complète `snapshot_ids`. Accédez directement à n'importe quel horodatage capturé depuis le curseur de la chronologie.
* **Interpolation de trames** — Les entités en mouvement (avions, navires, satellites, vols militaires) s'interpolent en douceur entre les trames enregistrées pendant la lecture, de sorte que le mouvement reste continu même lorsque les instantanés sont rares.
* **Vitesse de lecture variable** — Avance pas à pas, lecture, avance rapide et retour arrière dans la télémétrie enregistrée à une vitesse réglable.
* **Conscient du profil** — Chaque instantané enregistre le profil de confidentialité qui était actif lors de sa capture, de sorte que la lecture soit fidèle à ce qu'un opérateur sur ce profil aurait vu.
* **Côté opérateur, pas côté serveur** — Les instantanés sont stockés localement dans le backend ; aucun tiers ne voit jamais la chronologie de lecture.
### 📦 Panneau des clés API — Priorité au chemin, lecture seule (NOUVEAU dans v0.9.7)
Paramètres → Clés API est désormais un registre en lecture seule. Les valeurs des clés n'atteignent jamais le processus du navigateur — pas même un préfixe obscurci. Le panneau affiche :
* Le chemin absolu vers le fichier `.env` du backend tel que résolu par `Path(__file__).resolve()` — fonctionne sur tous les OS, tous les lecteurs, tous les emplacements d'installation (Linux `/home/...`, macOS `/Users/...`, Windows sur n'importe quel lecteur, conteneurs Docker, VMs cloud).
* Indicateurs `[exists]` / `[will be created on first save]` / `[NOT WRITABLE — edit by hand]` sur le chemin lui-même.
* Le chemin vers le modèle `.env.example` afin que les utilisateurs puissent le copier et saisir leurs clés.
* Un badge binaire `CONFIGURED` / `NOT CONFIGURED` par clé, plus une ligne env copiable (par ex. `OPENSKY_CLIENT_ID=YOUR_VALUE`) que l'utilisateur peut placer manuellement dans le fichier.
Les identifiants de l'API OpenSky sont désormais une exigence **critical-warn** de l'environnement : la vérification de l'environnement au démarrage signale l'absence d'identifiants OAuth2 OpenSky avec un avertissement fort, et la fenêtre modale du journal des modifications renvoie directement à la page d'inscription gratuite. Sans eux, la couche des vols se rabat sur une couverture ADS-B uniquement avec des lacunes importantes en Afrique, en Asie et en Amérique latine.
</details>
---
<details>
<summary>🏗️ Architecture</summary>
ShadowBroker v0.9.7 est composé de trois plans empilés verticalement — l'**Operator UI**, le **Backend Service Plane** et le **Decentralized Layer (InfoNet)** — ainsi que deux ponts transversaux (la **Time Machine** et le **Agentic AI Channel**, qui est le protocole par lequel OpenClaw et tout autre agent compatible se connecte) et une crate Rust **Privacy Core** qui soutient à la fois le maillage hérité et les futurs travaux de pièce protégée / DEX.```
╔═════════════════════════════════════════════════════════════════════════════╗
║ OPERATOR UI (Next.js + MapLibre) ║
║ ║
║ ┌────────────────┐ ┌──────────┐ ┌────────────────┐ ┌────────────────┐ ║
║ │ MapLibre GL │ │ NewsFeed │ │ Sovereign Shell│ │ Mesh Chat │ ║
║ │ WebGL render │ │ SIGINT │ │ Petitions / │ │ + Mesh Term. │ ║
║ │ + clusters │ │ GDELT │ │ Upgrades / │ │ (Infonet / │ ║
║ │ │ │ Threat │ │ Disputes / │ │ Mesh / │ ║
║ │ │ │ │ │ Gates / │ │ Dead Drop) │ ║
║ │ │ │ │ │ Bootstrap / │ │ │ ║
║ │ │ │ │ │ Function Keys │ │ │ ║
║ └──────┬─────────┘ └────┬─────┘ └────────┬───────┘ └────────┬───────┘ ║
║ │ │ │ │ ║
║ ┌──────┴─────────────────┴─────────────────┴───────────────────┴───────┐ ║
║ │ Time Machine ◀── snapshot playback ── snapshotMode toggle ──▶ Live │ ║
║ │ hourly index │ frame interpolation │ profile-aware │ per-tier ETag │ ║
║ └──────────────────────────────────┬───────────────────────────────────┘ ║
║ │ REST + /api/[...path] proxy ║
╠═════════════════════════════════════╪═══════════════════════════════════════╣
║ BACKEND SERVICE PLANE (FastAPI) ║
║ │ ║
║ ┌──────────────────────────────────┴────────────────────────────────────┐ ║
║ │ Data Fetcher (APScheduler — fast / slow tiers) │ ║
║ │ │ ║
║ │ ┌───────────┬───────────┬───────────┬───────────┬───────────┐ │ ║
║ │ │ OpenSky* │ adsb.lol │ CelesTrak │ USGS │ AIS WS │ │ ║
║ │ │ Flights │ Military │ Sats │ Quakes │ Ships │ │ ║
║ │ ├───────────┼───────────┼───────────┼───────────┼───────────┤ │ ║
║ │ │ Carrier │ GDELT │ CCTV (12) │ DeepState │ NASA │ │ ║
║ │ │ Tracker │ Conflict │ Cameras │ Frontline │ FIRMS │ │ ║
║ │ ├───────────┼───────────┼───────────┼───────────┼───────────┤ │ ║
║ │ │ GPS │ KiwiSDR │ Shodan │ Amtrak │ SatNOGS │ │ ║
║ │ │ Jamming │ Radios │ Devices │ DigiTraf │ TinyGS │ │ ║
║ │ ├───────────┼───────────┼───────────┼───────────┼───────────┤ │ ║
║ │ │ Volcanoes │ Weather │ Fishing │ Mil Bases │ IODA │ │ ║
║ │ │ Air Qual │ Alerts │ Activity │ PwrPlants │ Outages │ │ ║
║ │ ├───────────┼───────────┼───────────┼───────────┼───────────┤ │ ║
║ │ │ Sentinel │ MODIS │ VIIRS │ Data │ Meshtastic│ │ ║
║ │ │ Hub/STAC │ Terra │ Nightlts │ Centers │ APRS │ │ ║
║ │ ├───────────┴───────────┴───────────┴───────────┴───────────┤ │ ║
║ │ │ SAR (NEW v0.9.7) │ │ ║
║ │ │ Mode A: ASF Search catalog (free, no account) │ │ ║
║ │ │ Mode B: NASA OPERA / Copernicus EGMS / GFM / EMS / │ │ ║
║ │ │ UNOSAT ground-change anomalies (opt-in) │ │ ║
║ │ └───────────────────────────────────────────────────────────┘ │ ║
║ │ * OpenSky: REQUIRED for global flight coverage │ ║
║ └───────────────────────────────────────────────────────────────────────┘ ║
║ │ ║
║ ┌──────────────────────────────────┴────────────────────────────────────┐ ║
║ │ Snapshot Store (Time Machine source) │ ║
║ │ Hourly index │ per-snapshot layer manifest │ profile metadata │ ║
║ └───────────────────────────────────────────────────────────────────────┘ ║
║ ║
║ ┌───────────────────────────────────────────────────────────────────────┐ ║
║ │ Agentic AI Channel (HMAC-SHA256, tier-gated — OpenClaw + others) │ ║
║ │ │ ║
║ │ POST /api/ai/channel/command → one tool call │ ║
║ │ POST /api/ai/channel/batch → up to 20 concurrent tool calls │ ║
║ │ │ ║
║ │ Tier: restricted (read-only) │ full (read + write + inject) │ ║
║ │ Auth: X-SB-Timestamp + X-SB-Nonce + X-SB-Signature │ ║
║ │ Sig = HMAC-SHA256(secret, METHOD|path|ts|nonce|sha256(body)) │ ║
║ └───────────────────────────────────────────────────────────────────────┘ ║
╠═════════════════════════════════════════════════════════════════════════════╣
║ DECENTRALIZED LAYER (InfoNet Testnet — signed events) ║
║ ║
║ ┌────────────────────────────┐ ┌──────────────────────────────────┐ ║
║ │ Mesh Hashchain │ │ Sovereign Shell Governance │ ║
║ │ │ │ │ ║
║ │ Ed25519 signed events │ │ Petitions (DSL: UPDATE_PARAM, │ ║
║ │ Public-key binding │ │ ENABLE_FEATURE …) │ ║
║ │ Replay / sequence guard │ │ Upgrade-Hash voting (80% / 40% │ ║
║ │ Two-tier finality │ │ quorum / 67% Heavy) │ ║
║ │ ├ Tier 1 (CRDT, fast) │ │ Resolution & Dispute markets │ ║
║ │ └ Tier 2 (epoch finality)│ │ Gate suspend / shutdown / appeal│ ║
║ │ Identity rotation │ │ Bootstrap eligible-node-1-vote │ ║
║ │ Constitutional invariants │ │ (Argon2id PoW, Heavy-Node only)│ ║
║ │ (MappingProxyType) │ │ Function Keys (5 of 6 pieces) │ ║
║ └─────────────┬──────────────┘ └─────────────┬────────────────────┘ ║
║ │ │ ║
║ └──────────────┬──────────────────┘ ║
║ │ ║
║ ┌────────────────────────────┴──────────────────────────────────────┐ ║
║ │ Wormhole / InfoNet Relay (transport layer) │ ║
║ │ Gate personas │ canonical signing │ Dead Drop epoch mailboxes │ ║
║ └───────────────────────────────────────────────────────────────────┘ ║
╠═════════════════════════════════════════════════════════════════════════════╣
║ PRIVACY CORE (Rust crate — locked Protocol contracts) ║
║ ║
║ privacy-core/ ─► Argon2id │ Ed25519/X25519 │ AESGCM │ HKDF ║
║ Ring sigs* │ Stealth addrs* │ Pedersen* │ Bulletproofs*║
║ Blind-sig issuance* (RSA / BBS+ / U-Prove / Idemix) ║
║ ║
║ * = locked Protocol contract; cryptographic primitive lands Sprint 11+ ║
╚═════════════════════════════════════════════════════════════════════════════╝
Distribution
────────────
GitHub (primary): ghcr.io/bigbodycobain/shadowbroker-{backend,frontend}
GitLab (mirror): registry.gitlab.com/bigbodycobain/shadowbroker/{backend,frontend}
Multi-arch: linux/amd64 + linux/arm64 (Raspberry Pi 5 supported)
Desktop: Tauri shell → packaged backend-runtime + Next.js frontend
| Source | Données | Fréquence de mise à jour | Clé API requise |
|---|
| OpenSky Network | Vols commerciaux et privés | ~60s | Oui |
| adsb.lol | Aéronefs militaires | ~60s | Non |
| aisstream.io | Positions des navires AIS | WebSocket en temps réel | Oui |
| CelesTrak | Positions orbitales des satellites (TLE + SGP4) | ~60s | Non |
| USGS Earthquake | Événements sismiques mondiaux | ~60s | Non |
| GDELT Project | Événements de conflits mondiaux | ~6h | Non |
| DeepState Map | Ligne de front ukrainienne | ~30 min | Non |
| Shodan | Recherche d'appareils connectés à Internet | À la demande | Oui |
| OpenSanctions | Index des sanctions OFAC SDN (reconnaissance + graphe d'entités) | Cache 24h | Non |
| abuse.ch Feodo + URLhaus | URL de C2 / distribution de logiciels malveillants | ~5 min (couche optionnelle) | Non |
| CISA KEV | CVE exploitées connues | ~5 min (couche optionnelle) | Non |
| ip-api.com | Géolocalisation IP (reconnaissance, graphe d'entités) | À la demande | Non |
| Google Public DNS | Requêtes DNS-over-HTTPS (reconnaissance) | À la demande | Non |
| RDAP.org | Données d'enregistrement de domaine (reconnaissance) | À la demande | Non |
| crt.sh | Transparence des certificats (reconnaissance) | À la demande | Non |
| bgpview.io | Routage BGP/ASN (reconnaissance) | À la demande | Non |
| TeleGeography (statique) | Routes de câbles sous-marins | Statique | Non |
| ASFINAG | Webcams autoroutières autrichiennes | ~10 min | Non |
| Amtrak | Positions des trains américains | ~60s | Non |
| DigiTraffic | Positions des trains européens | ~60s | Non |
| Global Fishing Watch | Événements d'activité des navires de pêche | ~1h | Oui (GFW_API_TOKEN) |
| Aperçus publics Telegram | Messages des chaînes guerre/OSINT (telegram_osint) | ~1h | Non (facultatif TELEGRAM_OSINT_CHANNELS) |
| Transport for London, NYC DOT, TxDOT | Caméras de vidéosurveillance (Royaume-Uni, États-Unis) | ~10 min | Non |
| Caltrans, WSDOT, GDOT, IDOT, MDOT | Caméras de vidéosurveillance (5 États américains) | ~10 min | Non |
| DGT Espagne, Ville de Madrid | Caméras de vidéosurveillance (Espagne) | ~10 min | Non |
| LTA Singapour | Caméras de circulation à Singapour | ~10 min | Oui |
| Windy Webcams | Webcams mondiales | ~10 min | Non |
| SatNOGS | Stations au sol satellites amateurs | ~30 min | Non |
| TinyGS | Stations au sol satellites LoRa | ~30 min | Non |
| Meshtastic MQTT | Positions des nœuds radio maillés | Temps réel | Non |
| APRS-IS | Positions radio amateur | TCP en temps réel | Non |
| KiwiSDR | Emplacements des récepteurs SDR publics | ~30 min | Non |
| OpenMHZ | Flux scanners police/pompiers | Temps réel | Non |
| Smithsonian GVP | Volcans de l'Holocène dans le monde | Statique (en cache) | Non |
| OpenAQ | Stations de qualité de l'air PM2.5 | ~120s | Non |
| NOAA / NWS | Alertes météorologiques sévères et polygones | ~120s | Non |
| WRI Global Power Plant DB | Plus de 35 000 centrales électriques | Statique (en cache) | Non |
| Ensembles de données des bases militaires | Installations militaires mondiales | Statique (en cache) | Non |
| NASA FIRMS | Points chauds incendie/thermiques NOAA-20 VIIRS | ~120s | Non |
| NOAA SWPC | Indice Kp météo spatiale et événements solaires | ~120s | Non |
| IODA (Georgia Tech) | Alertes de pannes internet régionales | ~120s | Non |
| DC Map (GitHub) | Emplacements des centres de données mondiaux | Statique (cache 7j) | Non |
| NASA GIBS | Imagerie satellite quotidienne MODIS Terra | Quotidien (délai 24-48h) | Non |
| Esri World Imagery | Fond de carte satellite haute résolution | Statique (mis à jour périodiquement) | Non |
| MS Planetary Computer | Scènes Sentinel-2 L2A (clic droit) | À la demande | Non |
| Copernicus CDSE | Imagerie Sentinel Hub (API Process) | À la demande | Oui (gratuit) |
| Lumières nocturnes VIIRS | Détection de changement de luminosité nocturne | Statique | Non |
| RestCountries | Données de profil des pays | À la demande (cache 24h) | Non |
| Wikidata SPARQL | Données des chefs d'État | À la demande (cache 24h) | Non |
| API Wikipedia | Résumés de lieux et images d'aéronefs | À la demande (en cache) | Non |
| OSM Nominatim | Géocodage de noms de lieux (barre LOCATE) | À la demande | Non |
| Tuiles de fond CARTO | Tuiles de carte sombre | Continu | Non |
Confidentialité et audit des données sortantes (#348–#366) : Chaque installation auto-hébergée utilise sa propre adresse IP backend et un identifiant User-Agent par installation. Voir docs/OUTBOUND_DATA.md pour savoir ce qui contacte des tiers, les contrôles optionnels/env, et les compromis acceptés (Referer des caméras, CDN de fond de carte, LiveUAMap, etc.).
SHADOWBROKER_DEV_BIND_ALL=true.env0.0.0.0ADMIN_KEYBACKEND_MEMORY_LIMIT4GSi votre backend s'exécute sur un hôte ou un port différent, définissez BACKEND_URL au moment de l'exécution — aucune reconstruction nécessaire :
# Linux / macOS
BACKEND_URL=http://myserver.com:9096 docker compose up -d
# Podman (via compose.sh wrapper)
BACKEND_URL=http://192.168.1.50:9096 ./compose.sh up -d
# Windows (PowerShell)
$env:BACKEND_URL="http://myserver.com:9096"; docker compose up -d
# Or add to a .env file next to docker-compose.yml:
# BACKEND_URL=http://myserver.com:9096
scripts/mesh/poll-dm-root-health-alerts.mjs, scripts/mesh/export-dm-root-health-prometheus.mjs, scripts/mesh/publish-external-root-witness-package.mjs, scripts/mesh/smoke-external-root-witness-flow.mjs, scripts/mesh/smoke-root-transparency-publication-flow.mjs, scripts/mesh/smoke-dm-root-deployment-flow.mjs, scripts/mesh/sync-dm-root-external-assurance.mjs et docs/mesh/examples/.pip install .
echo "AIS_API_KEY=your_aisstream_key" >> .env echo "OPENSKY_CLIENT_ID=your_opensky_client_id" >> .env echo "OPENSKY_CLIENT_SECRET=your_opensky_secret" >> .env
cd ../frontend npm ci
### Exécution```bash
# From the frontend directory — starts both frontend & backend concurrently
npm run dev
http://localhost:3000http://localhost:8000Si vous utilisez pre-commit, installez les hooks une fois depuis la racine du dépôt :```bash pre-commit install
### Récepteur AIS local (Optionnel)
Vous pouvez injecter vos propres données AIS de navires dans ShadowBroker à l'aide d'un dongle RTL-SDR et d'[AIS-catcher](https://github.com/jvde-github/AIS-catcher), un décodeur AIS open-source. Cela vous donne une couverture en temps réel des navires dans votre zone locale — aucune clé API nécessaire.
1. Branchez un dongle RTL-SDR
2. Installez AIS-catcher ([releases](https://github.com/jvde-github/AIS-catcher/releases)) ou utilisez l'image Docker : ```bash
docker run -d --device /dev/bus/usb \
ghcr.io/jvde-github/ais-catcher -H http://host.docker.internal:4000/api/ais/feed interval 10
AIS-catcher décode les signaux radio VHF sur 161.975 MHz et 162.025 MHz et envoie les données de navires décodées à ShadowBroker toutes les 10 secondes. Les navires détectés par votre antenne SDR apparaissent aux côtés du flux AIS mondial.
Docker (ARM/Raspberry Pi) : Consultez docker-shipfeeder pour une image Docker prête pour la production optimisée pour ARM.
Remarque : La portée AIS dépend de votre antenne — généralement 20 à 40 milles marins avec une configuration de base, 60+ nm avec une antenne VHF marine en hauteur.
| Couche | Par défaut | Description |
|---|
| Vols commerciaux | ✅ ON | Compagnies aériennes, fret, aviation générale |
| Vols privés | ✅ ON | Aéronefs privés non commerciaux |
| Jets privés | ✅ ON | Jets d'affaires haut de gamme avec données propriétaires |
| Vols militaires | ✅ ON | Aéronefs militaires et gouvernementaux |
| Aéronefs suivis | ✅ ON | Liste de surveillance d'intérêt spécial |
| Brouillage GPS | ✅ ON | Zones de dégradation NAC-P |
| Porte-avions / Mil / Cargo | ✅ ON | Porte-avions, cargos, pétroliers |
| Navires civils | ✅ ON | Yachts, bateaux de pêche, de plaisance |
| Croisière / Passagers | ✅ ON | Navires de croisière et ferries |
| Yachts suivis | ✅ ON | Superyachts de milliardaires et oligarques |
| Activité de pêche | ✅ ON | Événements de navires Global Fishing Watch |
| Trains | ✅ ON | Positions Amtrak + trains européens |
| Satellites | ✅ ON | Actifs orbitaux par type de mission |
| SatNOGS | ✅ ON | Stations au sol satellites amateurs |
| TinyGS | ✅ ON | Stations au sol satellites LoRa |
| Tremblements de terre (24h) | ✅ ON | Événements sismiques USGS |
| Points chauds d'incendie (24h) | ✅ ON | Anomalies thermiques VIIRS NASA FIRMS |
| Volcans | ✅ ON | Volcans de l'Holocène Smithsonian |
| Alertes météo | ✅ ON | Polygones de conditions météorologiques sévères |
| Qualité de l'air (PM2.5) | ✅ ON | Stations OpenAQ dans le monde |
| Ligne de front Ukraine | ✅ ON | Positions en direct du front de guerre |
| Alertes aériennes Ukraine | ✅ ON | Alertes de raids aériens régionaux |
| Incidents mondiaux | ✅ ON | Événements de conflit GDELT |
| Réseau de caméras | ✅ ON | Plus de 11 000 caméras issues de 13 sources, 6 pays |
| Pannes Internet | ✅ ON | Alertes de connectivité régionale IODA |
| Centres de données | ✅ ON | Emplacements mondiaux de centres de données (2 000+) |
| Bases militaires | ✅ ON | Installations militaires mondiales |
| Récepteurs KiwiSDR | ✅ ON | Récepteurs radio SDR publics |
| Nœuds Meshtastic | ✅ ON | Positions des nœuds radio maillés |
| APRS | ✅ ON | Positionnement radioamateur |
| Scanners | ✅ ON | Flux de scanners police/pompiers |
| Cycle jour/nuit | ✅ ON | Superposition du terminateur solaire |
| MODIS Terra (quotidien) | ❌ OFF | Imagerie satellite quotidienne NASA GIBS |
| Satellite haute résolution | ❌ OFF | Imagerie satellite sub-métrique Esri |
| Sentinel Hub | ❌ OFF | API de processus Copernicus CDSE |
| Lumières nocturnes VIIRS | ❌ OFF | Détection de changements de lumières nocturnes |
| Centrales électriques | ❌ OFF | Plus de 35 000 centrales électriques mondiales |
| Superposition Shodan | ❌ OFF | Résultats de recherche de périphériques Internet |
| Tendances du fret routier | ❌ OFF | Tendances de mouvement de camions Sentinel-2 sur les grandes autoroutes (Analyser ici) |
| Câbles sous-marins | ❌ OFF | Routes mondiales de câbles sous-marins (GeoJSON statique) |
| C2 de malwares | ❌ OFF | Points de menace Feodo + URLhaus d'abuse.ch |
| Fournisseurs SCM | ❌ OFF | Marqueurs de risque de chaîne d'approvisionnement de niveau 1/2 + alertes panneau |
| Menaces cyber | ❌ OFF | Entrées récentes CISA KEV (statistiques dans la charge utile lente) |
| OSINT Telegram | ✅ ON | Canaux Telegram publics de guerre/OSINT — collecte horaire, épingles géolocalisées |
| SAR | ✅ ON | Catalogue radar à synthèse d'ouverture + alertes d'anomalies |
Outils de reconnaissance et d'entités (pas des couches cartographiques — barre latérale gauche / sélection) :
| Outil | Accès tableau de bord | Commande OpenClaw | Description |
|---|---|---|---|
| Boîte à outils de reconnaissance | Opérateur local (/api/osint/*) | osint_lookup, osint_sweep† | IP, DNS, WHOIS, certificats, BGP, sanctions, CVE, MAC, GitHub, fuites, menaces, balayage de sous-réseau |
| Graphe d'entités | Opérateur local (/api/entity/expand) | entity_expand | Wikidata + OFAC + graphe de relations en magasin en direct |
| Panneau de risque SCM | Opérateur local (/api/scm-suppliers) | get_layer_slice(["scm_suppliers"]) | Synthèse des menaces fournisseurs + marqueurs cartographiques |
| Découverte d'outils | — | osint_tools | Liste les types de recherche de reconnaissance et les schémas d'expansion d'entités |
† osint_sweep (scan actif InternetDB) nécessite OPENCLAW_ACCESS_TIER=full.
</details>
---
<details>
<summary>🔑 Variables d'environnement</summary>
### Backend (`backend/.env`)```env
# Required for airplane telemetry (NEW in v0.9.7 — startup env check flags these as critical)
# Free registration: https://opensky-network.org/index.php?option=com_users&view=registration
OPENSKY_CLIENT_ID=your_opensky_client_id # OAuth2 — global flight state vectors
OPENSKY_CLIENT_SECRET=your_opensky_secret # OAuth2 — paired with Client ID above
# Optional (enhances data quality)
AIS_API_KEY=your_aisstream_key # Maritime vessel tracking (aisstream.io) — ships layer empty without it
LTA_ACCOUNT_KEY=your_lta_key # Singapore CCTV cameras
SHODAN_API_KEY=your_shodan_key # Shodan device search overlay
SH_CLIENT_ID=your_sentinel_hub_id # Copernicus CDSE Sentinel Hub imagery
SH_CLIENT_SECRET=your_sentinel_hub_secret # Paired with Sentinel Hub Client ID
MESH_SAR_EARTHDATA_USER= # NASA Earthdata user (SAR Mode B — OPERA products)
MESH_SAR_EARTHDATA_TOKEN= # NASA Earthdata token (paired with user above)
MESH_SAR_COPERNICUS_USER= # Copernicus Data Space user (SAR Mode B — EGMS / EMS)
MESH_SAR_COPERNICUS_TOKEN= # Copernicus token (paired with user above)
OPENCLAW_ACCESS_TIER=restricted # OpenClaw agent tier: "restricted" (read-only) or "full"
# OPENCLAW_HMAC_SECRET= # Optional; UI Bootstrap persists to data/openclaw.env in Docker
GFW_API_TOKEN=your_gfw_token # Global Fishing Watch — fishing_activity layer (Settings → Maritime)
TELEGRAM_OSINT_ENABLED=true # Telegram OSINT layer (default on)
TELEGRAM_OSINT_CHANNELS=osintdefender,... # Comma-separated public channel slugs (see .env.example)
# Private-lane privacy-core pinning (required when Arti or RNS is enabled)
PRIVACY_CORE_MIN_VERSION=0.1.0
PRIVACY_CORE_ALLOWED_SHA256=your_privacy_core_sha256
# Optional override if you load a non-default shared library path
PRIVACY_CORE_LIB=
Lorsque MESH_ARTI_ENABLED=true ou MESH_RNS_ENABLED=true, le démarrage du backend échoue désormais en mode sécurisé (fail closed) à moins que l'artefact privacy-core chargé ne rapporte une version parsable au moins égale à PRIVACY_CORE_MIN_VERSION et ne corresponde à l'un des hachages dans PRIVACY_CORE_ALLOWED_SHA256.
Générez le hachage à partir de l'artefact que vous avez l'intention de livrer :```powershell Get-FileHash .\privacy-core\target\release\privacy_core.dll -Algorithm SHA256
* Adresse: `mqtt.google.com`
* Port: `1883`
* Nom d'utilisateur: `Google`
* Mot de passe: `Google`
* Sujet: `Fence`
Après vous être connecté au broker MQTT, cliquez sur le bouton **Click to Connect** puis cliquez sur **Click to Publish**. Pour tester si le bouton fonctionne correctement, appuyez sur le bouton côté matériel et vérifiez si les informations reçues sont correctes et si le bouton devient bleu.
Sélectionnez **Single Relay** et configurez les options suivantes:
* `Relay 1` - Relais de test```bash
sha256sum ./privacy-core/target/release/libprivacy_core.so
Confirmez ensuite que les appels authentifiés GET /api/wormhole/status ou GET /api/settings/wormhole-status affichent les mêmes privacy_core.version, privacy_core.library_path et privacy_core.library_sha256.
| Variable | Où définir | Objectif |
|---|---|---|
BACKEND_URL | environment dans docker-compose.yml, ou variable d'environnement shell | URL que le serveur Next.js utilise pour proxyfier les appels API vers le backend. Par défaut à http://backend:8000. Variable d'exécution — pas besoin de reconstruire. |
BACKEND_PORT | .env à la racine du dépôt ou variable d'environnement shell avant docker compose up | Port hôte utilisé pour exposer l'API backend pour les diagnostics locaux. Par défaut à 8000 ; définissez BACKEND_PORT=8001 si le port 8000 est déjà utilisé. Ne change pas BACKEND_URL interne à Docker. |
Fonctionnement : Le frontend proxyfie toutes les requêtes /api/* via le serveur Next.js vers BACKEND_URL en utilisant le réseau interne de Docker. Les navigateurs ne communiquent qu'avec le port 3000 ; le port hôte du backend est uniquement pour les diagnostics locaux. Pour le développement local sans Docker, BACKEND_URL par défaut à http://localhost:8000.
| Qui | Quoi | PR |
|---|
| @Alienmajik | Support Raspberry Pi 5 — packaging ARM64, notes de déploiement headless, réglages d'exécution pour du matériel de classe Pi | — |
| @wa1id | Correction d'ingestion CCTV — SQLite threadé, base de données persistante, initialisation au démarrage, cliquabilité des clusters | #92 |
| @AlborzNazari | Sources DGT Espagne + CCTV Madrid, export de renseignements sur les menaces STIX 2.1 | #91 |
| @adust09 | Couche centrales électriques, couverture de renseignements Asie de l'Est (bases JSDF, enrichissement OACI, actualités Taïwan, classification militaire) | #71, #72, #76, #77, #87 |
| @Xpirix | Améliorations du style et des interactions de LocateBar | #78 |
| @imqdcr | Séparation du bouton navires (4 catégories) + identifiants d'entité MMSI/indicatif stables | — |
| @csysp | Alertes de menaces dissimulables + identifiants d'entité stables pour GDELT et actualités | #48, #63 |
| @suranyami | Constructions Docker multi-arch parallèles (11min → 3min) + correction BACKEND_URL à l'exécution | #35, #44 |
| @chr0n1x | Architecture Kubernetes / chart Helm pour déploiements haute disponibilité | — |
telegrammalwarebotnetcybercisakevscmsuppliersgfwfishing