AlanJoseph7/sky-gate
GitHub: AlanJoseph7/sky-gate
SkyGate 是一个基于三层机器学习集成的实时 ADS-B 飞行异常检测系统,旨在发现航空数据中的伪造与异常行为。
Stars: 0 | Forks: 0
# ✈️ SkyGate — ADS-B 异常检测系统
航空网络安全 · ADS-B · 异常检测
## 🎯 这是什么?
SkyGate 是一个 **实时航空网络安全系统**,它使用三层 AI/ML 检测管道来检测 ADS-B(自动相关监视—广播)数据中的伪造和异常行为。
ADS-B 是商业飞机用来广播其位置的系统。由于其 **没有认证或加密**,攻击者可以:
- 在雷达显示中注入伪造的飞机
- 将真实飞机传送到错误的位置
- 伪造不可能的飞行行为以混淆空中交通管制
SkyGate 是一个 **检测系统** — 它通过规则、机器学习和深度学习协同工作来识别这些攻击。模型使用 **实时 ADS-B 馈源**(通过 OpenSky Network 和 adsb.lol)以及 **合成异常注入数据** 进行训练,并且系统支持在印度空域进行 **实时监控**。
## 🏆 结果
| 检测器 | 精确率 | 召回率 | F1 分数 |
|---|---|---|---|
| 基于规则 | 0.9055 | 0.7625 | **0.8279** |
| 孤立森林 | 0.4631 | 0.6693 | 0.5474 |
| 自动编码器(深度学习) | 0.5601 | 0.4580 | 0.5039 |
| 🏅 **最终集成** | **0.7097** | **0.8307** | **0.7654** |
## 🏗️ 系统架构
```
┌─────────────────────────────────────────────────────────┐
│ SKYGATE PIPELINE │
├─────────────────────────────────────────────────────────┤
│ │
│ [1] generator.py → ADS-B Data Ingestion │
│ ↓ Live feed: OpenSky + adsb.lol │
│ Synthetic: anomaly injection │
│ 6 anomaly types · mixed dataset │
│ │
│ [2] features.py → Feature Engineering │
│ ↓ climb rate · acceleration │
│ heading change · distance │
│ │
│ [3] rules.py → Rule-Based Detection │
│ ↓ Physics threshold violations │
│ F1: 0.83 · Precision: 0.91 │
│ │
│ [4] isolation_ → Isolation Forest (ML) │
│ forest.py ↓ Unsupervised · trained on normals │
│ F1: 0.55 · Recall: 0.67 │
│ │
│ [5] lstm_model.py → Feedforward Autoencoder (DL) │
│ ↓ Reconstruction error detection │
│ F1: 0.50 · Bottleneck: 2 neurons │
│ │
│ [6] detect.py → Weighted Ensemble │
│ ↓ Dynamic F1-based weights │
│ F1: 0.77 · Recall: 0.83 │
│ │
│ [7] evaluation.py → Full Metrics Report │
│ [8] visualize.py → 4 Diagnostic Plots │
│ [9] live_monitor → Real-Time ADS-B Feed │
│ OpenSky + adsb.lol · 30s interval │
│ │
└─────────────────────────────────────────────────────────┘
```
## 🚨 检测到的异常类型
| 异常 | 类型 | 检测器 |
|---|---|---|
| **高度跳跃** | 突然 ±5000–10000 英尺尖峰 | 规则 + IF |
| **传送** | 不可能的经纬度跳跃 | 规则 + IF |
| **速度尖峰** | 速度超过物理限制 | 规则 + IF |
| **速度渐变漂移** | 10 步内累积加速度 | 自动编码器 |
| **高度振荡** | ±1500–2500 英尺快速振荡模式 | 自动编码器 |
| **航向振荡** | ±20–45° 之字形航向模式 | 自动编码器 |
## 🧠 技术栈
```
Language : Python 3.11
ML : scikit-learn (Isolation Forest, MinMaxScaler)
Deep Learning: TensorFlow 2.16 + tf-keras (Feedforward Autoencoder)
Data : pandas, numpy
Live Feed : OpenSky Network API · adsb.lol API (Indian airspace)
Visualisation: matplotlib
Environment : CPU-only · 16GB RAM · No GPU required · Zero cost
```
## 📁 项目结构
```
SkyGate/
│
├── src/
│ ├── generator.py # ADS-B data ingestion (live + synthetic)
│ ├── features.py # Feature engineering pipeline
│ ├── rules.py # Rule-based anomaly detection
│ ├── isolation_forest.py # Isolation Forest detector
│ ├── lstm_model.py # Feedforward Autoencoder detector
│ ├── detect.py # Weighted ensemble combiner
│ ├── evaluation.py # Metrics and evaluation
│ ├── visualize.py # Plot generation
│ ├── main.py # Single entry point
│ └── utils.py # Shared constants and path helpers
│
├── data/
│ ├── adsb_raw.csv # Raw ADS-B data (live + synthetic)
│ ├── adsb_features.csv # Engineered features
│ ├── adsb_rules.csv # After rule detection
│ ├── adsb_if.csv # After Isolation Forest
│ ├── adsb_lstm.csv # After Autoencoder
│ ├── adsb_final.csv # Final ensemble results
│ └── plots/ # Generated visualisations
│
├── models/ # Saved model files
├── logs/ # Training and live monitoring logs
├── requirements.txt
└── README.md
```
## ⚡ 快速开始
### 1. 克隆并设置环境
```
<<<<<<< HEAD
git clone https://github.com/AlanJoseph7/sky-gate.git
=======
git clone https://github.com/AlanJoseph7/skygate.git
>>>>>>> 570cd86794631274e805174c8b78800ecfde3062
cd skygate
python -m venv venv
venv\Scripts\activate # Windows
# source venv/bin/activate # Mac/Linux
pip install -r requirements.txt
```
### 2. 配置 API 凭证
将你的凭证添加到 `utils.py` 或 `.env` 文件:
```
OPENSKY_USERNAME = "your_opensky_username"
OPENSKY_PASSWORD = "your_opensky_password"
# adsb.lol is open — no key required
```
### 3. 运行完整管道(实时 + 合成)
```
cd src
python main.py
```
就这样。一条命令按顺序运行所有步骤 — 获取实时 ADS-B 数据,注入合成异常进行训练,运行检测管道,并打印最终汇总表。
### 4. 运行实时监控模式
```
cd src
python main.py --live
```
每 30 秒获取印度空域上的真实 ADS-B 数据并持续运行完整检测管道。
### 5. 运行单个步骤
```
cd src
python generator.py # Fetch live data + generate synthetic data
python features.py # Engineer features
python rules.py # Rule-based detection
python isolation_forest.py # Isolation Forest
python lstm_model.py # Autoencoder
python detect.py # Ensemble
python evaluation.py # Evaluate
python visualize.py # Plot
```
## 📊 视觉输出
该管道生成 4 张图表并保存到 `data/plots/`:
| 图表 | 描述 |
|---|---|
| `trajectory.png` | 带有红色标记异常的飞行路径 |
| `lstm_error.png` | 随时间变化的重建误差及阈值线 |
| `error_distribution.png` | 正常与异常误差直方图 — 显示模型分离效果 |
| `detector_comparison.png` | 各检测器检测到的异常数量与真实标签对比 |
## 🔍 集成检测器如何工作
每个检测器以其 F1 分数为权重进行投票:
```
weight_rule = F1_rule / (F1_rule + F1_IF + F1_autoencoder)
weight_IF = F1_IF / (F1_rule + F1_IF + F1_autoencoder)
weight_AE = F1_AE / (F1_rule + F1_IF + F1_autoencoder)
final_score = weight_rule * rule_anomaly +
weight_IF * if_anomaly +
weight_AE * lstm_anomaly
# Best threshold found via F1 sweep over [0.1, 1.0]
final_anomaly = final_score >= best_threshold
```
这意味着 **如果自动编码器性能下降,它会自动失去投票权**。该集成具有自校正能力。
## 💡 关键设计决策
**为什么同时使用实时和合成数据?**
从 OpenSky 和 adsb.lol 获取的实时 ADS-B 数据提供了印度空域的真实正常飞行行为,确保模型学习到真实的交通模式。然后将合成异常注入这些真实数据中用于监督训练和评估,因为真实的标记攻击数据无法公开获取。
**为什么使用前馈自动编码器而不是 LSTM?**
最初使用了 LSTM 自动编码器,但其异常/正常重建比率约为 ~0.97x — 实际上接近随机。前馈自动编码器独立评估每一行,使得异常特征组合直接表现为重建误差尖峰。最终比率:1.55x。
**为什么在集成中使用动态 F1 权重?**
硬编码权重(例如 0.4/0.3/0.3)无法适应检测器的实际性能。动态权重意味着集成会自动偏向当前数据集上表现最强的检测器。
**为什么在缩放前裁剪异常值?**
异常值(例如传送:每步 500 公里)主导了 MinMaxScaler 的范围,将所有正常变化压缩到接近零。将数据裁剪到正常数据的 4σ 可以在保持异常信号完整的同时保留正常特征的变化。
## 📋 需求
```
numpy==1.26.4
pandas==2.2.2
matplotlib==3.9.0
scikit-learn==1.5.0
tensorflow-cpu==2.16.1
tf-keras==2.16.0
keras==3.3.3
requests==2.31.0
```
## ⚠️ 约束与特性
- ✅ 零成本 — OpenSky 和 adsb.lol 是免费 API
- ✅ 完全本地化 — 在 CPU 上运行,无需 GPU
- ✅ 实时可行 — 印度空域实时监控
- ✅ 可重现 — 全程使用固定随机种子(`RANDOM_SEED = 42`)
- ✅ 模块化 — 每个管道步骤均可独立运行
标签:ADS-B, adsb.lol, OpenSky, TCP/UDP协议, 三层集成学习, 位置欺骗, 印度空域, 合成数据注入, 在线学习, 孤立森林, 实时异常检测, 广播式自动相关监视, 异常注入, 数据融合, 无认证协议, 时序异常检测, 机器学习管道, 深度学习, 网络仪表板, 网络流量分析, 自编码器, 航空网络安全, 航迹异常, 规则检测, 逆向工具, 飞行器监控