
Shadowbroker v0.9.84
实时地理空间开源情报平台,聚合60多个公共遥测数据源(ADS-B、AIS、卫星、CCTV)到统一地图,配备服务器端侦察工具包、AI智能体通道和去中心化网状通信。
🛰️ S H A D O W B R O K E R
全球威胁拦截 — 实时地理空间情报平台
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 功能必然会对您启用或查询的公共数据提供商发出出站请求。
📡 Shodan 与侦察(安全优先)
ShadowBroker 包含一个可选的 Shodan 连接器(供操作者提供 API 访问,需 SHODAN_API_KEY)和一个侦察工具包面板,用于无密钥的 OSINT 查询。两者均仅在服务器端运行:浏览器调用您自托管的 /api/osint/* 和 /api/tools/shodan/* 路由;出站请求由后端在 SSRF 验证后发起。侦察需要本地操作者访问(与图层切换和管理路由相同的信任模型)。Shodan 结果渲染为单独的地图叠加层,并受 Shodan 服务条款的约束。
🗺️ 有趣的使用案例
- 追踪空军一号、亿万富翁和独裁者的私人飞机,以及所有广播 ADS-B 的军用加油机、ISR 和战斗机。空军一号及其所有随行的总统/副总统专机从起飞那一刻起就会被高亮显示并监控。
- 将 AI 代理作为协同分析师接入 ShadowBroker 的 HMAC 签名代理命令通道——支持 OpenClaw 及任何遵循该协议的代理(Claude、GPT、LangChain、自定义)。代理可读写全部 40+ 数据层、执行紧凑的跨层搜索(
search_telemetry、search_news)、使用完整的侦察工具包(用于 IP/DNS/WHOIS/制裁/CVE 等的osint_lookup)、扩展实体图谱、放置图钉、控制地图、进行 SAR 地面变化检测、网状网络以及警报投递。代理能看到操作者看到的一切,并能实时在地图上执行操作。 - 在 InfoNet 测试网上通信——首个内置于 OSINT 工具的去中心化情报网络。通过门面身份进行模糊化消息传递、基于 Dead Drop 的点对点交换,以及内置终端 CLI。无需账号,无需注册。隐私尚未得到保证——这是一个实验性测试网——但协议已经上线并正在加强。
- 右键点击地球上任意一点,获取国家档案(国家元首、人口、语言)、维基百科摘要以及最新的 10 米分辨率 Sentinel-2 卫星照片
- 点击 KiwiSDR 节点,直接在仪表板中收听实时短波电台。点击警用扫描仪源,一键监听。
- 观看 11,000 多个 CCTV 摄像头,覆盖 6 个国家——伦敦、纽约、加州、西班牙、新加坡等——在地图上实时直播
- 实时查看 GPS 干扰区域——基于飞机应答器数据 NAC-P 降级分析得出
- 监控头顶卫星,按任务类型颜色编码——军事侦察、SIGINT、SAR、早期预警、空间站——附带 SatNOGS 和 TinyGS 地面站网络
- 跟踪海上交通,包括 25,000 多艘 AIS 船只、通过 Global Fishing Watch 获取的捕鱼活动以及亿万富翁超级游艇
- 关注地震、火山喷发、活跃野火(NASA FIRMS)、恶劣天气警报以及全球空气质量读数
- 标注军事基地、35,000 多座发电厂、2,000 多个数据中心以及互联网中断区域——自动交叉引用
- 连接 Meshtastic 网状无线电节点和 APRS 业余无线电网络——在地图上可见并集成到 Mesh Chat 中
- 通过 SAR(合成孔径雷达)穿透云层检测地面变化——来自 NASA OPERA 和 Copernicus EGMS 的毫米级地表形变、洪水范围、植被干扰和灾害评估。定义自己的监控区域并获取异常警报。使用 NASA Earthdata 账户免费获取。
- 切换视觉模式——DEFAULT、SATELLITE、FLIR(热成像)、NVG(夜视)、CRT(复古终端)——通过 STYLE 按钮
- 实时跟踪美国(Amtrak)和欧洲(DigiTraffic)的火车
- 利用自动化 GDELT 新闻抓取估算美国航空母舰位置——没有其他开放工具能做到这一点
- 通过 Shodan 搜索全球联网设备——摄像头、SCADA 系统、数据库——在地图上绘制为实时叠加层
- 从左侧边栏运行完整的侦察工具包——IP 地理定位、DNS、RDAP/WHOIS、证书透明度、BGP/ASN、OFAC 制裁搜索、CVE 查询、Tor/OTX 威胁检查以及子网扫描(InternetDB 通过服务器端代理)
- 选择飞机、船只、公司或 IP 时扩展实体图谱——Wikidata + OFAC + 实时商店交叉链接,在实体图谱面板中渲染
- 监控供应链风险——一级/二级半导体和电池工厂根据附近的地震、野火和冲突事件进行评分(SCM 面板)
- 切换恶意软件 C2 热点——abuse.ch Feodo Tracker + URLhaus 按国家映射的源数据(可选图层)
- 监控 Telegram OSINT 频道——公共
t.me/s战争/冲突源(OSINTdefender、NEXTA 等)每小时抓取一次、进行风险评分、地理解析至都市锚点,并作为可点击地图图钉呈现,附带内联媒体 - 叠加全球海底电缆——静态 TeleGeography 衍生电缆路由(可选图层)
⚡ 快速启动(Docker)
从 GitHub 部署(默认——使用 GHCR 镜像)```bash
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-cache - 清理旧镜像:
docker image prune -f - 查看日志:
docker compose logs -f backend
☸️ Kubernetes / Helm(高级)
对于高可用部署或家庭实验室集群,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. 主要特性:
- 模块化架构: 可独立扩展情报后端和 HUD 前端。
- 安全上下文: 使用受限 UID(1001)运行以强化容器。
- Ingress 就绪: 兼容 Traefik、Cert-Manager 和 Gateway API,可安全地外部访问你的情报节点。
特别感谢 @chr0n1x 贡献了初始的 Kubernetes 架构。
🌐 实验性测试网 — 无隐私保障
ShadowBroker v0.9.7 发布了 InfoNet(去中心化情报网格 + Sovereign Shell 治理经济)、一个 代理型 AI 命令通道(支持 OpenClaw 和任何 HMAC 签名代理)、时间机器快照回放 以及 SAR 卫星地面变化检测。这是一个实验性测试网 — 不是私人信使,也不是生产级治理系统。
| 通道 | 隐私状态 | 详情 |
|---|---|---|
| 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 加固是下一个里程碑。如果你分叉此项目,请保持这些标签不变,不要做出比实现所支持的更强的隐私声明。
要全面了解网格实际防御什么和不防御什么,请阅读 威胁模型 和 声明对照。上面每一句话都对应到强制执行(或不强制执行)它的代码路径。
✨ 特性
🧅 InfoNet — 去中心化情报网格 + Sovereign Shell(在 v0.9.7 中扩展)
第一个直接内置于 OSINT 平台的去中心化情报通信和治理层。无需账户、无需注册、无需身份。v0.9.7 将 InfoNet 从聊天层提升为完整的治理经济,并有一条明确的路径通向隐私保护的去中心化情报平台。
通信层(自 v0.9.6 起):
- InfoNet 实验性测试网 — 使用 Tor 和 Reticulum 的全球混淆消息中继。任何运行 ShadowBroker 的人都可以在 InfoNet 上发送和接收消息。消息通过一个包含门角色、Ed25519 规范载荷签名和传输混淆的 Wormhole 中继层。
- 网格聊天面板 — 三标签界面:INFONET(具有混淆传输的门聊天)、MESH(Meshtastic 无线电集成)、DEAD DROP(基于令牌的纪元邮箱的点对点消息交换 — 当前最强通道)。
- 门角色系统 — 具有 Ed25519 签名密钥、预密钥包、SAS 单词联系人验证和滥用报告的假名身份。
- 网格终端 — 内置 CLI:
send、dm、市场命令、门状态检查。可拖拽面板,最小化到顶部栏。输入help查看所有命令。 - 加密栈 — Ed25519 签名、X25519 Diffie-Hellman、带 HKDF 密钥派生的 AESGCM 加密、哈希链承诺系统。双棘轮私信脚手架正在进行中。
Sovereign Shell — 治理经济(v0.9.7 新增):
- 请愿 + 治理 DSL — 通过签名请愿进行链上参数更改。类型安全的有效载荷执行器,用于
UPDATE_PARAM、BATCH_UPDATE_PARAMS、ENABLE_FEATURE和DISABLE_FEATURE。可调旋钮通过投票更改 — 无需代码部署。 - 升级哈希治理 — 需要新逻辑(不仅仅是参数更改)的协议升级,对已验证发布的 SHA-256 哈希进行投票。80% 超级多数、40% 法定人数、67% 重节点激活。生命周期:签名 → 投票 → 挑战窗口 → 等待就绪 → 已激活。
- 决议与争议市场 — 对市场决议结果(是 / 否 / 数据不可用)进行质押,用绑定的证据开启争议,并对争议确认或撤销进行质押。每行提交状态保持隔离,因此并发操作不共享一个进行中的槽位。
- 证据提交 — 绑定的证据包,客户端 SHA-256 规范化精确匹配 Python
repr(),因此哈希值在链中往返无误。 - 门暂停 / 关闭 / 申诉 — 用于暂停或关闭门的表单,具有可重用的申诉流程,自动定位待处理的请愿。
- 引导合格节点一票制 — 前 100 个市场通过每合格节点一票解决,而非质押加权决议。合格条件:身份年龄 ≥ 3 天,不在预测者排除集内,有效的 Argon2id 工作量证明(仅限重节点)。在节点达到 1000 时过渡到质押决议。
- 双层状态 + 纪元最终性 — 第 1 层事件以 CRDT 方式传播以实现低延迟;第 2 层事件需要纪元最终性才能执行操作。通过
MappingProxyType强制实施身份轮换、渐进惩罚、斜坡里程碑和宪法不变性。 - 自适应轮询 — Sovereign Shell 视图在活跃投票/挑战/激活阶段每 8 秒轮询一次,空闲时每 30-60 秒轮询一次。无需 WebSocket 层即可实现实时投票感。
- 逐字诊断 — 每个写入按钮都会显示后端的逐字拒绝原因。没有不透明的“拒绝”提示。
隐私原语跑道(v0.9.7 新增):
- 功能密钥 — 匿名凭证脚手架 — 用于无效器、挑战-响应、两阶段提交收据、枚举拒绝码和批量结算的管道已就位。目前的挑战-响应是用于集成测试的基于 HMAC 的占位符,不是生产级匿名或零知识公民证明。真正的不可链接发放仍有待原语决策(RSA 盲签名 vs BBS+ vs U-Prove vs Idemix)。
- 锁定协议合约 —
services/infonet/privacy/contracts.py中的稳定接口,用于环签名、隐身地址、Pedersen 承诺、范围证明和 DEX 匹配。privacy-coreRust crate 是集成目标 — 隐私模块的调用者无需知道哪个方案处于活动状态。 - Sprint 11+ 路径 — 当密码学方案选定后,原语将接入锁定的协议,无需 API 更替。
实验性测试网 — 无隐私保障: InfoNet 消息被混淆但不是端到端加密。Mesh 网络(Meshtastic/APRS)不是私密的 — 无线电传输本质上是公开的。隐私原语合约已搭建脚手架但尚未接线。不要在任何通道上发送敏感信息。目前,将所有通道视为开放和公开。
🔍 侦察工具包与 Shodan(源自 Osiris,安全优先)
改编自 OSIRIS 侦察栈(MIT),采用 ShadowBroker 的代理模型。归属:backend/third_party/osiris/NOTICE.md。
侦察工具包(左侧边栏 — 仅限本地操作员):
- IP / DNS / WHOIS — ip-api.com 地理位置、Google DNS-over-HTTPS、RDAP 注册人数据,可选的 HTTP 安全标头评分
- 证书与 BGP — crt.sh 子域名发现、bgpview.io ASN/前缀查询
- 威胁情报 — AlienVault OTX 脉冲、Tor 出口节点检查、可选的每 IP/域名声誉
- 制裁 — OpenSanctions
us_ofac_sdn索引(CC-BY);对 WHOIS 实体和 IP ISP/组织字符串的交叉检查 - CVE / MAC / GitHub / 泄露 — MITRE CVE API、MAC 供应商查询、GitHub 个人资料侦察、公开泄露检查
- IP 扫描 —
/api/osint/sweep/scan对目标 /24-/32 进行地理定位,并在服务器端代理 Shodan InternetDB 主机发现(浏览器从不直接联系 InternetDB) - SSRF 防护 — 在用户提供的任何获取之前,私有、回环、链路本地和元数据主机名被阻止
实体图 — 选择任意地图实体以打开实体图面板 (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 叠加层(未更改):
- 互联网设备搜索 — 使用你自己的 API 密钥查询 Shodan;结果绘制为实时叠加层
- 可配置标记 — 针对 Shodan 结果的形状、颜色和大小自定义
🛩️ 航空追踪
- 商业航班 — 通过 OpenSky Network 实时位置(约 5,000+ 架飞机)
- 私人飞机 — 轻型通用航空、涡轮螺旋桨飞机、商务喷气机分别追踪
- 私人喷气机 — 高净值个人飞机,附带所有者识别
- 军用飞行 — 通过 adsb.lol 军事端点追踪加油机、ISR、战斗机、运输机
- 飞行轨迹累积 — 所有追踪飞机的持久面包屑轨迹
- 等待航线检测 — 自动标记盘旋的飞机(总转向 >300°)
- 飞机分类 — 形状精确的 SVG 图标:客机、涡轮螺旋桨飞机、商务喷气机、直升机
- 地面检测 — 低于 100 英尺 AGL 的飞机以灰色图标渲染
🚢 海上追踪
- AIS 船舶流 — 通过 aisstream.io WebSocket 实时追踪 25,000+ 艘船舶
- 船舶分类 — 货船、油轮、客船、游艇、军用舰艇类型,配有颜色编码图标
- 航母打击群追踪器 — 所有 11 艘现役美国海军航空母舰,带有 OSINT 估计位置。没有其他开源工具能做到这一点。
- 自动化的 GDELT 新闻抓取解析航母行动报告以估计位置
- 50+ 地理区域到坐标的映射(例如"东地中海" → 纬度/经度)
- 磁盘缓存位置,UTC 00:00 和 12:00 自动刷新
- 游轮与客船 — 专用于游轮和渡轮的图层
- 渔业活动 — Global Fishing Watch 船舶事件(新增)
- 聚簇显示 — 低缩放时船舶聚簇并显示计数标签,放大时解散聚簇
🚆 铁路追踪(v0.9.6 新增)
- Amtrak 列车 — 美国各地 Amtrak 列车的实时位置,包括速度、航向、路线和状态
- 欧洲铁路 — 集成了 DigiTraffic 以获取欧洲列车位置
🛰️ 太空与卫星
- 轨道追踪 — 通过 CelesTrak TLE 数据 + SGP4 传播实时卫星位置(2,000+ 颗活跃卫星,无需 API 密钥)
- 任务类型分类 — 按任务颜色编码:军事侦察(红色)、SAR(青色)、SIGINT(白色)、导航(蓝色)、早期预警(洋红色)、商业成像(绿色)、空间站(金色)
- SatNOGS 地面站 — 业余卫星地面站网络,附带实时观测数据(新增)
- TinyGS LoRa Satellites — LoRa 卫星星座追踪(新增)
🌍 地缘政治与冲突
- 全球事件 — 基于 GDELT 的冲突事件聚合(最近 8 小时,约 1,000 个事件)
- 乌克兰前线 — 来自 DeepState Map 的实时战线 GeoJSON
- 乌克兰空袭警报 — 实时区域空袭警报(新增)
- SIGINT/RISINT 新闻源 — 来自多个情报焦点源的实时 RSS 聚合,支持用户自定义(最多 20 个源,可配置优先级权重 1-5)
- 区域档案 — 在地球上任意位置右键单击以获取即时情报简报:
- 国家概况(人口、首都、语言、货币、面积)
- 当前国家元首和政府类型(实时 Wikidata SPARQL 查询)
- 本地维基百科摘要及缩略图
- 最新 Sentinel-2 卫星照片,包含拍摄日期和云覆盖(10 米分辨率)
🛰️ 卫星图像
- NASA GIBS (MODIS Terra) — 每日真彩色卫星图像叠加层,带有 30 天时间滑块、播放/暂停动画和不透明度控制(约 250 米/像素)
- 高分辨率卫星(Esri) — 通过 Esri World Imagery 提供亚米级分辨率图像 — 放大可查看建筑和地形细节(缩放 18+)
- Sentinel-2 情报卡 — 在地图上任意位置右键单击,显示最新的 Sentinel-2 卫星照片浮动情报卡,包含拍摄日期、云覆盖百分比和可点击的全分辨率图像(10 米分辨率,约每 5 天更新一次)
- Sentinel Hub 处理 API — 带有 OAuth2 令牌流的 Copernicus CDSE 卫星图像(新增)
- VIIRS 夜间灯光 — 夜间灯光变化检测叠加层(新增)
- 5 种视觉模式 — 通过样式按钮切换整个地图美学:
- DEFAULT — 深色 CARTO 底图
- SATELLITE — 亚米级 Esri World Imagery
- FLIR — 热成像美学(反转灰度)
- NVG — 夜视绿色荧光
- CRT — 复古终端扫描线叠加层
🛰️ SAR 地面变化检测(新增)
- 合成孔径雷达图层 — 穿透云层、夜间、在地球任何地方检测地面变化。两种模式均免费:
- 模式 A(目录) — 来自 Alaska Satellite Facility 的免费 Sentinel-1 场景元数据。无需账户。显示雷达经过你的 AOI 的时间以及下一次经过的时间。
- 模式 B(完整异常) — 来自 NASA OPERA (DISP, DSWx, DIST-ALERT) 和 Copernicus EGMS 的实时地面变化警报。需要免费的 NASA Earthdata 账户 — 应用内向导将在一分钟内引导你完成设置。
- 异常类型 — 地面变形(毫米级沉降、滑坡)、地表水变化(洪水范围)、植被干扰(森林砍伐、烧伤疤痕、爆炸坑)、损害评估(UNOSAT/Copernicus EMS 已验证)和相干性变化检测
- 地图可视化 — 按种类颜色编码的异常图钉(橙色为变形,青色为水,绿色为植被,红色为损害,紫色为相干性)。AOI 边界绘制为虚线多边形,采用基于类别的着色。点击任意图钉可查看详细信息弹出窗口,包含幅度、置信度、求解器、场景数量和来源链接。
- AOI 编辑器 — 直接从地图上定义感兴趣区域。当 SAR 图层激活时,点击"编辑 AOI"按钮,然后使用十字准星工具在地图上点击放置 AOI 中心。设置名称、半径(1–500 公里)和类别。AOI 立即显示在地图上。
- OpenClaw 集成 — AI 代理可以检查 SAR 异常详情 (
sar_pin_click) 并将操作员地图飞至任何 AOI 中心 (sar_focus_aoi) — 实现协作分析工作流。 - 设置面板 — 设置中的专用 SAR 标签显示模式 A/B 状态、OpenClaw 集成状态,并允许你一键撤销 Earthdata 凭据。
📻 软件定义无线电与 SIGINT
- KiwiSDR 接收器 — 全球 500+ 个公共 SDR 接收器,以聚簇琥珀色标记绘制
- 实时无线电调谐器 — 点击任意 KiwiSDR 节点,直接在 SIGINT 面板中打开嵌入式 SDR 调谐器
- 元数据显示 — 节点名称、位置、天线类型、频段、活跃用户
- Meshtastic 网格无线电 — 基于 MQTT 的网格无线电集成,带有节点地图,集成到 Mesh Chat(新增)
- APRS 集成 — 通过 APRS-IS TCP 源进行业余无线电定位(新增)
- GPS 干扰检测 — 实时分析飞机 NAC-P(导航精度类别)值
- 基于网格的聚合识别干扰区域
- 红色覆盖方块,带有"GPS 干扰 XX%"严重度标签
- 无线电拦截面板 — 扫描仪风格 UI,带有 OpenMHZ 警察/消防扫描仪源。点击任意系统即可实时收听。扫描模式自动循环活跃的源。一键窃听真实的紧急通信。
📷 监控
- CCTV 网格 — 来自 10 个国家 21 个摄取器的 22,000+ 个实时交通摄像头(美国、英国、加拿大、澳大利亚、奥地利、西班牙、新加坡、荷兰(当 NDW 源可用时),外加 OSM):
- 🇬🇧 伦敦交通局 JamCams
- 🇺🇸 纽约市交通局、德克萨斯州奥斯汀 (TxDOT)
- 🇺🇸 加利福尼亚州(12 个 Caltrans 区)、华盛顿州 (WSDOT)、佐治亚州交通局、伊利诺伊州交通局、密歇根州交通局
- 🇪🇸 西班牙 DGT 国家(20 个城市)、马德里市(357 个摄像头,通过 KML)
- 🇦🇹 奥地利 ASFINAG 高速公路网络摄像头
- 🇸🇬 新加坡陆路交通管理局
- 🌍 Windy 网络摄像头
- 源渲染 — 自动检测和渲染视频、MJPEG、HLS、嵌入、卫星瓦片和图像源
- 聚簇地图显示 — 绿色点以计数标签聚簇,缩放时解散
🔥 环境与灾害监测
- NASA FIRMS 火灾热点(24小时) — 来自 NOAA-20 VIIRS 卫星的 5,000+ 个全球热异常,每周期更新。火焰形状图标按火灾辐射功率(FRP)颜色编码:黄色(低)、橙色、红色、暗红色(强烈)。低缩放时以火焰形状聚簇标记聚簇。
- 火山 — 史密森尼全球火山计划全新世火山全球绘制(新增)
- 天气警报 — 具有紧急/严重度指示器的恶劣天气多边形(新增)
- 空气质量(PM2.5) — 全球 OpenAQ 站点,实时颗粒物读数(新增)
- 地震(24小时) — USGS 实时地震源,带有震级标注的标记
- 空间天气徽章 — 底部状态栏中的实时 NOAA 地磁暴指示器。颜色编码的 Kp 指数:绿色(平静)、黄色(活跃)、红色(暴风 G1-G5)。数据来自 SWPC 行星 K 指数 1 分钟源。
🏗️ 基础设施监控* 互联网中断监控 — 来自佐治亚理工学院 IODA 的区域互联网连接警报。受影响区域以灰色标记显示,并带有严重程度百分比。仅使用可靠数据源(BGP 路由表、主动 Ping 探测)——不使用望远镜或插值数据。
- 数据中心映射 — 根据精选数据集绘制 2,000 多个全球数据中心。紫色标记聚类显示,带有服务器机架图标。点击可查看运营商、位置,并按国家自动交叉引用互联网中断数据。
- 军事基地 — 全球军事设施和导弹基地数据库(新增)
- 发电厂 — 来自 WRI 数据库的 35,000 多个全球发电厂(新增)
- 海底电缆 — 来自静态 TeleGeography 派生 GeoJSON(
frontend/public/data/submarine-cables.json)的全球海底电缆路由。可选线覆盖层。 - 恶意软件 C2 层 — 来自 abuse.ch 的僵尸网络 C2 服务器(Feodo Tracker)和近期恶意软件 URL(URLhaus),在启用该层时按慢速层级刷新。
- SCM 供应商风险 — 一级/二级晶圆厂和电池工厂(台积电、三星、CATL 等)与地震、FIRMS 火灾和 GDELT 冲突邻近度交叉引用。警报显示在 SCM 面板中;可选地图层。
- 网络威胁源 — 近期 CISA 已知被利用漏洞(KEV)条目,通过
/api/cyber-threats和图层切换暴露。 - 国家风险指数 — 静态地缘政治风险评分,通过
/api/country-risk提供 USGS 地震增强数据。 - Telegram OSINT — 来自可配置战争/OSINT 源的公共频道网页预览(
t.me/s/*)。每小时增量合并(不重复抓取),关键词风险评分,西里尔/阿拉伯语地名别名,地铁锚点地理编码(与新闻质心分离),通过/api/telegram/media代理的内联照片/视频。图层键:telegram_osint。
🌐 附加图层与工具
- 昼夜循环 — 太阳终止线覆盖层,显示全球白天/黑夜区域
- 全球市场行情 — 实时金融市场指数(可最小化)
- 测量工具 — 地图上的点对点距离与方位测量
- 定位栏 — 按坐标(31.8, 34.8)或地名(德黑兰、霍尔木兹海峡)搜索,直接飞到任何位置——通过 OpenStreetMap Nominatim 进行地理编码
Gaza
🤖 智能体 AI 命令通道 — OpenClaw + 兼容智能体(v0.9.7 扩展)
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 签名 — 每个命令均使用
HMAC-SHA256(secret, METHOD|path|timestamp|nonce|sha256(body))签名,带有时间戳 + nonce 重放保护和请求完整性。支持本地模式(无需配置)和远程模式(智能体位于不同机器/VPS 上)。
能力:
- 完整遥测访问 — 智能体查询所有 40+ 数据层:航班、船舶、卫星、SIGINT、冲突事件、地震、火灾、废水、Telegram OSINT、恶意软件/C2、CISA KEV 网络威胁、SCM 覆盖层、捕鱼活动(GFW)、预测市场等。快速和慢速层级端点返回带有地理坐标、时间戳和来源归属的增强数据。
- 紧凑搜索(优于完整转储) —
get_summary→get_layer_slice使用每层的since_layer_versions(SSElayer_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 情报图钉 — 直接在操作员地图上放置彩色编码的调查标记。14 种图钉类别(威胁、异常、军事、海上、航空、SIGINT、基础设施等),带有置信度分数、TTL 过期时间、来源 URL,以及一次最多放置 100 个图钉的批量放置。
- 地图控制 — 将操作员地图视图飞到任何坐标,触发卫星图像查找,并打开区域档案。智能体可以实时引导操作员的注意力到特定位置。
- SAR 地面变化 — 查询 SAR 异常源、检查图钉详细信息、管理 AOI,并飞到地图以观察区域。智能体可以监视地面变形、洪水范围或损害,并将异常提升为图钉。
- 原生图层注入 — 将自定义数据直接推送到 ShadowBroker 的原生图层(CCTV 摄像头、船舶、SIGINT 节点、军事基地等),以便智能体发现的源与真实源一起渲染。
- 虫洞网格参与 — 智能体可以加入去中心化的 InfoNet,发布签名消息,加入加密门通道,发送/接收加密 DM,并与 Meshtastic 无线电和 Dead Drops 交互——作为完整的网格对等体运行。
- 主权外壳参与(v0.9.7) — 提交请愿书、签署并对治理变更投票、对决议和争议进行质押、发出重型节点为升级准备就绪的信号——全部通过程序化方式,按层级和 HMAC 门控。智能体成为去中心化情报经济的一等参与者。
- 地理编码与邻近扫描 — 将地名解析为坐标,然后在半径内扫描所有图层,生成完整的邻近摘要。
- 位置附近的新闻与 GDELT — 拉取任何坐标附近的 GDELT 冲突事件和聚合新闻文章,以获取区域态势感知。
- 警报投递 — 向 Discord Webhook 和 Telegram 频道发送品牌化情报简报、警告和威胁通知。
- 情报报告 — 生成结构化报告,包含摘要统计、顶级军事航班、相关性分析、地震活动、SIGINT 计数和图钉清单。
- 可审计 — 每次通道调用均被记录;操作员可以审查智能体执行的操作。
连接智能体: 打开左侧边栏中的 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
| 来源 | 数据 | 更新频率 | 需要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等)。
🚀 快速入门
🐳 Docker 设置(推荐自托管)
仓库包含一个 docker-compose.yml,可从 GitHub Container Registry 拉取预构建镜像。```bash
git clone https://github.com/BigBodyCobain/Shadowbroker.git
cd Shadowbroker
Add your API keys in a repo-root .env file (optional — see Environment Variables below)
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
(空输入,无输出)```powershell
Windows 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
🐋 独立部署 (Portainer, Uncloud, NAS 等)
无需克隆仓库。直接使用 GitHub 容器注册表中的预构建镜像。如果您将其发布到 GitLab 注册表,也可用其作为镜像。
创建一个包含以下内容的 docker-compose.yml,直接部署——粘贴到 Portainer 的堆栈编辑器、uncloud deploy 或任意 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:
> **工作原理:** 前端容器通过 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
运行```bash
From the frontend directory — starts both frontend & backend concurrently
npm run dev
* **Next.js** 前端位于 `http://localhost:3000`
* **FastAPI** 后端位于 `http://localhost:8000`
### Pre-commit(可选)
如果你使用 pre-commit,从仓库根目录安装一次钩子:```bash
pre-commit install
本地 AIS 接收器(可选)
您可以使用 RTL-SDR 加密狗和开源 AIS 解码器 AIS-catcher 将您自己的 AIS 船舶数据输入到 ShadowBroker。这为您提供了本地区域的实时覆盖范围——无需 API 密钥。
- 插入一个 RTL-SDR 加密狗
- 安装 AIS-catcher(发布页面)或使用 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 - 或者本地运行: ```bash
AIS-catcher -H http://localhost:4000/api/ais/feed interval 10
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 海里以上。
🎛️ 数据图层
所有 41 个图层均可在左侧面板中独立切换开关状态:
| 图层 | 默认状态 | 描述 |
|---|---|---|
| 商业航班 | ✅ 开启 | 航空公司、货运、通用航空 |
| 私人航班 | ✅ 开启 | 非商业私人飞机 |
| 私人喷气机 | ✅ 开启 | 包含所有者数据的高价值商务喷气机 |
| 军用航班 | ✅ 开启 | 军用和政府飞机 |
| 监视飞机 | ✅ 开启 | 特别关注监视名单 |
| 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。
🔧 性能
该平台针对处理海量实时数据集进行了优化:
- Gzip 压缩 —— API 载荷压缩约 92%(11.6 MB → 915 KB)
- ETag 缓存 ——
304 Not Modified响应跳过冗余 JSON 解析 - 视口裁剪 —— 仅渲染可见地图边界内的要素(+20% 缓冲)
- 强制性地图更新 —— 高数据量图层(航班、卫星、火灾)通过直接调用
setData()绕过 React 协调 - 聚类渲染 —— 船舶、CCTV、地震和数据中心使用 MapLibre 聚类以减少要素数量
- 去抖视口更新 —— 300ms 去抖防止平移/缩放时的 GeoJSON 重建抖动;密集图层(卫星、火灾)使用 2s 去抖
- 位置插值 —— 在数据刷新之间平滑进行 10 秒滴答动画
- React.memo —— 包裹重型组件以防止不必要的重新渲染
- 坐标精度 —— 经纬度四舍五入至 5 位小数(约 1 米)以减少 JSON 体积
📁 项目结构
新贡献者可以查阅 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
</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。
🤝 贡献者
ShadowBroker 是开源构建的。以下人员贡献了实际代码:
| 贡献者 | 贡献内容 | 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 架构 | — |
⚠️ 免责声明
本工具完全基于公开可用的开源情报(OSINT)数据构建。不使用任何机密、受限或非公开数据。运营商位置基于公开报告估计。军事主题的 UI 仅为美观设计。
📜 许可证
本项目仅供教育和个人研究目的使用。数据使用限制请参阅各 API 提供商的服务条款。
用 ☕ 和数不清的 API 调用构建