Rockstarr06/CAN-bus-security---Intrusion-

GitHub: Rockstarr06/CAN-bus-security---Intrusion-

基于 XGBoost 与 TensorFlow 1D-CNN 混合集成学习的 CAN 总线网络入侵检测系统,提供从数据处理、模型训练到 FastAPI 实时推理服务的完整流水线。

Stars: 0 | Forks: 0

# 面向自动驾驶网络的基于 AI 的 CAN 总线入侵检测 一个可复现的机器学习项目,使用**特征工程**、**XGBoost**、**TensorFlow 1D-CNN** 以及概率级别的**混合集成**来检测恶意控制器局域网(CAN)流量。 ## 本项目演示的内容 - 解析常见的 CAN CSV 格式并标准化十六进制 CAN 标识符 - Payload 和时间特征工程 - 分层训练/验证/测试集划分 - XGBoost 多分类攻击分类 - TensorFlow 1D-CNN 分类 - 验证集加权的混合概率融合 - 准确率、平衡准确率、宏/加权 F1、分类别报告和混淆矩阵 - 保存的预处理和模型 artifacts - 有状态的近实时 CAN 帧推理 - 带有单条和批量预测 endpoint 的 FastAPI 服务 - Docker 打包、测试和 GitHub Actions CI - 用于完全可运行演示的合成 CAN 流量生成器 ## 架构 ``` flowchart LR A[CAN frames / CSV] --> B[Schema validation] B --> C[CAN ID + payload normalisation] C --> D[Temporal and payload feature engineering] D --> E[Train / validation / test split] E --> F[StandardScaler] F --> G[XGBoost] F --> H[1D CNN] G --> I[Probability fusion] H --> I I --> J[Attack class + confidence] J --> K[FastAPI / real-time stream] ``` ## 演示数据集中的攻击类别 内置的合成生成器会创建五个类别: - `normal` - `dos` - `fuzzy` - `gear_spoof` - `rpm_spoof` 该 pipeline 并不局限于这些标签。它会学习已配置 CSV 中存在的标签。 ## 仓库结构 ``` . ├── artifacts/demo/ # Ready-to-use XGBoost demo model ├── configs/ # Quick and full hybrid experiment configs ├── data/sample/ # Synthetic, non-sensitive demonstration data ├── docs/ # Architecture, report, model/data cards and interview notes ├── notebooks/ # End-to-end notebook ├── reports/ # Reproducible metrics and figures ├── scripts/ # Convenience entry points ├── src/can_ids/ # Production-style Python package ├── tests/ # Unit and API tests ├── .github/workflows/ci.yml # Continuous integration ├── Dockerfile ├── docker-compose.yml ├── Makefile ├── pyproject.toml └── requirements*.txt ``` ## 快速开始:使用内置的演示模型 推荐:Python 3.11。 ``` python -m venv .venv source .venv/bin/activate # Windows: .venv\\Scripts\\activate python -m pip install --upgrade pip pip install -r requirements-lite.txt pip install -e . uvicorn can_ids.api:app --host 0.0.0.0 --port 8000 ``` 验证: ``` curl http://localhost:8000/health ``` 打开交互式 API 文档: ``` http://localhost:8000/docs ``` 示例请求: ``` curl -X POST http://localhost:8000/predict \ -H "Content-Type: application/json" \ -d '{ "timestamp": 0.001, "can_id": "0x000", "dlc": 8, "data": [0,0,0,0,0,0,0,0] }' ``` ## 训练一个快速的 XGBoost 实验 ``` python -m can_ids.cli generate-data --output data/sample/can_sample.csv --rows 6000 python -m can_ids.cli train --config configs/quick.yaml ``` 输出将写入 `artifacts/quick/` 和 `reports/quick/`。 ## 训练完整的 CNN + XGBoost 混合模型 TensorFlow 是可选的,因为其安装过程较为繁琐。 ``` pip install -e ".[full]" python -m can_ids.cli train --config configs/hybrid.yaml ``` 混合训练器将执行以下操作: 1. 仅在训练集上拟合预处理。 2. 独立训练 XGBoost 和 CNN。 3. 测量两个模型的验证集宏 F1。 4. 将这些分数转换为集成权重。 5. 在测试集上对固定的集成模型进行一次评估。 ## 使用真实的 CAN 数据集 将数据集放置在 `data/raw/` 下,并确保其可以映射为: ``` timestamp, can_id, dlc, byte_0, byte_1, ..., byte_7, label ``` 支持诸如 `0x316` 和 `316` 之类的十六进制 ID。缺失的 Payload 字节将用零填充。请在 YAML 中配置路径和列别名。请参阅 [`docs/DATA_CARD.md`](docs/DATA_CARD.md)。 ## 运行测试 ``` pip install -e ".[dev]" pytest -q ``` ## Docker ``` docker compose up --build ``` 该服务可在 `http://localhost:8000` 访问。 ## 面试总结 更多详细信息请参阅 [`docs/INTERVIEW_NOTES.md`](docs/INTERVIEW_NOTES.md)。 ## 学术诚信与保密须知 在将本仓库作为您的大学作业上传之前: 1. 仅在您的大学允许公开共享的情况下,添加您原创的论文 PDF。 2. 将合成数据集替换为合法的公共数据集链接,或替换为获取原始数据集的说明。 3. 请勿上传机密、受许可许可或包含个人身份信息的数据。 4. 将重构的文本替换为您实际的方法论和确切的实验设置。 5. 在声明任何数值结果之前,请重新运行实验并提交生成的指标。 ## 许可证 代码在 MIT 许可证下提供。数据集许可独立存在,在重新分发前必须进行检查。
标签:Apex, CAN总线, 人工智能, 机器学习, 用户模式Hook绕过, 自动驾驶, 请求拦截, 车联网, 逆向工具