
2026/03/09 4:07
**タイトル:** Show HN **内容:** 私はリアルタイムOSINTダッシュボードを構築し、世界中から取得した15本のライブフィードを集約しました。
RSS: https://news.ycombinator.com/rss
要約▶
Japanese Translation:
ShadowBroker は、航空・海事・衛星・CCTV・GPS妨害・地政学的イベントなどのライブ OSINT フィードを統合し、1 つのダークオプスマップインターフェイス上に表示するリアルタイム地理空間情報ダッシュボードです。フロントエンドは Next.js + MapLibre GL で構成されており、
docker‑compose up -d 実行後 http://localhost:3000 で起動します。バックエンドは FastAPI/Python で構築され、すべてのサービスがコンテナ化されています。
-
航空追跡
OpenSky Network から約 5,000 件以上の商用フライトを取得し、プライベート機(GA・ターボプロップ・ビジネスジェット)もオーナー ID と共に収集。軍用ジェットは adsb.lol を通じて取得します。足跡トレイル、ホールドパターン検出(>300° ターン)、地上検知(<100 ft AGL)を利用しています。 -
海事追跡
aisstream.io WebSocket から 25,000 件以上の船舶データを取得し、貨物・タンカー・旅客・ヨット・軍用船に分類。ズームアウト時にはクラスタリングし、全 11 艘の米海軍キャリーアー(航空母艦)向けの攻撃群トラッカーも備えています。 -
衛星位置
N2YO API からリアルタイムで取得。ミッションはタイプ別に色分け(軍事偵察・SAR・SIGINT・航法・早期警戒・商用撮影・宇宙ステーション)。 -
地政学レイヤー
過去 8 時間の約 1,000 件の GDELT コンフリクトイベント、DeepState Map より 30 分ごとに更新されるウクライナ前線 GeoJSON、右クリックで表示される国別プロファイル/Wikipedia 要約を提供。 -
監視レイヤー
2,000 件以上のライブ CCTV フィード(TfL JamCams、TxDOT Austin、NYC DOT、Singapore LTA)とカスタム URL を集計。ビデオ/MJPEG/HLS/タイル/画像をレンダリングし、マップ上でクラスタリング。 -
信号インテリジェンス
航空機の NAC‑P 値から GPS 妨害を検出し、グリッドベースの severity ラベルを集計。スキャナー UI を模したラジオ傍受パネルも提供。 -
追加切替可能レイヤー
USGS 地震(過去 24 時間)、昼夜サイクル・太陽終端オーバーレイ、グローバル市場ティッカー、測定ツール、および左側パネルにリストされている多数のオプション。 -
パフォーマンス最適化
約 92% の gzip 圧縮、ETag キャッシュ、ビューポートカリング(+20 % バッファ)、クラスタリング、300 ms のデバウンス更新、10 秒間隔の滑らかな補間、React.memo 使用、および 5 桁座標精度(約 1 m)。 -
展開オプション
コード不要ユーザー向けのクイックスタート ZIP、GHCR から事前構築済みイメージを使用した Docker Compose、または Node.js 18+、npm、Python 3.10+ と API キー(aisstream.io、n2yo.com;オプションで OpenSky Network、Singapore LTA)を必要とするフル開発者セットアップ。
ShadowBroker はセキュリティアナリスト・ホビイスト・研究者に統一された状況認識プラットフォームを提供し、低コード・Docker ベースのダッシュボードでオープンデータを統合する方法を示します。これにより OSINT ツール標準への影響や広範なデータ共有の促進が期待されます。
本文
🛰️ S H A D O W B R O K E R
グローバル脅威インターセプト – リアルタイム地理空間情報プラットフォーム
ShadowBroker は、数十のオープンソースインテリジェンス(OSINT)フィードからリアルタイムでデータを集約し、統一されたダークオペレーションズマップインターフェイスに描画する、全スペクトラム対応の地理空間情報ダッシュボードです。航空機・船舶・衛星・地震・紛争地域・CCTVネットワーク・GPSジャミング・政治的出来事などをすべてリアルタイムで更新しながら追跡します。
Next.js、MapLibre GL、FastAPI、および Python で構築され、分析者・研究者・愛好家が世界の活動をワンパネルビューで確認したいときに最適です。
興味深いユースケース
- 億万長者のプライベートジェットを追跡
- 上空を通過する衛星(現在は細かく)を監視
- 世界中の海上交通を観測
- GPSジャミングゾーンを検出
- 地震・災害をリアルタイムでフォロー
⚡ クイックスタート (Docker)
git clone https://github.com/BigBodyCobain/Shadowbroker.git cd Shadowbroker docker-compose up -d
http://localhost:3000 を開いてダッシュボードを表示してください! (Docker が必要です)
✨ 主な機能
🛩️ 航空追跡
- 商業フライト – OpenSky Network によるリアルタイム位置(約5,000+航空機)
- プライベート航空機 – ライト GA、ターボプロップ、ビズジェットを別々に追跡
- プライベートジェット – 高純資産個人の所有者情報付き航空機
- 軍用フライト – タンクラー、ISR、戦闘機、輸送機を adsb.lol の軍事エンドポイント経由で取得
- フライトトレイル蓄積 – すべての追跡対象航空機に対して永続的なパンくずリストを生成
- ホールドパターン検出 – 自動で 300° 超の回転を行う航空機をフラグ付け
- 航空機分類 – SVG アイコン(空輸機、ターボプロップ、ビズジェット、ヘリコプター)を正確に描画
- 地上停止検出 – 100 ft AGL 以下の航空機は灰色アイコンで表示
🚢 海上追跡
- AISベシストリーム – aisstream.io の WebSocket(リアルタイム)で25,000+船舶を取得
- 船舶分類 – コンテナ、タンカー、客船、ヨット、軍用船種別に色分けされたアイコン
- キャリアストライクグループ追跡 – 11隻の米海軍航空母艦を OSINT 推定位置で表示
- 自動 GDELT ニューススクレイピング によりキャリア移動情報を取得
- 50+ 地理領域→座標マッピング
- ディスクキャッシュされた位置、00:00 & 12:00 UTC で自動更新
クルーズ・客船
- クルーズラインとフェリー専用レイヤー
- クラスタリング表示 – 低ズームではクラスター化し、ズームインで展開
🛰️ 宇宙・衛星
- 軌道追跡 – N2YO API を使ったリアルタイム衛星位置
- ミッションタイプ分類 – ミッション別に色分け(軍事偵察: 赤、SAR: シアン、SIGINT: 白、航法: 青、早期警戒: マゼンタ、商用撮像: 緑、宇宙ステーション: 金)
🌍 地政学・紛争
- 世界的インシデント – GDELT による紛争イベント集約(直近8時間で約1,000件)
- ウクライナ前線 – DeepState Map のライブ戦場 GeoJSON
- SIGINT/RISINT ニュースフィード – 複数の情報源からリアルタイム RSS 集約
- 領域ドッサー – マップ上で右クリックすると:
- 国プロフィール(人口、首都、言語、通貨、面積)
- 国家元首・政府タイプ(Wikidata SPARQL)
- ローカル Wikipedia 要約とサムネイル
📷 監視
- CCTV メッシュ – 2,000+ ライブ交通カメラ:Transport for London JamCams、Austin TX TxDOT、NYC DOT、Singapore LTA、カスタム URL
- フィードレンダリング – 動画・MJPEG・HLS・埋め込み・衛星タイル・画像を自動検出し描画
- クラスターマップ表示 – 緑点がクラスター化され、ズームインで展開
📡 信号情報
- GPSジャミング検知 – 航空機 NAC‑P(Navigation Accuracy Category)値をリアルタイム解析し、グリッドベースで干渉ゾーンを特定。赤いオーバーレイ四角形に「GPS JAM XX%」の重症度ラベルを表示
- 無線傍受パネル – スキャナ風 UI で通信を監視
🌐 その他レイヤー
- 地震(24h) – USGS リアルタイム地震フィード、マグニチュードスケール付きマーカー
- 日夜サイクル – 太陽分界線オーバーレイで世界の日照・闇を表示
- 世界市場ティッカー – ライブ金融市場指数(最小化可能)
- 測定ツール – マップ上の点対点距離・方位測定
🏗️ アーキテクチャ
┌───────────────────────────────────────────────────────────────┐ │ FRONTEND (Next.js) │ │ │ │ ┌─────────────┐ ┌──────────┐ ┌─────────────────────┐│ │ │ MapLibre GL │ │ NewsFeed │ │ Control Panels ││ │ │ 2D WebGL │ │ SIGINT │ │ Layers/Filters ││ │ │ Map Render │ │ Intel │ │ Markets/Radio ││ │ └──────┬──────┘ └────┬─────┘ └─────────┬───────────┘│ │ └────────────────┼──────────────────┘ │ │ │ REST API (15s / 60s) │ ├──────────────────────────┼───────────────────────────────┤ │ BACKEND (FastAPI) │ │ │ │ │ ┌───────────────────────┼──────────────────────────────┐│ │ │ Data Fetcher │ │ │ │ (Scheduler) │ │ │ │ │ │ │ │ ┌───────┬───────┬───────┬─────────┐ │ │ │ │OpenSky│adsb.lol│ N2YO │USGS │ │ │ │ │Flights│Military│Sats │Quakes │ │ │ │ ├───────┼───────┼───────┼─────────┤ │ │ │ │ AIS WS│Carrier│GDELT │CCTV │ │ │ │ │Ships │Tracker│Conflict│Cameras │ │ │ │ ├───────┼───────┼───────┼─────────┤ │ │ │ │DeepState│RSS │Region│GPS Jamming │ │ │ │ │Frontline│Intel │Dossier│ │ │ │ │ └───────┴───────┴───────┴─────────┘ │ │ └───────────────────────────────────────────────────────┘ └───────────────────────────────────────────────────────────────┘
📊 データソース & API
| ソース | データ | 更新頻度 | API キー必須 |
|---|---|---|---|
| OpenSky Network | 商業・民間フライト | 約60 s | オプション(匿名) |
| adsb.lol | 軍用航空機 | 約60 s | なし |
| aisstream.io | AIS 船舶位置 | リアルタイム WS | 必須 |
| N2YO | 衛星軌道位置 | 約60 s | 必須 |
| USGS Earthquake | 世界規模地震イベント | 約60 s | なし |
| GDELT Project | 世界的紛争イベント | 約6 h | なし |
| DeepState Map | ウクライナ前線 | 約30分 | なし |
| Transport for London | ロンドン CCTV JamCams | 約5 分 | なし |
| TxDOT | オースティン TX 交通カメラ | 約5 分 | なし |
| NYC DOT | ニューヨーク市交通カメラ | 約5 分 | なし |
| Singapore LTA | シンガポール交通カメラ | 約5 分 | 必須 |
| RestCountries | 国プロフィールデータ | オンデマンド(24hキャッシュ) | なし |
| Wikidata SPARQL | 国家元首データ | オンデマンド(24hキャッシュ) | なし |
| Wikipedia API | 場所概要・航空機画像 | オンデマンド(キャッシュ) | なし |
| CARTO Basemaps | ダークマップタイル | 継続的 | なし |
🚀 はじめに
🐳 Docker 設定(自己ホスティング推奨)
docker-compose.yml を作成:
version: '3.8' services: backend: image: ghcr.io/<your-username>/live-risk-dashboard-backend:main container_name: shadowbroker-backend ports: - "8000:8000" environment: - AISSTREAM_API_KEY=${AISSTREAM_API_KEY} - N2YO_API_KEY=${N2YO_API_KEY} # ここに必要な環境変数を追加 volumes: - backend_data:/app/data restart: unless-stopped frontend: image: ghcr.io/<your-username>/live-risk-dashboard-frontend:main container_name: shadowbroker-frontend ports: - "3000:3000" environment: - NEXT_PUBLIC_API_URL=http://localhost:8000 depends_on: - backend restart: unless-stopped volumes: backend_data:
同じディレクトリに
.env ファイルを作成し、API キーを記入。docker-compose up -d を実行。http://localhost:3000 でダッシュボードへアクセス。
📦 コード不要クイックスタート
- GitHub の Releases タブへ移動。
- ShadowBroker_v0.2.zip をダウンロード。
- 解凍。
- Windows –
をダブルクリック。start.bat - macOS/Linux –
を実行。chmod +x start.sh && ./start.sh
スクリプトが依存関係をインストールし、ダッシュボードを自動起動します。
💻 開発者設定
必須項目
- Node.js 18+ & npm
- Python 3.10+ with pip
- API キー:aisstream.io, n2yo.com(opensky-network.org, lta.gov.sg はオプション)
インストール手順
git clone https://github.com/your-username/shadowbroker.git cd shadowbroker/live-risk-dashboard # バックエンド cd backend python -m venv venv source venv/bin/activate # Windows: venv\Scripts\activate pip install -r requirements.txt echo "AISSTREAM_API_KEY=your_key_here" >> .env echo "N2YO_API_KEY=your_key_here" >> .env # フロントエンド cd ../frontend npm install
実行
# フロントエンドディレクトリから – 両サービスを同時に起動 npm run dev
- Next.js フロントエンド:http://localhost:3000
- FastAPI バックエンド:http://localhost:8000
🎛️ データレイヤー(左パネルから切替可能)
| レイヤ | 初期状態 | 説明 |
|---|---|---|
| 商業フライト | ✅ ON | 航空会社、貨物、GA航空機 |
| プライベートフライト | ✅ ON | 非商用のプライベート航空機 |
| プライベートジェット | ✅ ON | 所有者情報付き高価値ビズジェット |
| 軍事フライト | ✅ ON | 軍・政府航空機 |
| トラッキング対象航空機 | ✅ ON | 特定関心リスト |
| 衛星 | ✅ ON | ミッション別軌道資産 |
| キャリア/軍用/貨物船 | ✅ ON | 航空母艦、貨物船、タンカー |
| 民間船舶 | ❌ OFF | ヨット・漁船・レクリエーション |
| クルーズ/客船 | ✅ ON | クルーズラインとフェリー |
| 地震(24h) | ✅ ON | USGS の地震イベント |
| CCTV メッシュ | ❌ OFF | 監視カメラネットワーク |
| ウクライナ前線 | ✅ ON | ライブ戦場位置 |
| 世界的インシデント | ✅ ON | GDELT 紛争イベント |
| GPSジャミング | ✅ ON | NAC‑P 減衰ゾーン |
| 日夜サイクル | ✅ ON | 太陽分界線オーバーレイ |
🔧 パフォーマンスハイライト
- Gzip 圧縮 – API ペイロードを約92% 圧縮(11.6 MB → 915 KB)
- ETag キャッシュ – 304 Not Modified 応答で JSON 解析をスキップ
- ビューポートカリング – 可視領域内(+20% バッファ) のみ描画
- クラスタリングレンダリング – 船舶、CCTV、地震は MapLibre クラスタリングで特徴数削減
- デバウンスされたビューポート更新 – 300 ms デバウンスで GeoJSON 再構築を抑制
- 位置補間 – データリフレッシュ間で10 s タイムインターバルアニメーション
- React.memo – 重いコンポーネントをメモ化して再レンダリングを防止
- 座標精度 – 緯度/経度を5桁(約1 m)に丸め、JSON サイズ削減
📁 プロジェクト構成
live-risk-dashboard/ ├── backend/ │ ├── main.py # FastAPI アプリ、ミドルウェア、API ルート │ ├── carrier_cache.json # キャリア OSINT 位置を永続化 │ ├── cctv.db # SQLite CCTV カメラ DB │ └── services/ │ ├── data_fetcher.py # スケジューラー – すべてのデータソース取得 │ ├── ais_stream.py # AIS WebSocket クライアント(25K+船舶) │ ├── carrier_tracker.py # OSINT キャリア位置トラッカー │ ├── cctv_pipeline.py # 複数ソース CCTV 取り込みパイプライン │ ├── geopolitics.py # GDELT + ウクライナ前線取得 │ ├── region_dossier.py # 右クリック国/市情報 │ ├── radio_intercept.py # スキャナ風無線統合 │ ├── network_utils.py # HTTP クライアント(curl フォールバック) │ └── api_settings.py # API キー管理 └── frontend/ ├── src/ │ ├── app/ │ │ └── page.tsx # メインダッシュボード – 状態・ポーリング・レイアウト │ └── components/ │ ├── MaplibreViewer.tsx # コアマップ – 2,000+ 行、すべての GeoJSON レイヤー │ ├── NewsFeed.tsx # SIGINT フィード + エンティティ詳細パネル │ ├── WorldviewLeftPanel.tsx # データレイヤートグル │ ├── WorldviewRightPanel.tsx # 検索・フィルタサイドバー │ ├── FilterPanel.tsx # 基本レイヤーフィルタ │ ├── AdvancedFilterModal.tsx # 空港/国/所有者フィルタ │ ├── MapLegend.tsx # 動的凡例(すべてのアイコン) │ ├── MarketsPanel.tsx # 世界金融市場ティッカー │ ├── RadioInterceptPanel.tsx # スキャナ風無線パネル │ ├── FindLocateBar.tsx # 検索/ロケートバー │ ├── SettingsPanel.tsx # アプリ設定 │ ├── ScaleBar.tsx # マップスケール表示 │ ├── WikiImage.tsx # Wikipedia 画像取得 │ └── ErrorBoundary.tsx # クラッシュ回復ラッパー └── package.json
🔑 環境変数(バックエンド)
# 必須 AISSTREAM_API_KEY=your_aisstream_key # 海上船舶追跡 N2YO_API_KEY=your_n2yo_key # 衛星位置データ # 任意(データ品質向上) OPENSKY_CLIENT_ID=your_opensky_client_id # 航空データのレートリミットを拡張 OPENSKY_CLIENT_SECRET=your_opensky_secret LTA_ACCOUNT_KEY=your_lta_key # シンガポール CCTV カメラ
⚠️ 免責事項
本ツールは、完全に公開されたオープンソースインテリジェンス(OSINT)データのみを使用して構築された教育・研究目的のものです。機密・制限付き・非公表データは一切利用していません。キャリア位置は公開情報に基づく推定値であり、軍事的 UI はあくまで見た目のためです。
本ツールを作戦・軍事・情報活動に使用しないでください。
📜 ライセンス
本プロジェクトは教育および個人研究目的のみで利用できます。各 API プロバイダーの利用規約をご確認ください。
☕ と膨大な API 呼び出しで作られました。