【深度学习】【机器学习】用神经网络进行入侵检测,NSL-KDD数据集,基于机器学习(深度学习)判断网络入侵

文章目录

  • 下载数据集NSL-KDD
  • 数据集介绍
  • 输入的41个特征
  • 输出的含义
  • 数据处理&&训练技巧
  • 建神经网络,输入41个特征,输出是那种类别的攻击
  • 模型训练
  • 模型推理
  • 写gradio前端界面,用户自己输入41个特征,后端用模型推理计算后显示出是否是dos攻击。
  • 使用方法:
  • 获取代码和模型

【深度学习】用神经网络进行入侵检测,NSL-KDD数据集,用TCP连接特征判断是否是网络入侵

下载数据集NSL-KDD

NSL-KDD数据集,有dos,u2r,r21,probe等类型的攻击,和普通的正常的流量,即是这样:

Normal:正常记录
DOS:拒绝服务攻击
PROBE:监视和其他探测活动
R2L:来自远程机器的非法访问
U2R:普通用户对本地超级用户特权的非法访问

数据集样子:

在这里插入图片描述

数据集介绍

https://towardsdatascience.com/a-deeper-dive-into-the-nsl-kdd-data-set-15c753364657
https://mathpretty.com/10244.html

输入的41个特征

下面是对TCP连接的41个特征的介绍:

特征编号特征名称特征描述类型范围
1duration连接持续时间,从TCP连接建立到结束的时间,或每个UDP数据包的连接时间连续[0, 58329]秒
2protocol_type协议类型,可能值为TCP, UDP, ICMP离散-
3service目标主机的网络服务类型,共70种可能值离散-
4flag连接状态,11种可能值,表示连接是否按照协议要求开始或完成离散-
5src_bytes从源主机到目标主机的数据的字节数连续[0, 1379963888]
6dst_bytes从目标主机到源主机的数据的字节数连续[0, 1309937401]
7land若连接来自/送达同一个主机/端口则为1,否则为0离散0或1
8wrong_fragment错误分段的数量连续[0, 3]
9urgent加急包的个数连续[0, 14]
10hot访问系统敏感文件和目录的次数连续[0, 101]
11num_failed_logins登录尝试失败的次数连续[0, 5]
12logged_in成功登录则为1,否则为0离散0或1
13num_compromisedcompromised条件出现的次数连续[0, 7479]
14root_shell若获得root shell 则为1,否则为0离散0或1
15su_attempted若出现"su root" 命令则为1,否则为0离散0或1
16num_rootroot用户访问次数连续[0, 7468]
17num_file_creations文件创建操作的次数连续[0, 100]
18num_shells使用shell命令的次数连续[0, 5]
19num_access_files访问控制文件的次数连续[0, 9]
20num_outbound_cmds一个FTP会话中出站连接的次数连续0
21is_hot_login登录是否属于“hot”列表,是为1,否则为0离散0或1
22is_guest_login若是guest登录则为1,否则为0离散0或1
23count过去两秒内,与当前连接具有相同的目标主机的连接数连续[0, 511]
24srv_count过去两秒内,与当前连接具有相同服务的连接数连续[0, 511]
25serror_rate过去两秒内,在与当前连接具有相同目标主机的连接中,出现“SYN”错误的连接的百分比连续[0.00, 1.00]
26srv_serror_rate过去两秒内,在与当前连接具有相同服务的连接中,出现“SYN”错误的连接的百分比连续[0.00, 1.00]
27rerror_rate过去两秒内,在与当前连接具有相同目标主机的连接中,出现“REJ”错误的连接的百分比连续[0.00, 1.00]
28srv_rerror_rate过去两秒内,在与当前连接具有相同服务的连接中,出现“REJ”错误的连接的百分比连续[0.00, 1.00]
29same_srv_rate过去两秒内,在与当前连接具有相同目标主机的连接中,与当前连接具有相同服务的连接的百分比连续[0.00, 1.00]
30diff_srv_rate过去两秒内,在与当前连接具有相同目标主机的连接中,与当前连接具有不同服务的连接的百分比连续[0.00, 1.00]
31srv_diff_host_rate过去两秒内,在与当前连接具有相同服务的连接中,与当前连接具有不同目标主机的连接的百分比连续[0.00, 1.00]
32dst_host_count前100个连接中,与当前连接具有相同目标主机的连接数连续[0, 255]
33dst_host_srv_count前100个连接中,与当前连接具有相同目标主机相同服务的连接数连续[0, 255]
34dst_host_same_srv_rate前100个连接中,与当前连接具有相同目标主机相同服务的连接所占的百分比连续[0.00, 1.00]
35dst_host_diff_srv_rate前100个连接中,与当前连接具有相同目标主机不同服务的连接所占的百分比连续[0.00, 1.00]
36dst_host_same_src_port_rate前100个连接中,与当前连接具有相同目标主机相同源端口的连接所占的百分比连续[0.00, 1.00]
37dst_host_srv_diff_host_rate前100个连接中,与当前连接具有相同目标主机相同服务的连接中,与当前连接具有不同源主机的连接所占的百分比连续[0.00, 1.00]
38dst_host_serror_rate前100个连接中,与当前连接具有相同目标主机的连接中,出现SYN错误的连接所占的百分比连续[0.00, 1.00]
39dst_host_srv_serror_rate前100个连接中,与当前连接具有相同目标主机相同服务的连接中,出现SYN错误的连接所占的百分比连续[0.00, 1.00]
40dst_host_rerror_rate前100个连接中,与当前连接具有相同目标主机的连接中,出现REJ错误的连接所占的百分比连续[0.00, 1.00]
41dst_host_srv_rerror_rate前100个连接中,与当前连接具有相同目标主机相同服务的连接中,出现REJ错误的连接所占的百分比连续[0.00, 1.00]

这个表格提供了关于TCP连接的41个特征的详细介绍,包括特征编号、特征名称、特征描述、类型以及范围。

输出的含义

数据集是一个csv表格,倒数第二列就是类别标签,大类其实就五个:

['normal', 'dos', 'probe', 'r2l', 'u2r']

但csv里写的详细的标签:
在这里插入图片描述

可以通过这个程序转换:

# 结果标签转换为数字
dos_type = ['back', 'land', 'neptune', 'pod', 'smurf', 'teardrop', 'processtable', 'udpstorm', 'mailbomb','apache2']
probing_type = ['ipsweep', 'mscan', 'nmap', 'portsweep', 'saint', 'satan']
r2l_type = ['ftp_write', 'guess_passwd', 'imap', 'multihop', 'phf', 'warezmaster', 'warezclient', 'spy', 'sendmail','xlock', 'snmpguess', 'named', 'xsnoop', 'snmpgetattack', 'worm']
u2r_type = ['buffer_overflow', 'loadmodule', 'perl', 'rootkit', 'xterm', 'ps', 'httptunnel', 'sqlattack']
type2id = {'normal': 0}
for i in dos_type:type2id[i] = 1
for i in r2l_type:type2id[i] = 2
for i in u2r_type:type2id[i] = 3
for i in probing_type:type2id[i] = 4

数据处理&&训练技巧

数据预处理

讨论原始网络数据面临的挑战:高维度、类别特征和连续特征。

使用的技术:

对类别数据(协议类型、服务和标志)进行独热编码。

标准化连续特征以处理不同的尺度。

如何处理缺失数据(如果有),通过插值或删除。

使用StandardScaler和pickle保存缩放参数以保持一致的预处理。

处理不平衡数据

讨论入侵检测数据集中的不平衡问题。

介绍ImbalancedDatasetSampler的使用及其如何帮助实现平衡的小批量。

使用此类采样器对深度学习模型训练的好处。

模型架构

解释两个提出的模型:BGRUNet2和AttentionModel。

详细介绍GRU(门控循环单元)层、双向性和注意力机制。

权重初始化技术,如Xavier和Kaiming初始化。

使用Dropout和Batch Normalization防止过拟合。

训练技巧

使用CosineAnnealingLR进行学习率调度,以适应性地调整学习率。

选择Adam优化器而非传统的SGD的原因。

损失函数的选择及其对模型训练的影响。

实验设置

数据加载器和批处理过程的描述。

利用GPU进行高效模型训练。

在训练过程中评估模型准确性和损失的过程。

建神经网络,输入41个特征,输出是那种类别的攻击

神经网络模型:


class BGRUNet2(nn.Module):def __init__(self, input_size, hidden_size, output_size):super(BGRUNet2, self).__init__()self.hidden_size = hidden_sizeself.gru = nn.GRU(input_size, hidden_size, batch_first=True, bidirectional=True)self.fc1 = nn.Linear(hidden_size * 2, 512)  # Multiply hidden size by 2 for bidirectionalself.fc2 = nn.Linear(512, 64)self.fc3 = nn.Linear(64, output_size)self.dropout = nn.Dropout(0.2)# Initialize GRU weightsfor name, param in self.gru.named_parameters():if 'weight_ih' in name:init.xavier_uniform_(param.data)elif 'weight_hh' in name:init.orthogonal_(param.data)elif 'bias' in name:param.data.fill_(0)# Initialize fully connected layer weightsinit.xavier_uniform_(self.fc1.weight)init.xavier_uniform_(self.fc2.weight)init.xavier_uniform_(self.fc3.weight)# Initialize fully connected layer biasesinit.zeros_(self.fc1.bias)init.zeros_(self.fc2.bias)init.zeros_(self.fc3.bias)def forward(self, x):# Initialize hidden state for bidirectional GRUh0 = torch.zeros(2, x.size(0), self.hidden_size).to(x.device)  # 2 for bidirectional# Forward pass through GRUout, _ = self.gru(x, h0)# Concatenate the hidden states from both directionsout = torch.cat((out[:, -1, :self.hidden_size], out[:, 0, self.hidden_size:]), dim=1)out = self.dropout(out)out = F.relu(self.fc1(out))out = self.dropout(out)out = F.relu(self.fc2(out))out = self.dropout(out)return self.fc3(out)

模型训练

训练30轮,准确度最高97.2%:

在这里插入图片描述

随着训练轮数的变化,损失的变化:

在这里插入图片描述

模型推理

加载模型后,构建输入数据,模型推导得出结果:

device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')
model = BGRUNet2(input_size=122, hidden_size=256, output_size=5)
model.load_state_dict(torch.load('model_accuracy_max.pth', map_location=device))
model.to(device)
model.eval()
time1 = time.time()
with torch.no_grad():X = X.to(device)outputs = model(X)# softmaxoutputs = F.softmax(outputs, dim=1)_, predicted = torch.max(outputs.data, 1)time2 = time.time()

写gradio前端界面,用户自己输入41个特征,后端用模型推理计算后显示出是否是dos攻击。

运行代码后访问:http://127.0.0.1:7869/

可以看到:
在这里插入图片描述

填写特征太多,有点懒得填,可以拉到最底下,有例子,可以点一下例子数据:

在这里插入图片描述

然后点一下Submit,模型推流后给出结果,可以看到,模型认为这次TCP连接数据表明了这是probe入侵,概率是1,模型推理消耗了0.002秒。

在这里插入图片描述

使用方法:

在这里插入图片描述

执行python run2.py。即可开启训练。

执行python infer.py。即可开启gradio前端界面。

获取代码和模型

go:

https://docs.qq.com/sheet/DUEdqZ2lmbmR6UVdU?tab=BB08J2

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/572875.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

『Apisix安全篇』探索Apache APISIX身份认证插件:从基础到实战

🚀『Apisix系列文章』探索新一代微服务体系下的API管理新范式与最佳实践 【点击此跳转】 📣读完这篇文章里你能收获到 🛠️ 了解APISIX身份认证的重要性和基本概念,以及如何在微服务架构中实施API安全。🔑 学习如何使…

11.2024

插入排序 代码&#xff1a; public class 第十一题 {public static void main(String[] args) {int a[]{2,2,1,6,4,9,7,6,8};for (int k1;k<a.length;k){int sk-1;//排好序的最后一位int sssa[k];//记录哨兵的值while (s>0&&sss<a[s]){a[s1]a[s];s--;}a[s1]…

vue + LogicFlow 实现流程图展示

vue LogicFlow 实现流程图展示 1.背景 部门主要负责低代码平台&#xff0c;配置端负责配置流程图&#xff0c;引擎端负责流程执行&#xff0c;原引擎端只负责流程执行控制以及流程历史列表展示。现在提出个新的要求&#xff0c;认为仅历史记录不直观&#xff0c;需要在展示完…

数据结构 - 用队列实现栈/用栈实现队列

用栈实现队列 思路&#xff1a; 队列是遵循队头出数据&#xff0c;队列进数据。 创建两个栈&#xff0c;一个左栈&#xff0c;一个右栈。左栈用来插入新数据&#xff0c;右栈用来出数据 我们要借用栈的性质也实现一个出数据&#xff0c;和入数据的功能&#xff0c;该怎么样实…

【学习】软件科技成果鉴定测试有何作用

软件科技成果鉴定测试是针对软件进行项目申报、科技成果鉴定等相关目的进行的测试。软件测试报告可作为项目申报、科技成果鉴定等工作的依据之一。软件类科技成果鉴定测试从软件文档、功能性、使用技术等方面对软件系统进行符合性测试。其测试结果证明软件的质量是否符合技术合…

Redis是单线程还是多线程?(面试题)

1、Redis5及之前是单线程版本 2、Redis6开始引入多线程版本&#xff08;实际上是 单线程多线程 版本&#xff09; Redis6及之前版本&#xff08;单线程&#xff09; Redis5及之前的版本使用的是 单线程&#xff0c;也就是说只有一个 worker队列&#xff0c;所有的读写操作都要…

创建Qt Quick Projects

在创建Qt Quick项目之前&#xff0c;我们简单说一下Qml和Qt Quick的关系&#xff1a;它们的关系类似于C和STL标准库的关系&#xff0c;Qml类比C语言&#xff0c;提供了基本语言特性和类型&#xff1b;而Qt Quick则类比STL标准库&#xff0c;Qt Quick在QML的基础上加入了一系列界…

数据结构——第5章 树和二叉树

1 二叉树 二叉树和树都属于树形结构&#xff0c;但两者互不包含。即二叉树不是特殊的树。 1.1 二叉树的基本概念 1.2 二叉树的顺序存储 仅适用于完全二叉树 #define MaxSize 100 typedef int ElemType; typedef struct TreeNode{ElemType value;//结点中的数据元素bool isE…

华为开源自研AI框架昇思MindSpore应用案例:梯度累加

目录 一、环境准备1.进入ModelArts官网2.使用CodeLab体验Notebook实例 二、案例实现 梯度累加的训练算法&#xff0c;目的是为了解决由于内存不足&#xff0c;导致Batch size过大神经网络无法训练&#xff0c;或者网络模型过大无法加载的OOM&#xff08;Out Of Memory&#xff…

软考 - 软件架构设计师 - 关系模型的完整性规则

前言 关系模型的完整性规则是一组用于确保关系数据库中数据的完整性和一致性的规则。这些规则定义了在关系数据库中如何存储、更新和查询数据&#xff0c;以保证数据的准确性和一致性。 详情 关系模型的完整性规则主要包括以下三类&#xff1a; 实体完整性规则 这是确保每个…

自动化与智能化并行:数字化运维体系助力企业腾飞

文章目录 文章目录 文章目录 一、引言二、数字化运维体系的核心要素三、构建数字化运维体系的策略四、数字化运维体系的实施与挑战主要内容读者对象 一、引言 随着信息技术的迅猛发展&#xff0c;数字化转型已成为企业提升竞争力、实现可持续发展的必由之路。在数字化转型的过…

nvm安装以后,node -v npm 等命令提示不是内部或外部命令

因为有vue2和vue3项目多种&#xff0c;所以为了适应各类版本node,使用nvm管理多种node版本&#xff0c;但是当我按教程安装nvm以后&#xff0c;nvm安装以后&#xff0c;node -v npm 等命令提示不是内部或外部命令 首先nvm官网网址&#xff1a;https://github.com/coreybutler/…