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

news2024/10/2 3:23:18

文章目录

  • 下载数据集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_size
        self.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 bidirectional
        self.fc2 = nn.Linear(512, 64)
        self.fc3 = nn.Linear(64, output_size)
        self.dropout = nn.Dropout(0.2)

        # Initialize GRU weights
        for 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 weights
        init.xavier_uniform_(self.fc1.weight)
        init.xavier_uniform_(self.fc2.weight)
        init.xavier_uniform_(self.fc3.weight)

        # Initialize fully connected layer biases
        init.zeros_(self.fc1.bias)
        init.zeros_(self.fc2.bias)
        init.zeros_(self.fc3.bias)

    def forward(self, x):
        # Initialize hidden state for bidirectional GRU
        h0 = torch.zeros(2, x.size(0), self.hidden_size).to(x.device)  # 2 for bidirectional

        # Forward pass through GRU
        out, _ = self.gru(x, h0)

        # Concatenate the hidden states from both directions
        out = 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)
    # softmax
    outputs = 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.coloradmin.cn/o/1549659.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

银行卡的分类

银行卡是银行账户的一种体现形式,它是由银行机构发行的具有消费信用、转账结算、存取现金等全部或部分功能作为结算支付工具的各类卡的统称。 (1)按是否具有授信额度分类 ①借记卡:借记卡是指发卡银行向申请人签发的,没…

牛客NC79 丑数【中等 堆、优先级队列 Java,Go,PHP Go和PHP中我自己实现了优先级队列】

题目 题目链接: https://www.nowcoder.com/practice/6aa9e04fc3794f68acf8778237ba065b 思路 注意: 数据范围:0≤n≤2000, 2000肯定到不了,最多到1690,相同题目链接:https://www.lintcode.com…

netty构建udp服务器以及发送报文到客户端客户端详细案例

目录 一、基于netty创建udp服务端以及对应通道设置关键 二、发送数据 三、netty中的ChannelOption常用参数说明 1、ChannelOption.SO_BACKLOG 2、ChannelOption.SO_REUSEADDR 3、ChannelOption.SO_KEEPALIVE 4、ChannelOption.SO_SNDBUF和ChannelOption.SO_RCVBUF 5、Ch…

CUDA安装 Windows版

目录 一、说明 二、安装工具下载 三、CUDA安装 四、cuDNN配置 五、验证安装是否成功 一、说明 windows10 版本安装 CUDA ,首先需要下载两个安装包 CUDA toolkitcuDNN 官方教程 CUDA:https://docs.nvidia.com/cuda/cuda-installation-guide-micro…

2.2 添加商户缓存

实战篇Redis 2.2 添加商户缓存 在我们查询商户信息时,我们是直接操作从数据库中去进行查询的,大致逻辑是这样,直接查询数据库那肯定慢咯,所以我们需要增加缓存 GetMapping("/{id}") public Result queryShopById(Pat…

政安晨:【深度学习神经网络基础】(一)—— 逐本溯源

政安晨的个人主页:政安晨 欢迎 👍点赞✍评论⭐收藏 收录专栏: 政安晨的机器学习笔记 希望政安晨的博客能够对您有所裨益,如有不足之处,欢迎在评论区提出指正! 与计算机一样的古老历史 神经网络的出现可追溯到20世纪40年…

Android源码阅读WorkMangaer - 6

前言 由于笔者目前水平限制,表达能力有限,尽请见谅。 WorkManager 是 Android Jetpack 库的一部分,提供了一种向后兼容的方式来安排可延迟的异步任务,这些任务即使在应用退出或设备重启后也应该继续执行,它是 Androi…

记录 AI绘图 Stable Diffusion的本地安装使用,可搭建画图服务端

开头 最近刷短视频看到了很多关于AI绘图,Midjourney,gittimg.ai,Stable Diffusion等一些绘图AI工具,感受到了AI绘画的魅力。通过chatGPT生成关键词再加上绘图工具,真是完美,文末教大家如何用gpt提词 Midj…

Anaconda的GEE环境中安装torch库

打开Anaconda,点击运行,打开terminal 输入pip install torch 而且由于anaconda中自己配置好了镜像源,在pip时自动使用清华镜像源

2024年4月份 风车IM即时通讯系统APP源码 版完整苹果安卓教程

关于风车IM,你在互联网上能随便下载到了基本都是残缺品, 经过我们不懈努力最终提供性价比最高,最完美的版本, 懂货的朋友可以直接下载该版本使用,经过严格测试,该版本基本完美无缺。 下载地址:…

【正点原子FreeRTOS学习笔记】————(4)FreeRTOS中断管理

这里写目录标题 一、什么是中断?(了解)二、中断优先级分组设置(熟悉)三、中断相关寄存器(熟悉)四、FreeRTOS中断管理实验(掌握) 一、什么是中断?(…

华为数通 HCIP-Datacom H12-831 题库补充(3/27)

2024年 HCIP-Datacom(H12-831)最新题库,完整题库请扫描上方二维码,持续更新。 如图所示,关于R4路由器通过IS-IS计算出来的IPv6路由,哪一选项的描述是错误的? A:R4通过IS—IS只学习到…

【企业动态】吉利雷达汽车来访东胜物联,考察交流,洽谈车联网生态合作

近日,我们非常高兴接待吉利雷达汽车一行莅临东胜物联位于湖州市的生产工厂,进行参观考察,并就未来的合作展开深入商讨与交流。 雷达新能源汽车隶属于吉利控股集团,是一家专注于户外生态的中高端新能源智能汽车企业。雷达通过共享吉…

【启发式算法】同核分子优化算法 Homonuclear Molecules Optimization HMO算法【Matlab代码#70】

文章目录 【获取资源请见文章第4节:资源获取】1. 算法简介2. 部分代码展示3. 仿真结果展示4. 资源获取 【获取资源请见文章第4节:资源获取】 1. 算法简介 同核分子优化算法(Homonuclear Molecules Optimization,HMO)是…

网页版短信系统后台开发要点|短信平台软件开发搭建

在开发网页版短信系统的后台时,有一些关键要点需要注意,以确保系统的稳定性、安全性和高效性。以下是一些开发网页版短信系统后台时的重要要点: 用户管理:实现用户权限管理功能,包括用户注册、登录、角色分配等&#x…

Redis为什么快

引言 Redis是一个高性能的开源内存数据库,以其快速的读写速度和丰富的数据结构支持而闻名。作为一个轻量级、灵活的键值存储系统,Redis在各种应用场景下都展现出了惊人的性能优势。无论是作为缓存工具、会话管理组件、消息传递媒介,还是在实时数据处理任务和复杂的分布式系…

YOLOv9改进策略:卷积魔改 | SPD-Conv,低分辨率图像和小物体涨点明显

💡💡💡本文改进内容:SPD-Conv由一个空间到深度(SPD)层和一个无卷积步长(Conv)层组成,特别是在处理低分辨率图像和小物体等更困难的任务时。 💡💡💡SPD-Conv在多个数据集验证能够暴力涨点&#x…

python3字典的排序

创建一个字典 dict1{a:2,b:3,c:8,d:4} 1、分别取键、值 取字典的所有键,所有的值,利用dict1.keys(),dict1.vaules(), 由于键,值有很多个,所以要加s,另外注意这里要加括号,这样的小…

java spirng和 mybatis 常用的注解有哪些

当在Java Spring和MyBatis中进行开发时,常用的注解对于简化配置和提高开发效率非常重要。以下是更多常用的注解以及它们的详细说明和用途: 在Spring中常用的注解: Component: 用途:表明一个类会作为组件被Spring容器管…

YOLOv9改进策略:block优化 | Transformer架构ConvNeXt 网络在检测中大放异彩

💡💡💡本文改进内容:Transformer架构 ConvNeXt 网络在图像分类和识别、分割领域大放异彩,同时对比 Swin-T 模型,在多种任务中其模型的大小和准确率均有一些提升,模型的 FLOPs 较大的减小且 Acc …