abhishek3673/CAN_IDS_FreeRTOS
GitHub: abhishek3673/CAN_IDS_FreeRTOS
一个基于ESP32的双节点CAN总线记录器和入侵检测系统,用于模拟攻击并实时检测汽车CAN网络威胁。
Stars: 0 | Forks: 0
# 汽车CAN总线记录器与入侵检测系统
基于ESP32的双节点硬件项目,模拟汽车CAN总线通信,集成实时入侵检测、FreeRTOS多任务调度及OLED警报功能。
## 硬件
| 组件 | 功能 |
|---|---|
| ESP32 DevKit v1 (×2) | 节点A:发送器/故障注入器 · 节点B:记录器/IDS |
| MCP2515 + TJA1050 (×2) | CAN控制器 + 收发器 |
| SSD1306 OLED 128×64 | 节点B实时显示模块 |
| 120Ω电阻 (×2) | CAN总线终端电阻 |
## 架构 — 节点B(FreeRTOS)
MCP2515硬件
│
[task_can_rx] 优先级=高 ──xQueue──► [task_ids] 优先级=高
│
┌───────────┘
▼
[task_display] 优先级=低 (oledMutex)
[task_serial] 优先级=低
| 任务 | 优先级 | 功能 |
|---|---|---|
| `task_can_rx` | 高 | 读取MCP2515,将帧数据推入队列 |
| `task_ids` | 高 | 白名单/洪泛/重放攻击检测 |
| `task_display` | 低 | 通过互斥锁更新SSD1306 OLED |
| `task_serial` | 低 | 串口日志供Python监控 |
## 入侵检测功能
### 1. 伪造ID检测
有效OBD-II CAN ID白名单:`0x0C0` `0x0D0` `0x110` `0x130`
任何未知ID → 立即触发OLED警报。
### 2. CAN洪泛检测
每秒跟踪数据包速率。
超过阈值(30包/秒)→ 触发洪泛警报。
### 3. 重放攻击检测
按ID追踪器存储最后帧数据。
相同数据重复5次以上 → 触发重放警报。
## 攻击模拟 — 节点A串口菜单
1 - 正常OBD-II通信(转速、车速、油门、冷却液温度)
2 - 伪造ID注入(0xDEAD)
3 - 重放攻击(相同帧重复10次)
4 - CAN洪泛(100个数据包,间隔5ms)
5 - 持续正常模式
## 模拟的OBD-II帧
| CAN ID | 信号 | 示例值 |
|---|---|---|
| `0x0C0` | 发动机转速 | 2000转/分钟 |
| `0x0D0` | 车速 | 60公里/小时 |
| `0x110` | 油门位置 | 30% |
| `0x130` | 冷却液温度 | 90°C |
## 接线
### SPI(双节点通用)
| ESP32 GPIO | MCP2515引脚 |
|---|---|
| GPIO 23 | SI (MOSI) |
| GPIO 19 | SO (MISO) |
| GPIO 18 | SCK |
| GPIO 5 | CS |
| GPIO 4 | INT |
### I2C — OLED(仅节点B)
| ESP32 GPIO | OLED引脚 |
|---|---|
| GPIO 21 | SDA |
| GPIO 22 | SCL |
### CAN总线
节点A CANH ══双绞线══ 节点B CANH
节点A CANL ══双绞线══ 节点B CANL
节点A GND ─────────── 节点B GND
CANH/CANL两端接120Ω电阻(硬件HW-184的J1跳线)
## 依赖库
mcp_can 作者:coryjfowler — CAN控制器驱动
Adafruit SSD1306 — OLED显示驱动
Adafruit GFX — 图形基础库
FreeRTOS 内置 — ESP32 Arduino核心库,无需安装
## Python串口监控
`python_logger/can_logger.py` — 将节点B所有串口输出记录到带时间戳的CSV文件。
```
pip install pyserial
python python_logger/can_logger.py --port COM3 --baud 115200
# Linux/Mac:--port /dev/ttyUSB0
```
输出文件:`can_log_YYYYMMDD_HHMMSS.csv`
## 文件结构
CAN_IDS_FreeRTOS/
├── NodeA_FaultInjector/
│ └── NodeA_FaultInjector.ino
├── NodeB_IDS/
│ ├── NodeB_IDS.ino
│ ├── shared.h
│ ├── can_rx_task.h
│ ├── ids_task.h
│ ├── display_task.h
│ └── serial_task.h
├── python_logger/
│ └── can_logger.py
└── README.md
## 技术能力展示
- 基于FreeRTOS的嵌入式C++固件开发(任务、队列、互斥锁)
- SPI外设驱动集成(MCP2515)
- CAN总线协议实现
- 汽车网络安全 — 支持3种攻击向量的入侵检测系统
- 通过互斥锁保证安全的实时OLED显示
- Python串口数据采集管道
标签:CAN总线安全, CAN总线记录器, CSV数据记录, ESP32, FreeRTOS, MCP2515, OBD-II模拟, Python, SPI通信, SSD1306, TJA1050, 串口通信, 假ID检测, 入侵检测系统, 命令控制, 多任务处理, 安全数据湖, 客户端加密, 嵌入式系统, 攻击模拟, 数据记录, 数据采集, 无后门, 汽车电子, 汽车网络安全, 洪水攻击检测, 物联网安全, 硬件安全, 逆向工具, 重放攻击检测, 驱动签名利用