车联网入侵检测1
简介
基于迁移学习和深度学习的车载网络入侵检测系统在模型训练上以CIC-IDS数据集为例,整体预达到对车内所有经过流量达到入侵检测目的。
后端主要模块
数据输入与信息提取
以车载Linux或基于Linux其他操作系统为例。采用tcpdump进行抓包。脚本如下:
#!/bin/bash
# 查找最大的文件编号
maxnum=0
for file in cap*.pcap; do
if [[ $file =~ cap([0-9]+).pcap ]]; then
num=${BASH_REMATCH[1]}
if (( num > maxnum )); then
maxnum=$num
fi
fi
done
# 开始tcpdump命令
sudo tcpdump -C 1 -w "cap$(($maxnum+1)).pcap" &
# 获取tcpdump命令的PID
PID=$!
# 等待tcpdump命令开始运行
sleep 1
# 循环检查新的pcap文件
while kill -0 $PID 2> /dev/null; do
# 查找新的pcap文件
for file in cap*.pcap*; do
# 检查文件名是否需要更改
if [[ $file =~ cap([0-9]+).pcap([0-9]+) ]]; then
# 获取文件编号
num1=${BASH_REMATCH[1]}
num2=${BASH_REMATCH[2]}
# 构造新的文件名
newfile="cap$(($num1+$num2)).pcap"
# 重命名文件
mv $file $newfile
fi
done
# 等待一段时间再次检查
sleep 1
done
输出cap1.pcap,cap2.pcap...依此类推。
采用pcap4j库对pcap文件进行信息提取,例如源地址、目的地址、http请求的payload等,如下:
十一月 20, 2023 10:25:44 上午 ReadPacketFile readPcapFile
信息: Payload: POST /auth/login/ HTTP/1.1
Host: honeypot.lab.cfiul.ca
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Firefox/52.0
Accept: */*
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Content-Type: application/json
X-CSRFToken: 1535499953##adb5da4e21786844551e15eb641fa650deec0392
X-Requested-With: XMLHttpRequest
Content-Length: 101
Cookie: session=.eJw9j0Frg0AUhP9KeeccNglehBy6mEpK34qwkr4tQeKaqOtuG2LoqsH_nqYNPQ3MMN8wV8iPdt_Vhw7Cjys8Xf6kgBD228AVfrWCafZwsri39C7sJu6_1cBPRcNZMfCaFsLqJVZlXJ_0wD1tS_tW3Zu7aTeDvCkhfCBEnDIR4ZjI2ijzatDRgkbl0G16MaY-kVkgojQgt74Pg-7Ox_zy1R4-_xEYIcOo6tEoK0zKlNFLGvVcmcz_ZEMin71yL00irSXJW5Qto98f0w26KE2M.Dmdivg.FuwCeBpW1t1HtZo_pWDK9-Oo8TQ
DNT: 1
Connection: keep-alive
{"email":"test@example","password":"%20%43%46%49%7b%31%6e%73%33%63%75%72%33%5f%6c%30%67%30%6e%7d%20"}
十一月 20, 2023 10:25:44 上午 ReadPacketFile readPcapFile
信息: Captured at: 2018-08-29T06:49:19.029084802+08:00[Asia/Shanghai]
Original length: 634 bytes
[Ethernet Header (14 bytes)]
Destination address: ac:ed:5c:6f:68:73
Source address: 6c:3b:6b:55:a1:de
Type: 0x0800 (IPv4)
[IPv4 Header (20 bytes)]
Version: 4 (IPv4)
IHL: 5 (20 [bytes])
TOS: [precedence: 0 (Routine)] [tos: 0 (Default)] [mbz: 0]
Total length: 620 [bytes]
Identification: 33444
Flags: (Reserved, Don't Fragment, More Fragment) = (false, true, false)
Fragment offset: 0 (0 [bytes])
TTL: 63
Protocol: 6 (TCP)
Header checksum: 0x65df
Source address: /10.10.20.4
Destination address: /10.10.40.241
[TCP Header (32 bytes)]
Source port: 80 (HTTP)
Destination port: 47428 (unknown)
Sequence Number: 997263206
Acknowledgment Number: 1783381387
Data Offset: 8 (32 [bytes])
Reserved: 0
URG: false
ACK: true
PSH: true
RST: false
SYN: false
FIN: false
Window: 253
Checksum: 0xd802
Urgent Pointer: 0
Option: [Kind: 1 (No Operation)]
Option: [Kind: 1 (No Operation)]
Option: [Kind: 8 (Timestamps)] [Length: 10 bytes] [TS Value: 88586127] [TS Echo Reply: 322133]
[data (568 bytes)]
Hex stream: 48 54 54 50 2f 31 2e 31 20 34 30 31 20 55 4e 41 55 54 48 4f 52 49 5a 45 44 0d 0a 53 65 72 76 65 72 3a 20 6e 67 69 6e 78 2f 31 2e 34 2e 36 20 28 55 62 75 6e 74 75 29 0d 0a 44 61 74 65 3a 20 54 75 65 2c 20 32 38 20 41 75 67 20 32 30 31 38 20 32 32 3a 34 39 3a 31 39 20 47 4d 54 0d 0a 43 6f 6e 74 65 6e 74 2d 54 79 70 65 3a 20 61 70 70 6c 69 63 61 74 69 6f 6e 2f 6a 73 6f 6e 0d 0a 43 6f 6e 74 65 6e 74 2d 4c 65 6e 67 74 68 3a 20 34 34 0d 0a 43 6f 6e 6e 65 63 74 69 6f 6e 3a 20 6b 65 65 70 2d 61 6c 69 76 65 0d 0a 53 65 74 2d 43 6f 6f 6b 69 65 3a 20 73 65 73 73 69 6f 6e 3d 2e 65 4a 77 39 6a 30 46 72 67 30 41 55 68 50 39 4b 65 65 63 63 4e 67 6c 65 68 42 79 36 6d 45 70 4b 33 34 71 77 6b 72 34 74 51 65 4b 61 71 4f 74 75 47 32 4c 6f 71 73 48 5f 6e 71 59 4e 50 51 33 4d 4d 4e 38 77 56 38 69 50 64 74 5f 56 68 77 37 43 6a 79 73 38 58 66 36 6b 67 42 44 32 32 38 41 56 66 72 57 43 61 66 5a 77 73 72 69 33 39 43 37 73 4a 75 36 5f 31 63 42 50 52 63 4e 5a 4d 66 43 61 46 73 4c 71 4a 56 5a 6c 58 4a 5f 30 77 44 31 74 53 5f 74 57 33 5a 75 37 61 54 65 44 76 43 6b 68 66 43 42 45 6e 44 49 52 34 5a 6a 49 32 69 6a 7a 61 74 44 52 67 6b 62 6c 30 47 31 36 4d 61 59 2d 6b 56 6b 67 6f 6a 51 67 74 37 34 50 67 2d 37 4f 78 5f 7a 79 31 52 34 2d 5f 78 45 59 49 63 4f 6f 36 74 45 6f 4b 30 7a 4b 6c 4e 46 4c 47 76 56 63 6d 63 7a 5f 5a 45 4d 69 6e 37 31 79 4c 30 30 69 72 53 58 4a 57 35 51 74 6f 39 38 66 30 77 32 36 4b 45 32 4d 2e 44 6d 64 69 37 77 2e 4b 62 5f 39 30 49 4c 43 47 5a 5f 65 30 74 31 76 42 50 62 35 68 68 38 77 54 5a 41 3b 20 48 74 74 70 4f 6e 6c 79 3b 20 50 61 74 68 3d 2f 0d 0a 0d 0a 7b 22 65 72 72 6f 72 22 3a 20 22 49 6e 63 6f 72 72 65 63 74 20 75 73 65 72 6e 61 6d 65 20 6f 72 20 70 61 73 73 77 6f 72 64 2e 22 7d
以此作为日志一部分
输入转换
使用开源的网络流特征提取工具CICFlowmeter,将pcap转csv文件作为算法输入
CICFlowmeter工具地址 https://github.com/ahlashkari/CICFlowMeter
工具提供的是界面启动方式和命令行启动方式,稍加依赖和启动类就可转为web服务作为接口待调用。
滚动日志
使用websocket让前端监听
数据库方面
因为把客户端取消了,加改了需要,之后数据库也要改
之前数据库
注册车表
字段 | 类型 | 说明 | 备注 |
---|---|---|---|
car_number | varchar(20) | 车牌号 | 主键 |
car_brand | varchar(10) | 车品牌 | |
car_color | varchar(10) | 车颜色 | |
car_user_email | varchar(50) | 车主邮箱 | |
created_time | datetime | 注册时间 | |
total_duration | decimal(10) | 总时长 |
入侵记录表
字段 | 类型 | 说明 | 备注 |
---|---|---|---|
car_intrusion_id | varchar(10) | 随机生成id | 主键 |
car_number | varchar(20) | 被入侵的车牌号 | |
intrusion_type | varchar(20) | 入侵类型 | |
intrusion_time | datetime | 入侵时间 | |
intrusion_src | varchar(20) | 入侵来源 |
检测记录表
字段 | 类型 | 说明 | 备注 |
---|---|---|---|
detection_id | varchar(5) | 随机生成id | 主键 |
car_number | varchar(20) | 车牌号 | |
detection_time | datetime | 检测时间 | |
is_abnormal | tinyint(1) | ||
detection_desc | varchar(300) |
反馈记录表
字段 | 类型 | 说明 | 备注 |
---|---|---|---|
feedback_id | varchar(20) | id | 主键 |
car_number | varchar(20) | ||
detection_src | varchar(5) | 反馈信息来源 | |
feed_back_time | datetime | 反馈时间 | |
feedback_desc | varchar(255) | 反馈描述 |
入侵类型例表
字段 | 类型 | 说明 | 备注 |
---|---|---|---|
intrusion_type | varchar(50) | 入侵类型 | 主键 |
intrusion_desc | varchar(50) | 入侵描述 | |
add_time | datetime | 添加时间 |
用户表
字段 | 类型 | 说明 | 备注 |
---|---|---|---|
user_name | varchar(20) | 用户名 | 主键 |
user_email | varchar(50) | 用户邮箱 | |
user_password | varchar(20) | 用户密码 | |
auto_detection | tinyint(1) | 是否开启自动检测 | |
warning | tinyint(1) | 是否开启警告 | |
created_time | datetime | 注册时间 |
启动退出记录表
字段 | 类型 | 说明 | 备注 |
---|---|---|---|
log_id | varchar(5) | id | 主键 |
car_number | varchar(20) | 车牌号 | |
start_time | datetime | 开启检测时间 | |
end_time | datetime | 停止检测时间 |
后端技术选型
使用基于Spring Boot的微服务架构,并利用Spring Cloud提供的工具进行微服务的管理和协调。以Mybatis-plus作为持久层框架。使用Mysql为主,Redis为辅作为数据库支持。
请求返回格式
{
"status": 2000,
"data": {
"xxx": "xxx",
},
"msg": "xxx"
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)