全球威胁拦截 — 实时地理空间情报平台
ShadowBroker 是一个去中心化情报平台,聚合来自 60 余个实时情报源的跨域 OSINT 遥测数据,整合至单一暗黑行动地图界面。飞机、船舶、卫星、冲突区域、CCTV 网络、GPS 干扰、联网设备、警用扫描仪、网状无线电节点以及突发地缘政治事件——均在同一个屏幕上实时更新,同时提供模糊化通信协议和信息交换基础设施。
基于 Next.js、MapLibre GL、FastAPI 和 Python 构建。提供 40+ 个可切换数据层,包括 SAR 地面变化检测、Telegram OSINT(将公共频道预览地理解析至地图)、服务器端侦察工具包(DNS、WHOIS、制裁、BGP、IP 扫描等)、供应链风险叠加层以及恶意软件/C2 + CISA KEV 网络威胁情报源。多种视觉模式(DEFAULT / SATELLITE / FLIR / NVG / CRT)。右键点击地球上任意一点即可查看国家档案、元首信息、实体图谱扩展以及最新的 Sentinel-2 卫星照片。ShadowBroker 无账号、无产品遥测、无分析功能;仪表板与您自行托管的后端通信。敏感侦察和 Shodan 查询绝不会从浏览器访问第三方 API——它们通过带有 SSRF 防护和本地操作者认证的后端进行代理。OpenClaw / 代理命令通道 暴露相同的侦察后端以及完整的遥测搜索——无需额外的 API 集成。
专为分析师、研究人员、无线电操作员以及任何希望看到当所有公共信号齐聚同一地图时世界面貌的人而设计。
大量全球遥测数据其实已经公开——飞机 ADS-B 广播、海事 AIS 信号、卫星轨道数据、地震传感器、网状无线电网络、警用扫描仪信号、环境监测站、互联网基础设施遥测等等。这些数据散布在数十种工具和 API 中。ShadowBroker 将它们全部整合到一个界面中。
该项目并未引入新的监控能力——它只是聚合和可视化现有的公共数据集。项目完全开源,任何人都可以审计具体访问了哪些数据以及如何访问。ShadowBroker 不包含产品遥测、分析功能或账号。操作者提供的密钥保留在您的本地部署中,但实时 OSINT 功能必然会对您启用或查询的公共数据提供商发出出站请求。
ShadowBroker 包含一个可选的 Shodan 连接器(供操作者提供 API 访问,需 SHODAN_API_KEY)和一个侦察工具包面板,用于无密钥的 OSINT 查询。两者均仅在服务器端运行:浏览器调用您自托管的 /api/osint/* 和 /api/tools/shodan/* 路由;出站请求由后端在 SSRF 验证后发起。侦察需要本地操作者访问(与图层切换和管理路由相同的信任模型)。Shodan 结果渲染为单独的地图叠加层,并受 Shodan 服务条款的约束。
search_telemetry、search_news)、使用完整的侦察工具包(用于 IP/DNS/WHOIS/制裁/CVE 等的 osint_lookup)、扩展实体图谱、放置图钉、控制地图、进行 SAR 地面变化检测、网状网络以及警报投递。代理能看到操作者看到的一切,并能实时在地图上执行操作。⚡ 快速启动(Docker)
git clone https://github.com/bigbodycobain/Shadowbroker.git cd Shadowbroker docker compose pull docker compose up -d
### 来自 GitLab(uses 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
两条路径都会生成完全相同的容器——相同的源代码、相同的CI、相同的镜像,字节对字节。选择你已经使用的生态系统即可。
打开 http://localhost:3000 查看仪表板!(需要 Docker Desktop 或 Docker Engine)
加入私有 InfoNet 集群 (sb-testnet-0): 在仪表板中点击 NODE,或运行
./meshnode.sh作为无头参与者。无需手动对等列表——舰队默认会自动发现种子节点并拉取签名清单。在.env中设置MESH_INFONET_FLEET_JOIN=false以运行私有单节点。
后端端口已被占用? 浏览器只需要端口
3000,但后端 API 也会发布到主机端口8000用于本地诊断。如果另一个应用程序已经占用了8000,请在docker-compose.yml旁边创建或编辑.env文件,设置BACKEND_PORT=8001,然后运行docker compose up -d。
几分钟后新闻/UAP/基地/废水空白? 使用
docker events --since 30m --filter container=shadowbroker-backend --filter event=oom检查后端是否有 OOM 重启。默认的 compose 文件为后端分配了 4GB;如果你的主机内存较少,可以减少启用的数据源,或设置BACKEND_MEMORY_LIMIT=3G,并预计较慢/较重的层会逐渐预热。
Podman 用户: Podman 可以工作,但
podman compose是一个包装器,仍然需要安装 Compose 提供程序。在 Windows/WSL 上,如果看到looking up compose provider failed,请安装podman-compose,然后在克隆的Shadowbroker文件夹内依次运行podman-compose pull和podman-compose up -d。在 Linux/macOS/WSL shell 中,也可以使用./compose.sh --engine podman pull和./compose.sh --engine podman up -d。
🔄 如何更新
ShadowBroker 使用预构建的 Docker 镜像——无需本地构建。更新只需几秒钟:```bash docker compose pull docker compose up -d
好了。`pull` 拉取最新镜像,`up -d` 重启容器。
> **从旧版本迁移?** 先拉取最新的仓库代码,再拉取镜像:
>
> ```bash
> git pull origin main
> docker compose down
> docker compose pull
> docker compose up -d
> ```
>
> Podman 用户应运行相应的提供者命令,例如 `podman-compose pull` 和 `podman-compose up -d`,或在 bash 兼容的 shell 中使用 `./compose.sh --engine podman pull` 和 `./compose.sh --engine podman up -d`。
### 更新完整性
Docker 更新通过签名容器仓库分发。旧版 ZIP 自更新器按以下顺序验证发布档案:
* `MESH_UPDATE_SHA256`,当操作员明确固定摘要时使用。
* `backend/data/release_digests.json`,用于捆绑的发布固定值。
* GitHub 上发布的 `SHA256SUMS.txt` 文件(当捆绑固定值不存在时使用)。
发布维护者在发布前应运行 `python backend/scripts/release_helper.py hash <ShadowBroker_vX.Y.Z.zip>`,然后发布 `SHA256SUMS.txt` 并在发布 ZIP 更新目标时更新 `backend/data/release_digests.json`。更新器会保留操作员覆盖路径,而不是在缺少捆绑摘要时失败关闭,这样现有安装不会因为发布流程错误而被卡住。
### CSP 强化
生产前端附带一个 hydration 兼容的 CSP,以及在 `Content-Security-Policy-Report-Only` 中的严格 nonce 唯一 CSP。仅在验证您的部署中确切构建能正确 hydration 后,再设置 `SHADOWBROKER_STRICT_CSP=1`。运行时不需要 Google 字体;捆绑的 Next 字体管道从应用构建中提供仪表板字体。
### ⚠️ **卡在旧版本?**
**如果 `git pull` 失败,或者 `docker compose up` 始终从源代码构建而不是拉取镜像**,说明您的克隆早于 2026 年 3 月的仓库迁移,该迁移重写了提交历史。普通的 `git pull` 无法修复此问题。请运行:```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
如何确认是否受影响: 如果 docker compose up 显示 RUN apt-get、RUN npm ci 或 RUN pip install——说明它在从源码构建而非拉取预构建镜像。你需要重新克隆一份副本。
其他故障排除方法:
docker compose pull --no-cachedocker image prune -fdocker compose logs -f backend对于高可用部署或家庭实验室集群,ShadowBroker 支持通过 Helm 进行部署。该图表基于 bjw-s-labs 模板,为后端和前端提供了健壮、模块化的配置。
1. 添加仓库:```bash helm repo add bjw-s-labs https://bjw-s-labs.github.io/helm-charts/ helm repo update
**2. 安装 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. 主要特性:
特别感谢 @chr0n1x 贡献了初始的 Kubernetes 架构。
ShadowBroker v0.9.7 发布了 InfoNet(去中心化情报网格 + Sovereign Shell 治理经济)、一个 代理型 AI 命令通道(支持 OpenClaw 和任何 HMAC 签名代理)、时间机器快照回放 以及 SAR 卫星地面变化检测。这是一个实验性测试网 — 不是私人信使,也不是生产级治理系统。
第一个直接内置于 OSINT 平台的去中心化情报通信和治理层。无需账户、无需注册、无需身份。v0.9.7 将 InfoNet 从聊天层提升为完整的治理经济,并有一条明确的路径通向隐私保护的去中心化情报平台。
通信层(自 v0.9.6 起):
send、dm、市场命令、门状态检查。可拖拽面板,最小化到顶部栏。输入 help 查看所有命令。Sovereign Shell — 治理经济(v0.9.7 新增):
UPDATE_PARAM、BATCH_UPDATE_PARAMS、ENABLE_FEATURE 和 DISABLE_FEATURE。可调旋钮通过投票更改 — 无需代码部署。仓库包含一个 docker-compose.yml,可从 GitHub Container Registry 拉取预构建镜像。```bash
git clone https://github.com/BigBodyCobain/Shadowbroker.git
cd Shadowbroker
docker compose pull docker compose up -d
打开 `http://localhost:3000` 查看仪表盘。
> **在公网或局域网上部署?** 大多数情况下无需配置。
> 前端通过 Next.js 服务器将所有 API 调用代理到 `BACKEND_URL`,
> 其默认值为 `http://backend:8000`(Docker 内部网络)。
> 主机端口 `8000` 仅用于本地 API/调试访问(`127.0.0.1:8000`
> 在 `docker-compose.yml` 中)。如果与其他服务冲突,请设置
> `BACKEND_PORT=8001` 在 `.env` 中;将 `BACKEND_URL` 保留为 `http://backend:8000`
> 因为那是 Docker 内部端口。
>
> **在 Docker 外部运行后端** (`cd backend && python main.py`):
> 开发服务器仅绑定**环回接口** (`127.0.0.1:8000`),因此局域网上的其他机器
> 无法使用空的 `ADMIN_KEY` 访问 admin/local-trust 路由。请设置
> `SHADOWBROKER_DEV_BIND_ALL=true` 在 `.env` 中,仅在确实需要
> `0.0.0.0` 时,并针对任何非本地调用者使用强密码 `ADMIN_KEY`。
> 后端内存上限由 `BACKEND_MEMORY_LIMIT` 控制,默认值为
> `4G`。如果 Docker 报告 OOM 事件,后端将重新启动,慢速
> 层在重新填充之前可能显示为空。
>
> 如果后端运行在**不同的主机或端口**上,请在运行时设置 `BACKEND_URL` — 无需重新构建:
>
> ```bash
> # 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
> ```
**Podman 用户:** 不要将 GitHub URL 传递给 `podman compose pull`;请先克隆仓库,`cd Shadowbroker`,然后在该文件夹中运行 compose。`podman compose` 还需要一个 Compose 提供程序。如果 Podman 报告 `looking up compose provider failed`,请安装一个:```bash
# Linux / macOS / WSL
python3 -m pip install --user podman-compose
podman-compose pull
podman-compose up -d
无需克隆仓库。直接使用 GitHub 容器注册表中的预构建镜像。如果您将其发布到 GitLab 注册表,也可用其作为镜像。
创建一个包含以下内容的 docker-compose.yml,直接部署——粘贴到 Portainer 的堆栈编辑器、uncloud deploy 或任意 Docker 主机中:```yaml
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= # Docker internal networking — no rebuild needed depends_on: - backend restart: unless-stopped
所有 41 个图层均可在左侧面板中独立切换开关状态:
该平台针对处理海量实时数据集进行了优化:
304 Not Modified 响应跳过冗余 JSON 解析setData() 绕过 React 协调新贡献者可以查阅 docs/contributor-map.md 获取更简短的入门指南。``` 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 是开源构建的。以下人员贡献了实际代码:
本工具完全基于公开可用的开源情报(OSINT)数据构建。不使用任何机密、受限或非公开数据。运营商位置基于公开报告估计。军事主题的 UI 仅为美观设计。
本项目仅供教育和个人研究目的使用。数据使用限制请参阅各 API 提供商的服务条款。
用 ☕ 和数不清的 API 调用构建
t.me/s 战争/冲突源(OSINTdefender、NEXTA 等)每小时抓取一次、进行风险评分、地理解析至都市锚点,并作为可点击地图图钉呈现,附带内联媒体| 通道 | 隐私状态 | 详情 |
|---|
| Meshtastic / APRS | PUBLIC | RF 无线电传输本质上是公开且可拦截的。 |
| InfoNet 门聊天 | OBFUSCATED | 消息通过门角色和规范载荷签名进行混淆,但不是端到端加密。尽管设计通过 Tor 和 Reticulum 传输,元数据并未隐藏(进行中)。 |
| 死投递私信 | STRONGEST CURRENT LANE | 基于令牌的纪元邮箱,结合 SAS 单词验证。此版本中的最强通道,但尚不完全可信为私有。 |
| Sovereign Shell 治理 | PUBLIC LEDGER | 请愿、投票、升级哈希和争议质押是公共哈希链上的签名事件。通过门角色假名化,但治理行为故意可观察。 |
| 隐私原语(RingCT / stealth / DEX) | NOT YET WIRED | 锁定协议合约已就位,但密码学方案尚未选定。隐私核心 Rust crate 是未来冲刺的集成目标。 |
不要在任何通道上传输敏感信息。 目前,将所有通道视为开放和公开。端到端加密和更深度的原生/Tauri 加固是下一个里程碑。如果你分叉此项目,请保持这些标签不变,不要做出比实现所支持的更强的隐私声明。
repr(),因此哈希值在链中往返无误。MappingProxyType 强制实施身份轮换、渐进惩罚、斜坡里程碑和宪法不变性。隐私原语跑道(v0.9.7 新增):
services/infonet/privacy/contracts.py 中的稳定接口,用于环签名、隐身地址、Pedersen 承诺、范围证明和 DEX 匹配。privacy-core Rust crate 是集成目标 — 隐私模块的调用者无需知道哪个方案处于活动状态。实验性测试网 — 无隐私保障: InfoNet 消息被混淆但不是端到端加密。Mesh 网络(Meshtastic/APRS)不是私密的 — 无线电传输本质上是公开的。隐私原语合约已搭建脚手架但尚未接线。不要在任何通道上发送敏感信息。目前,将所有通道视为开放和公开。
改编自 OSIRIS 侦察栈(MIT),采用 ShadowBroker 的代理模型。归属:backend/third_party/osiris/NOTICE.md。
侦察工具包(左侧边栏 — 仅限本地操作员):
us_ofac_sdn 索引(CC-BY);对 WHOIS 实体和 IP ISP/组织字符串的交叉检查/api/osint/sweep/scan 对目标 /24-/32 进行地理定位,并在服务器端代理 Shodan InternetDB 主机发现(浏览器从不直接联系 InternetDB)实体图 — 选择任意地图实体以打开实体图面板 (GET /api/entity/expand) 。将飞机、船只、公司、人员、IP 和国家解析为节点/链接图(Wikidata SPARQL + OFAC + 内存飞行/船舶存储)。
OpenClaw / 代理访问 — 相同的侦察后端在 HMAC 命令通道上可用(无浏览器本地操作员门):osint_lookup(被动 IP/DNS/WHOIS/证书/BGP/制裁/CVE/MAC/GitHub/泄露/威胁)、entity_expand(关系图)和 osint_sweep(主动子网扫描 — 完整访问层级仅限)。调用 osint_tools 列出支持的查询类型。技能包:openclaw-skills/shadowbroker/(SKILL.md + sb_query.py)。
Shodan 叠加层(未更改):
sar_pin_click) 并将操作员地图飞至任何 AOI 中心 (sar_focus_aoi) — 实现协作分析工作流。frontend/public/data/submarine-cables.json)的全球海底电缆路由。可选线覆盖层。/api/cyber-threats 和图层切换暴露。/api/country-risk 提供 USGS 地震增强数据。t.me/s/*)。每小时增量合并(不重复抓取),关键词风险评分,西里尔/阿拉伯语地名别名,地铁锚点地理编码(与新闻质心分离),通过 /api/telegram/media 代理的内联照片/视频。图层键:telegram_osint。Gaza
ShadowBroker 暴露了一个双向智能体 AI 命令通道——一个经过签名、按层级分级的桥梁,允许任何兼容的 AI 智能体对情报平台进行完全读写访问。OpenClaw 是参考智能体,但该通道是一个开放协议:任何使用 HMAC-SHA256 签名请求的 LLM 驱动智能体(Claude Code、GPT、LangChain、自定义 Python/TypeScript 客户端,或您自己的集成)都可以作为分析师连接,查看与操作员相同的数据,并在地图上执行操作。ShadowBroker 不 捆绑 LLM、智能体运行时或模型权重——它提供表面;您自带智能体。
v0.9.7 将 ShadowBroker 从人类观看的仪表板转变为任何智能体均可操作的情报表面。
通道传输(v0.9.7 新增):
POST /api/ai/channel/command 接受 {cmd, args} 并分发到任何已注册工具。POST /api/ai/channel/batch 在一个请求中接受最多 20 个命令。后端并发运行它们,并返回扇出结果映射。相比顺序调用,将智能体延迟降低一个数量级。OPENCLAW_ACCESS_TIER 控制智能体可以调用的命令:restricted 暴露只读集,full 添加写入和注入。发现端点返回 available_commands,以便智能体自省其能力。HMAC-SHA256(secret, METHOD|path|timestamp|nonce|sha256(body)) 签名,带有时间戳 + nonce 重放保护和请求完整性。支持本地模式(无需配置)和远程模式(智能体位于不同机器/VPS 上)。能力:
get_summary → get_layer_slice 使用每层的 since_layer_versions(SSE layer_changed 推送告诉智能体哪些层已更新)。search_telemetry 是类似于 Google 的跨层关键词索引。search_news 覆盖新闻、GDELT、CrowdThreat、LiveUAMap、前线以及 Telegram 帖子。entities_near、brief_area、find_flights/find_ships/find_entity 和 correlate_entity 回答针对性问题,无需进行数兆字节拉取。osint_lookup 运行与侦察面板相同的 SSRF 保护后端(ip、dns、whois、certs、bgp、sanctions、cve、mac、github、leaks、threats、sweep_init)。entity_expand 构建 Wikidata + OFAC 关系图。osint_sweep 运行 Shodan InternetDB 子网发现(完整层级)。图层别名:telegram、malware/botnet、cyber/cisa/kev、scm/suppliers、gfw/fishing。连接智能体: 打开左侧边栏中的 AI 情报面板,点击 连接智能体,并复制 HMAC 密钥。从那里,将任何兼容智能体指向通道——对于 OpenClaw,从 openclaw-skills/shadowbroker/sb_query.py 导入 ShadowBrokerClient(参见 SKILL.md 中的示例);对于任何其他智能体,使用上述相同的 HMAC 约定(时间戳 + nonce + body 摘要,按层级门控)。发现:GET /api/ai/tools 和 GET /api/ai/capabilities。通道是协议,而非智能体。
Docker Compose + 远程智能体: 仪表板 UI 通过 Docker 私有桥接与后端通信(自动信任)。运行在主机(容器外)的 OpenClaw 智能体从 Docker 网关 IP 访问 http://localhost:8000——那里需要 HMAC。在 AI 情报 → 连接智能体中,点击 Bootstrap 然后 Reveal,将 SHADOWBROKER_HMAC_SECRET 复制到您的智能体环境变量中,然后重启后端一次,以便加载 backend_data 卷上的 data/openclaw.env。使用以下命令冒烟测试:```bash
export SHADOWBROKER_URL=http://127.0.0.1:8000
export SHADOWBROKER_HMAC_SECRET=
python openclaw-skills/shadowbroker/verify_hmac.py
使用后端端口(`:8000`),而不是 Next.js 仪表板端口(`:3000`)。自定义签名者必须哈希确切的 POST 字节:`json.dumps(payload, separators=(",", ":"), sort_keys=True)`。
### ⏱️ 时间机器 — 快照回放(v0.9.7 新增)
一种媒体式传输机制,用于整个遥测数据流。将实时地图视为可拖动、暂停和回放的录制内容。
* **实时 ↔ 快照切换** — 切换到快照模式会立即暂停全局轮询循环;切换回实时模式会使 ETag 失效并强制刷新快速和慢速两层,使仪表板无陈旧帧闪烁地追赶。
* **小时索引** — 每个捕获的快照按其小时桶索引,包含 `count`、`latest_id`、`latest_ts` 和完整的 `snapshot_ids` 列表。直接从时间线拖拽器跳转到任何捕获的时间戳。
* **帧插值** — 移动实体(飞机、船舶、卫星、军用航班)在回放期间在记录的帧之间平滑插值,使运动保持连续,即使快照稀疏。
* **可变回放速度** — 以可调速度逐帧、播放、快进和快退已保存的遥测数据。
* **配置文件感知** — 每个快照记录捕获时活动的隐私配置文件,因此回放忠实于该配置文件操作员所见。
* **操作员端而非服务器端** — 快照存储在本地后端;任何第三方都看不到回放时间线。
### 📦 API 密钥面板 — 路径优先、只读(v0.9.7 新增)
设置 → API 密钥现在是一个只读注册表。密钥值永远不会到达浏览器进程——即使是混淆前缀也不会。该面板显示:
* 后端 `.env` 文件的绝对路径,由 `Path(__file__).resolve()` 解析——适用于每个操作系统、每个驱动器、每个安装位置(Linux `/home/...`、macOS `/Users/...`、Windows 任意驱动器、Docker 容器、云虚拟机)。
* 路径本身的 `[exists]` / `[will be created on first save]` / `[NOT WRITABLE — edit by hand]` 指示符。
* `.env.example` 模板的路径,以便用户复制并填写自己的密钥。
* 每个密钥的二进制 `CONFIGURED` / `NOT CONFIGURED` 徽章,加上可复制粘贴的环境变量行(例如 `OPENSKY_CLIENT_ID=YOUR_VALUE`),用户可以手动放入文件中。
OpenSky API 凭据现在是一个**关键警告**环境要求:启动环境检查会标记缺少 OpenSky OAuth2 凭据并发出强烈警告,变更日志模态框直接链接到免费注册页面。如果没有它们,航班层将回退到仅 ADS-B 覆盖,在非洲、亚洲和拉丁美洲存在显著空白。
</details>
---
<details>
<summary>🏗️ 架构</summary>
ShadowBroker v0.9.7 由三个垂直堆叠的平面组成——**操作员 UI**、**后端服务平面**和**去中心化层(InfoNet)**——加上两个横切桥接(**时间机器**和**代理 AI 通道**,这是 OpenClaw 和任何其他兼容代理连接的协议)以及一个 **Privacy Core** Rust crate,它既支撑传统网格也支撑未来的屏蔽币/去中心化交易所工作。```
╔═════════════════════════════════════════════════════════════════════════════╗
║ 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
| 来源 | 数据 | 更新频率 | 需要API密钥 |
|---|
| OpenSky Network | 商业及私人航班 | ~60s | 是 |
| adsb.lol | 军用飞机 | ~60s | 否 |
| aisstream.io | AIS船舶位置 | 实时WebSocket | 是 |
| CelesTrak | 卫星轨道位置(TLE + SGP4) | ~60s | 否 |
| USGS Earthquake | 全球地震事件 | ~60s | 否 |
| GDELT Project | 全球冲突事件 | ~6小时 | 否 |
| DeepState Map | 乌克兰前线 | ~30分钟 | 否 |
| Shodan | 联网设备搜索 | 按需 | 是 |
| OpenSanctions | OFAC SDN制裁索引(侦察 + 实体图表) | 24小时缓存 | 否 |
| abuse.ch Feodo + URLhaus | 恶意软件C2/分发URL | ~5分钟(可选层) | 否 |
| CISA KEV | 已知被利用的CVE | ~5分钟(可选层) | 否 |
| ip-api.com | IP地理定位(侦察,实体图表) | 按需 | 否 |
| Google Public DNS | DNS-over-HTTPS查询(侦察) | 按需 | 否 |
| RDAP.org | 域名注册数据(侦察) | 按需 | 否 |
| crt.sh | 证书透明度(侦察) | 按需 | 否 |
| bgpview.io | BGP/ASN路由(侦察) | 按需 | 否 |
| TeleGeography (静态) | 海底电缆路由 | 静态 | 否 |
| ASFINAG | 奥地利高速公路网络摄像头 | ~10分钟 | 否 |
| Amtrak | 美国列车位置 | ~60s | 否 |
| DigiTraffic | 欧洲铁路位置 | ~60s | 否 |
| Global Fishing Watch | 渔船活动事件 | ~1小时 | 是(GFW_API_TOKEN) |
| Telegram公共预览 | 战争/OSINT频道帖子(telegram_osint) | ~1小时 | 否(可选TELEGRAM_OSINT_CHANNELS) |
| 伦敦交通局、纽约市交通局、德克萨斯州交通局 | CCTV摄像头(英国,美国) | ~10分钟 | 否 |
| Caltrans, WSDOT, GDOT, IDOT, MDOT | CCTV摄像头(美国5州) | ~10分钟 | 否 |
| 西班牙DGT、马德里市 | CCTV摄像头(西班牙) | ~10分钟 | 否 |
| 新加坡陆路交通管理局 | 新加坡交通摄像头 | ~10分钟 | 是 |
| Windy网络摄像头 | 全球网络摄像头 | ~10分钟 | 否 |
| SatNOGS | 业余卫星地面站 | ~30分钟 | 否 |
| TinyGS | LoRa卫星地面站 | ~30分钟 | 否 |
| Meshtastic MQTT | Mesh无线节点位置 | 实时 | 否 |
| APRS-IS | 业余无线电位置 | 实时TCP | 否 |
| KiwiSDR | 公共SDR接收器位置 | ~30分钟 | 否 |
| OpenMHZ | 警察/消防扫描器流 | 实时 | 否 |
| 史密森尼全球火山计划 | 全球全新世火山 | 静态(缓存) | 否 |
| OpenAQ | 空气质量PM2.5站点 | ~120s | 否 |
| NOAA / NWS | 恶劣天气警报与多边形 | ~120s | 否 |
| WRI全球发电厂数据库 | 35,000+ 发电厂 | 静态(缓存) | 否 |
| 军事基地数据集 | 全球军事设施 | 静态(缓存) | 否 |
| NASA FIRMS | NOAA-20 VIIRS火灾/热热点 | ~120s | 否 |
| NOAA SWPC | 空间天气Kp指数与太阳事件 | ~120s | 否 |
| IODA(佐治亚理工学院) | 区域互联网中断警报 | ~120s | 否 |
| DC地图(GitHub) | 全球数据中心位置 | 静态(缓存7天) | 否 |
| NASA GIBS | MODIS Terra每日卫星图像 | 每日(延迟24-48小时) | 否 |
| Esri世界影像 | 高分辨率卫星底图 | 静态(定期更新) | 否 |
| MS行星计算机 | Sentinel-2 L2A场景(右键) | 按需 | 否 |
| Copernicus CDSE | Sentinel Hub图像(Process API) | 按需 | 是(免费) |
| VIIRS夜光 | 夜间灯光变化检测 | 静态 | 否 |
| RestCountries | 国家概况数据 | 按需(缓存24小时) | 否 |
| Wikidata SPARQL | 国家元首数据 | 按需(缓存24小时) | 否 |
| Wikipedia API | 位置摘要与飞机图像 | 按需(缓存) | 否 |
| OSM Nominatim | 地名地理编码(LOCATE栏) | 按需 | 否 |
| CARTO底图 | 深色地图瓦片 | 持续 | 否 |
出站隐私与审计(#348–#366): 每个自托管实例使用自己的后端IP和每实例User-Agent句柄。请参阅 docs/OUTBOUND_DATA.md 了解哪些内容会联系第三方、选择加入/环境变量控制以及接受的权衡(CCTV Referer、底图CDN、LiveUAMap等)。
(空输入,无输出)```powershell
py -m pip install --user podman-compose podman-compose pull podman-compose up -d
如果您处于 bash 兼容的 shell 环境中,附带的包装器可以自动检测 Docker 或 Podman:```bash
./compose.sh --engine podman pull
./compose.sh --engine podman up -d
volumes: backend_data:
> **工作原理:** 前端容器通过 Next.js 服务器将所有 `/api/*` 请求代理到 `BACKEND_URL`,使用 Docker 的内部网络。浏览器始终只与端口 3000 通信。后端的主机端口用于本地 API/调试访问,可以通过 `BACKEND_PORT=8001` 更改,而无需更改 `BACKEND_URL`。
>
> `BACKEND_URL` 是一个纯运行时环境变量(不是构建时的 `NEXT_PUBLIC_*`),因此您可以在 Portainer、Uncloud 或任何 compose 编辑器中更改它,而无需重建镜像。将其设置为从 Docker 网络内部可访问的后端地址(例如 `http://backend:8000`、`http://192.168.1.50:8000`)。
</details>
---
<details>
<summary>📦 快速启动(无需代码)</summary>
如果您只想运行仪表板而不处理终端命令:
1. 转到此仓库页面右侧的 **[Releases](https://raw.githubusercontent.com/bigbodycobain/releases)** 选项卡。
2. 从发布中下载最新的 `.zip` 文件。
3. 将文件夹解压到您的计算机。
4. **Windows:** 双击 `start.bat`。
**Mac/Linux:** 打开终端,输入 `chmod +x start.sh`、`dos2unix start.sh`,然后运行 `./start.sh`。
5. 它将自动安装所有内容并启动仪表板!
本地启动器说明:
- `start.bat` / `start.sh` 在没有 Docker 的情况下运行应用程序——它们直接安装依赖项并启动两个服务器。
- 如果升级后 Wormhole 身份或 DM 联系端点失败,请查看 `docs/mesh/` 文件夹以进行故障排除。
- 对于 DM 根见证、透明度和操作员监控部署,请从 `docs/mesh/wormhole-dm-root-operations-runbook.md` 开始。
- 对于示例 DM 根操作桥接资产,另请参阅 `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` 和 `docs/mesh/examples/`。
</details>
---
<details>
<summary>💻 开发者设置</summary>
如果您想修改代码或从源代码运行:
#### 先决条件
* **Node.js** 18+ 和 **npm** — [nodejs.org](https://nodejs.org/)
* **Python** 3.10、3.11 或 3.12 与 `pip` — [python.org](https://www.python.org/downloads/)(安装时**勾选“添加到 PATH”**)
* ⚠️ Python 3.13+ 可能与某些依赖项存在兼容性问题。**建议使用 3.11 或 3.12。**
* API 密钥:`aisstream.io`(必需),以及可选的 `opensky-network.org`(OAuth2)、`lta.gov.sg`
### 安装```bash
# Clone the repository
git clone https://github.com/BigBodyCobain/Shadowbroker.git
cd Shadowbroker
# Backend setup
cd backend
python -m venv venv
venv\Scripts\activate # Windows
# source venv/bin/activate # macOS/Linux
pip install .
# Optional helper scripts (creates venv + installs dev deps)
# Windows PowerShell
# .\backend\scripts\setup-venv.ps1
# macOS/Linux
# ./backend/scripts/setup-venv.sh
# Optional env check (prints warnings for missing keys)
# Windows PowerShell
# .\backend\scripts\check-env.ps1
# macOS/Linux
# ./backend/scripts/check-env.sh
# Create .env with your API keys
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
# Frontend setup
cd ../frontend
npm ci
npm run dev
* **Next.js** 前端位于 `http://localhost:3000`
* **FastAPI** 后端位于 `http://localhost:8000`
### Pre-commit(可选)
如果你使用 pre-commit,从仓库根目录安装一次钩子:```bash
pre-commit install
您可以使用 RTL-SDR 加密狗和开源 AIS 解码器 AIS-catcher 将您自己的 AIS 船舶数据输入到 ShadowBroker。这为您提供了本地区域的实时覆盖范围——无需 API 密钥。
AIS-catcher 解码 161.975 MHz 和 162.025 MHz 上的 VHF 无线电信号,并每 10 秒将解码后的船舶数据 POST 到 ShadowBroker。您的 SDR 天线检测到的船舶会与全球 AIS 数据流一同显示。
Docker (ARM/Raspberry Pi): 请参见 docker-shipfeeder 获取专为 ARM 优化的生产就绪 Docker 镜像。
注意: AIS 范围取决于您的天线——基本设置下通常为 20-40 海里,使用升高安装的船用 VHF 天线可达 60 海里以上。
| 图层 | 默认状态 | 描述 |
|---|
| 商业航班 | ✅ 开启 | 航空公司、货运、通用航空 |
| 私人航班 | ✅ 开启 | 非商业私人飞机 |
| 私人喷气机 | ✅ 开启 | 包含所有者数据的高价值商务喷气机 |
| 军用航班 | ✅ 开启 | 军用和政府飞机 |
| 监视飞机 | ✅ 开启 | 特别关注监视名单 |
| GPS 干扰 | ✅ 开启 | NAC-P 降级区域 |
| 航母/军用/货运 | ✅ 开启 | 海军航母、货船、油轮 |
| 民用船只 | ✅ 开启 | 游艇、渔船、休闲船只 |
| 邮轮/客船 | ✅ 开启 | 邮轮和渡轮 |
| 监视游艇 | ✅ 开启 | 亿万富翁和寡头的超级游艇 |
| 捕鱼活动 | ✅ 开启 | Global Fishing Watch 船只事件 |
| 火车 | ✅ 开启 | Amtrak + 欧洲铁路位置 |
| 卫星 | ✅ 开启 | 按任务类型分类的轨道资产 |
| SatNOGS | ✅ 开启 | 业余卫星地面站 |
| TinyGS | ✅ 开启 | LoRa 卫星地面站 |
| 地震(24小时) | ✅ 开启 | USGS 地震事件 |
| 火灾热点(24小时) | ✅ 开启 | NASA FIRMS VIIRS 热异常 |
| 火山 | ✅ 开启 | Smithsonian 全新世火山 |
| 天气警报 | ✅ 开启 | 恶劣天气多边形 |
| 空气质量(PM2.5) | ✅ 开启 | 全球 OpenAQ 站点 |
| 乌克兰前线 | ✅ 开启 | 实时战争前线位置 |
| 乌克兰空袭警报 | ✅ 开启 | 区域空袭警报 |
| 全球事件 | ✅ 开启 | GDELT 冲突事件 |
| CCTV 监控网格 | ✅ 开启 | 跨越 13 个来源、6 个国家的 11,000+ 摄像头 |
| 互联网中断 | ✅ 开启 | IODA 区域连接性警报 |
| 数据中心 | ✅ 开启 | 全球数据中心位置(2000+) |
| 军事基地 | ✅ 开启 | 全球军事设施 |
| KiwiSDR 接收器 | ✅ 开启 | 公共 SDR 无线电接收器 |
| Meshtastic 节点 | ✅ 开启 | 网格无线电节点位置 |
| APRS | ✅ 开启 | 业余无线电定位 |
| 扫描仪 | ✅ 开启 | 警察/消防扫描仪源 |
| 昼夜循环 | ✅ 开启 | 太阳终止线叠加 |
| MODIS Terra(每日) | ❌ 关闭 | NASA GIBS 每日卫星图像 |
| 高分辨率卫星 | ❌ 关闭 | Esri 亚米级卫星图像 |
| Sentinel Hub | ❌ 关闭 | Copernicus CDSE 处理 API |
| VIIRS 夜光 | ❌ 关闭 | 夜间灯光变化检测 |
| 发电站 | ❌ 关闭 | 35,000+ 全球发电站 |
| Shodan 叠加 | ❌ 关闭 | 互联网设备搜索结果 |
| 公路货运趋势 | ❌ 关闭 | 主要高速公路上的 Sentinel-2 卡车运动趋势(在此分析) |
| 海底光缆 | ❌ 关闭 | 全球海底光缆路线(静态 GeoJSON) |
| 恶意软件 C2 | ❌ 关闭 | abuse.ch Feodo + URLhaus 威胁点 |
| SCM 供应商 | ❌ 关闭 | 一级/二级供应链风险标记 + 面板警报 |
| 网络威胁 | ❌ 关闭 | 近期 CISA KEV 条目(慢速层载荷中的统计信息) |
| Telegram OSINT | ✅ 开启 | 公共战争/OSINT Telegram 频道——每小时抓取、地理解析标注 |
| SAR | ✅ 开启 | 合成孔径雷达目录 + 异常警报 |
侦察与实体工具(非地图图层——左侧边栏/选中时):
| 工具 | 仪表盘访问 | OpenClaw 命令 | 描述 |
|---|---|---|---|
| 侦查工具包 | 本地操作员 (/api/osint/*) | osint_lookup, osint_sweep† | IP、DNS、WHOIS、证书、BGP、制裁、CVE、MAC、GitHub、泄露、威胁、子网扫描 |
| 实体关系图 | 本地操作员 (/api/entity/expand) | entity_expand | Wikidata + OFAC + 实时存储关系图 |
| SCM 风险面板 | 本地操作员 (/api/scm-suppliers) | get_layer_slice(["scm_suppliers"]) | 供应商威胁汇总 + 地图标记 |
| 工具发现 | — | osint_tools | 列出侦查查询类型和实体扩展模式 |
† osint_sweep(主动 InternetDB 扫描)需要 OPENCLAW_ACCESS_TIER=full。
</details>
---
<details>
<summary>🔑 环境变量</summary>
### 后端 (`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=
当 MESH_ARTI_ENABLED=true 或 MESH_RNS_ENABLED=true 时,后端启动现在会失败关闭,除非加载的 privacy-core 工件报告一个可解析的版本,该版本不低于 PRIVACY_CORE_MIN_VERSION 并且匹配 PRIVACY_CORE_ALLOWED_SHA256 中的一个哈希值。
从你想要发布的工件生成哈希值:```powershell Get-FileHash .\privacy-core\target\release\privacy_core.dll -Algorithm SHA256
#### 运行PowerShell有效负载
你可以运行Powerfun,这是一个PowerShell脚本,它是一个反向Shell,具有一些技巧,比如作为服务运行。
```print(bcolors.HEADER + "===============================\nPowerFun Reverse Shell & mkfifo listener Standalone script\n===============================" + bcolors.ENDC)```
print(bcolors.HEADER + "===============================\nPowerFun Reverse Shell & mkfifo 监听器 独立脚本\n===============================" + bcolors.ENDC)``````bash
sha256sum ./privacy-core/target/release/libprivacy_core.so
然后确认已验证的 GET /api/wormhole/status 或 GET /api/settings/wormhole-status 返回相同的 privacy_core.version、privacy_core.library_path 和 privacy_core.library_sha256。
| 变量 | 设置位置 | 用途 |
|---|---|---|
BACKEND_URL | docker-compose.yml 中的 environment,或 shell 环境变量 | Next.js 服务器用于将 API 调用代理到后端的 URL。默认值为 http://backend:8000。运行时变量 — 无需重新构建。 |
BACKEND_PORT | 仓库根目录下的 .env 或执行 docker compose up 前的 shell 环境变量 | 用于在本地诊断时暴露后端 API 的主机端口。默认值为 8000;如果端口 8000 已被占用,可设为 BACKEND_PORT=8001。不会改变 Docker 内部的 BACKEND_URL。 |
工作原理: 前端将所有 /api/* 请求通过 Next.js 服务器代理到 BACKEND_URL,利用 Docker 的内部网络。浏览器只与 3000 端口通信;后端主机端口仅用于本地诊断。在无 Docker 的本地开发中,BACKEND_URL 默认值为 http://localhost:8000。
| 贡献者 | 贡献内容 | PR |
|---|
| @Alienmajik | Raspberry Pi 5 支持 — ARM64 打包、无头部署说明、Pi 级别硬件的运行时调优 | — |
| @wa1id | CCTV 数据摄取修复 — 线程化 SQLite、持久数据库、启动时数据填充、集群可点击性 | #92 |
| @AlborzNazari | 西班牙 DGT + 马德里 CCTV 数据源、STIX 2.1 威胁情报导出 | #91 |
| @adust09 | 发电厂图层、东亚情报覆盖(JSDF 基地、ICAO 数据丰富、台湾新闻、军事分类) | #71, #72, #76, #77, #87 |
| @Xpirix | LocateBar 样式和交互改进 | #78 |
| @imqdcr | 船舶切换拆分(4 个类别)+ 稳定的 MMSI/呼号实体 ID | — |
| @csysp | 可关闭的威胁告警 + GDELT 和新闻的稳定实体 ID | #48, #63 |
| @suranyami | 并行多架构 Docker 构建(11 分钟 → 3 分钟)+ 运行时 BACKEND_URL 修复 | #35, #44 |
| @chr0n1x | 高可用部署的 Kubernetes / Helm chart 架构 | — |