Divyonic/obsidian-osint

GitHub: Divyonic/obsidian-osint

在 3D 地球仪上融合多源公开数据,呈现实时军事态势与冲突事件的开源情报监控平台。

Stars: 0 | Forks: 0

# OBSIDIAN **在 3D 地球仪上呈现实时 OSINT 军事通用作战图。** OBSIDIAN 将公开广播的军事相关信号——飞机、舰船、设施以及实时的冲突事件——融合到一个交互式的地球仪中。每个数据源都是开放且合法收集的:这些数据与 FlightRadar24、MarineTraffic 和 ADSB-Exchange 背后的数据属于同类。它在本地运行,无需任何 API 密钥。

OBSIDIAN tactical view — live military aircraft and installations over Europe

## 功能 | 图层 | 来源 | 提供内容 | |---|---|---| | **军用飞机** | adsb.fi + airplanes.live `/mil` 数据流,已合并与去重 | 实时 ADS-B 轨迹,根据 ICAO 机型代码分类为 12 种任务角色——加油机、预警机 (AEW)、情报侦察机 (ISR)、战斗机、轰炸机、运输机、无人机、VIP专机、指挥控制机 (C2)、直升机、巡逻机、教练机——每种都有独特的符号和实时的战斗序列统计 | | **军事设施** | OpenStreetMap (`military=*`, `landuse=military`) | 约 70,000 个站点,每个站点通过基于 OSM 的 1 米精度边界划定所属国家。选中某个基地可返回精心整理的战斗序列,以及当前在地面的实时飞机数量 | | **海外基地** | 精选数据集 | 70 个运营国与所在国不同的设施,按运营方进行颜色标记 | | **实时冲突事件** | GDELT 15 分钟全球事件流 | 按位置汇总的物质冲突热点。每个热点都能解析出底层的新闻报道源,可直接从地图中打开 | | **舰船** | aisstream.io(可选密钥) | 突出显示军事行动交通流量的实时 AIS;在没有提供密钥时,回退至示例舰队 | **底图:** 战术(深色模式) · 卫星(Esri / Maxar,发达地区优于 1 米精度) · Sentinel-2 无云版(约 10 米精度,免密钥) · 地形。 ## 界面 专为监控设计的战术平视显示器,绝非华而不实的装饰: - **实时战斗序列** — 按角色统计的飞机数量及颜色图例,会随着目标的出现和消失而实时更新。 - **设施情报** — 点击任意基地即可查看精心整理的战斗序列和地面实时飞机;支持从任意点叠加 100 / 250 / 500 / 1000 公里的覆盖范围。 - **来源归属** — 每个冲突热点都直接链接到其背后的新闻报道。 - **分析工具** — 目标轨迹、点对点距离测量、国家及重要性筛选,以及一键将当前视图导出为 GeoJSON。 - **实地就绪** — 响应式布局,在移动端可折叠为抽屉式菜单;支持无人值守时的自动环绕展示。

Sub-metre Esri/Maxar satellite imagery over a major airbase Live GDELT conflict hotspots resolving to source news reporting

## 运行 ``` git clone git@github.com:Divyonic/obsidian-osint.git cd obsidian-osint npm install npm start # → http://localhost:8080 ``` 飞机、设施、海外基地和实时冲突事件均可在 **零 API 密钥** 下运行。可选密钥用于扩展覆盖范围: ``` cp .env.example .env ``` | 密钥 | 扩展内容 | |---|---| | `AISSTREAM_API_KEY` | 实时 AIS 舰船图层([免费](https://aisstream.io)) | | `ADSBX_API_KEY` | 权威的 ADSB-Exchange 军事数据流(后备) | | `OPENSKY_CLIENT_ID` / `OPENSKY_CLIENT_SECRET` | 更高的 OpenSky 速率限制(后备数据流) | 要求 Node 18+(在 Node 25 上开发)。无需打包工具,无需构建步骤。 ## 架构 ``` Browser (MapLibre GL JS · globe projection · tactical HUD) │ /api/aircraft /api/bases /api/events /api/ships ▼ Node / Express ──► adsb.fi + airplanes.live /mil (pull, merged & deduped) ──► GDELT 15-min event export (pull → unzip → 10-min cache) ──► aisstream.io WebSocket (persistent stream → in-memory) ──► static GeoJSON (bases, borders, overseas bases) ``` | 端点 | 返回值 | |---|---| | `GET /api/aircraft` | 实时军用飞机及各角色数量统计 | | `GET /api/bases?bbox=…` | 当前视口内的 OSM 军事设施 | | `GET /api/events` | GDELT 冲突热点及其来源文章链接 | | `GET /api/ships` | 实时 AIS,或在无密钥时返回示例舰队 | ### 值得了解的工程决策 - **国家归属使用了基于 OSM 生成的 1 米精度海岸边界,而非 Natural Earth。** Natural Earth 在争议边界处与 OSM 存在分歧——例如,它将一个巴基斯坦哨所大致定位在印度境内 17 公里处。构建流水线 (`build_countries.mjs`) 通过点对多边形算法加上海岸线吸附,成功解析了 99.84% 的设施。 - **飞机角色源自 ICAO 机型代码,** 而非靠猜测呼号。 - **GDELT 托管的 GEO 2.0 API 已失效 (404)。** OBSIDIAN 转而拉取原始的 15 分钟事件导出文件(`lastupdate.txt` → `export.CSV.zip`),在进程内解压,保留物质冲突记录,并按位置进行汇总——从而找回了托管 API 从未公开的底层新闻链接。 ### 重新生成数据集 `public/` 中的运行时 GeoJSON 已提交,因此克隆后应用程序即可立即运行。庞大的源数据(`data/`,包括一个 106 MB 的 OSM 边界文件)被排除在代码库之外——请使用构建脚本重新生成: ``` node build_countries.mjs # country borders + base attribution node build_bases.mjs # OSM installations → public/bases_global.geojson node build_foreign.mjs # curated overseas-base dataset ``` ## 范围与诚实的局限 | 未提供内容 | 原因 | |---|---| | 实时潜艇追踪 | 潜航的潜艇不会发射任何可追踪的信号——这正是潜艇存在的全部意义。开源数据仅显示浮出水面或在港口内的目击记录。 | | 大多数无人机 | 大多数军用无人机 (UAV) 不广播 ADS-B。那些进行广播的无人机会像任何其他目标一样出现在飞机图层中。 | | 处于无线电静默状态的战舰 | 作战人员通常会禁用或伪造 AIS。您看到的是辅助舰艇、后勤船只以及选择发送信号的船只——永远都不是完整的战斗序列。 | | 人员或武器数量 | 并非开源数据。基地情报仅限于精心整理的公开战斗序列和地面实时飞机。 | OBSIDIAN 的范围经过深思熟虑,仅限于可以从开源渠道核实为真实的内容。任何声称能提供地球上所有潜艇和隐形资产的实时、完整信息流的言论,要么是猜测,要么是谎言。 ## 许可证 MIT。请负责任且合法地使用。所有数据源均为开放数据,并已在上方予以说明。
标签:3D地球仪, ESC4, HTTP/HTTPS抓包, MITM代理, OSINT, 军事监控, 态势感知, 情报收集, 漏洞研究, 自定义脚本