基于深度学习检测恶意流量识别框架(80+特征/99%识别率)

基于深度学习检测恶意流量识别框架

目录

    • 基于深度学习检测恶意流量识别框架
    • 简要
    • 示例
      • a.检测攻击类别
      • b.模型训练结果输出参数
      • c.前端检测页面
      • d.前端训练界面
      • e.前端审计界面(后续更新了)
      • f.前端自学习界面(自学习模式转换)
        • f1.自学习模式
    • 核心代码示例
      • a.代码结构
      • b.数据预处理
      • c.抓包模块
      • d.数据库操作
      • e.全局变量实现

简要

内容说明
使用语言Python
训练数据2800w
支持检测攻击方式26种
深度学习库keras
Loss值0.0023
准确值99.9%
检测方式实时检测
数据库Sqlite
呈现方式CS架构/web页面
附加功能流量自学习训练模式(工作模式:对应正常流量,攻击模式:对应?ATTACK)

示例

a.检测攻击类别

在这里插入图片描述

b.模型训练结果输出参数

在这里插入图片描述

c.前端检测页面

在这里插入图片描述

d.前端训练界面

在这里插入图片描述

e.前端审计界面(后续更新了)

在这里插入图片描述
在这里插入图片描述

f.前端自学习界面(自学习模式转换)

f1.自学习模式

这里解释下:这里有两个模式,开启工作模式后,确保当前流量为正常流量,系统会自动标记并在达到阈值后进行训练,从而增加泛化能力,反之。

在这里插入图片描述

进度条显示内容解释:当前|总进度|训练轮数|源数据
在这里插入图片描述

核心代码示例

a.代码结构

在这里插入图片描述
在这里插入图片描述

b.数据预处理

def __serial(self,debug=0):self.data['Timestamp'] = self.data['Timestamp'].apply(lambda x: self.__timestamp_to_float(x))self.data['Dst_IP'] = self.data['Dst_IP'].apply(self.__ip_to_float)self.data['Src_IP'] = self.data['Src_IP'].apply(self.__ip_to_float)if debug:self.__pull(self.data,"d1.txt")self.data["Label"] = self.data["Label"].apply(self.__label_to_float)columns_to_convert = [col for col in self.data.columns if col not in ['Timestamp', 'Dst_IP', 'Src_IP',"Label"]]for col_name in columns_to_convert:self.data[col_name] = pd.to_numeric(self.data[col_name], errors='coerce')self.data = self.data.apply(pd.to_numeric, errors='coerce')self.data = self.data.fillna(0)inf_values = ~np.isfinite(self.data.to_numpy())self.data[inf_values] = np.nan  # 替换为NaN,您也可以选择替换为其他合理值self.data = self.data.dropna()  # 删除包含缺失值的行self.features = self.data.iloc[:, :-1]self.labels = self.data.iloc[:, -1]  # 标签if debug:self.__pull(self.data,"d2.txt")self.scaler = StandardScaler()self.features = self.scaler.fit_transform(self.features)

c.抓包模块

def packet_to_dict(packet):packet_dict = {}if const.cdist[const.pkg_id] > const.cdist[const.max_pkgn]:const.cdist[const.pkg_id] = 0packet_dict["data"] = packetpacket_dict["id"] = const.cdist[const.pkg_id]const.cdist[const.pkg_id] +=1if IP in packet:packet_dict["src_ip"] = packet[IP].srcpacket_dict["dst_ip"] = packet[IP].dstelse:packet_dict["src_ip"] = ""packet_dict["dst_ip"] = ""return packet_dictdef write_packet_summary(filename, packet_summary):with open(filename, 'a') as file:file.write(packet_summary + '\n')def listen(key,qkey,filename):# 定义回调函数来处理捕获到的数据包def packet_callback(packet):try:packet_info = packet_to_dict(packet)if packet_info != {}:const.cdist[qkey].put(packet_info)except Exception as e:log.Wlog(3,f"listen* {e}")try:timestamp = datetime.now().strftime('%Y-%m-%d %H:%M:%S:%f')[:-3]summary = packet.summary()packet_with_timestamp = f"[{timestamp}] >> {summary}"write_packet_summary(filename, packet_with_timestamp)maintain_packet_summary(filename, max_lines=20)except Exception as e:log.Wlog(3, f"listen* {e}")# return packet.summary()# 定义停止条件函数def stop_condition(packet):# print(const.cdist[key],key)return const.cdist[key]# 开始捕获数据包,使用 stop_filter 参数指定停止条件sniff(iface=const.cdist[const.net_interface],prn=packet_callback,stop_filter=stop_condition)

d.数据库操作

def data_init():# 连接到数据库,如果不存在则创建conn = sqlite3.connect(const.cdist[const.sql_dbp])# 创建游标对象cur = conn.cursor()# 创建数据表cur.execute('''CREATE TABLE IF NOT EXISTS pkg_data (id INTEGER PRIMARY KEY,src_ip TEXT,dst_ip TEXT,data TEXT,time1 INTEGER,label INTEGER)''')cur.close()conn.close()def get_sql_cur():# 连接到数据库,如果不存在则创建conn = sqlite3.connect(const.cdist[const.sql_dbp])# 创建游标对象cur = conn.cursor()return cur,conn
def close_sql(cur,conn):try:cur.close()conn.close()except:pass
# 添加数据pkg_data
def add_data(src_ip, dst_ip, data, time1, label):cur,conn = get_sql_cur()cur.execute("INSERT INTO pkg_data (src_ip, dst_ip, data, time1, label) VALUES (?, ?, ?, ?, ?)", (src_ip, dst_ip, data, time1, label))conn.commit()close_sql(cur,conn )# 删除指定 src_ip 的数据
def delete_data(src_ip):cur,conn = get_sql_cur()cur.execute("DELETE FROM pkg_data WHERE src_ip=?", (src_ip,))conn.commit()close_sql(cur,conn )# 查询指定时间戳范围内的域名及出现次数
def query_data_k1(start_timestamp, end_timestamp):cur,conn = get_sql_cur()cur.execute("SELECT src_ip, COUNT(*) FROM pkg_data WHERE time1 BETWEEN ? AND ? GROUP BY src_ip", (start_timestamp, end_timestamp))rows = cur.fetchall()close_sql(cur,conn )return rows

e.全局变量实现

# const.py
cdist = {}
def _const_key_(key, value):cdist[key] = value# run.py
def init():odir = os.getcwd()signal.signal(signal.SIGINT, quit)                                signal.signal(signal.SIGTERM, quit)const._const_key_(const.log_path, f"{odir}/plug/utils.log")const._const_key_(const.temp_pkg, f"{odir}/plug/temp.pkg")const._const_key_(const.out_csv_d, f"./temp_pkg_data/csv/")const._const_key_(const.out_pcap_d, f"./temp_pkg_data/pcap/")const._const_key_(const.train_info,f"{odir}/plug/train.info")const._const_key_(const.sql_dbp,f"{odir}/plug/pkg_data.db")const._const_key_(const.out_atrain_d,f"./temp_pkg_data/atrain/")const._const_key_(const.Base_h5,f"{odir}/2800w-base.h5")const._const_key_(const.deeps,deep_s.DeepS())const._const_key_(const.AddTrain_Stream_Mode,{"mode":0,"args":"","key":"","label":"","csvp":"","echo":0}) # 0不进行模式,1进行正常流量训练const._const_key_(const.Pkg_DATA_List,[])const._const_key_(const.max_pkgn,2000)const._const_key_(const.MAX_ADDTrain_n,10241)const._const_key_(const.pkg_id,0)const._const_key_(const.log_level, 3)const._const_key_(const.queue1, Queue(maxsize=65535))  # 创建队列data.data_init()f= open(const.cdist[const.train_info], 'w')f.close()CronWork(100,odir)

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

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

相关文章

【嵌入式Linux】阻塞与非阻塞IO为何能降低CPU使用率

本文主要记录嵌入式Linux内核中阻塞与非阻塞IO访问的应用,以及解释了为何二者可以降低CPU使用率 阻塞与非阻塞IO为何能降低CPU使用率 0. 授权须知1. 通俗解释2. 场景描述3. 阻塞IO之———等待队列使用详解4. 非阻塞IO之———poll select4.1 poll 访问4.2 selct 访…

华为L410终端及麒麟KOS上如何安装安卓应用

原文链接:华为L410终端及麒麟KOS上如何安装安卓应用 Hello,大家好啊!随着移动应用的普及,越来越多的用户希望在个人电脑上运行安卓应用,以便更好地整合工作和生活中的信息。特别是在华为L410终端和麒麟KOS操作系统上&a…

在线教程|零门槛部署 Llama 3,70B 版本只占 1.07G 存储空间,新用户免费体验 8B 版本

4 月 18 日,Meta 宣布开源 Llama 3,这个号称「迄今为止最好的开源大模型」一经发布,立刻引爆科技圈! 发布当天恰逢斯坦福大学教授、AI 顶尖专家吴恩达的生日,作为 AI 开源倡导者,他激动地发文表示&#xff…

亿图图示使用教程

亿图图示是一款强大的图形绘制工具,可以用于创建流程图、思维导图、组织结构图等多种类型的图表。下面是一些基本的使用教程: 下载和安装:首先,你需要在官方网站上下载亿图图示的安装包,然后按照提示进行安装。 新建项…

Tesla P4终于在DL580 Gen9上面跑起来了!

正文共:666 字 11 图,预估阅读时间:1 分钟 跌跌撞撞,从Tesla M4终于走到了Tesla P40,显存从4 GB到8 GB,最后再到24 GB,真是不容易。 回顾一下,Tesla M4是最早开始搞的,经…

CI/CD:基于kubernetes的Gitlab搭建

1. 项目目标 (1)熟悉使用k8s环境搭建Gitlab (2)熟练应用Gitlab基本配置 2. 项目准备 2.1. 规划节点 主机名 主机IP 节点规划 k8s-master 10.0.1.1 kube_master k8s-node1 10.0.1.2 kube_node k8s-node2 10.0.1.3 k…

【AI心理咨询测评】一年后,AI心理咨询的路还有多远?——5例AI模型心理咨询能力测评对比

前言 随着GPT横空出世,AI心理健康的市场开始逐渐被开拓。有人联想到线上以GPT作为基础,开发可线上心理咨询的AI,例如国内的聆心智能。然而,这一想法也遭到了无数人的质疑:“连聊天都尚不能很好完成,去做心…

第⑰讲:Ceph集群各组件的配置参数调整

文章目录 1.Ceph集群各组件的配置文件1.1.Ceph各组件配置方式1.2.ceph临时查看、修改配置参数的方法 2.调整Monitor组件的配置参数删除Pool资源池2.1.临时调整配置参数2.2.永久修改配置参数 1.Ceph集群各组件的配置文件 1.1.Ceph各组件配置方式 Ceph集群中各个组件的默认配置…

【Jenkins】持续集成与交付 (一):深入理解什么是持续集成?

🟣【Jenkins】持续集成与交付 (一):深入理解什么是持续集成? 1、软件开发生命周期与持续集成2、 持续集成的流程3、持续集成的好处4、Jenkins的应用实践5、结语💖The Begin💖点点关注,收藏不迷路💖 1、软件开发生命周期与持续集成 软件开发生命周期(SDLC)是指软…

C语言:项目实践(贪吃蛇)

前言: 相信大家都玩过贪吃蛇这款游戏吧,贪吃蛇是久负盛名的游戏,它也和俄罗斯方块,扫雷等游戏位列经典游戏的行列,那贪吃蛇到底是怎么实现的呢? 今天,我就用C语言带着大家一起来实现一下这款游戏…

微软如何打造数字零售力航母系列科普04 - 微软联合Adobe在微软365应用程序中工作时推出新的生成式AI功能

微软和Adobe正在合作,将情境营销见解和工作流程引入微软Copilot,以提供生成的人工智能功能,使营销人员和营销团队能够在自然的工作流程中实现更多目标。 这些新的集成功能将在生产力和协作工具(如Outlook、Teams和Word&#xff0…

【事业单位专场】联考、省市统考、单独招考

一、考编概述 1、事业单位类别 事业单位是指由国家出资或委托管理的公共机构,其主要职能是为社会提供公共服务。在中国,事业单位覆盖了科研、教育、文化和卫生等多个领域,并且有着不同的类型。以下是一些主要的分类: 教育事业单…

NLP(10)--TFIDF优劣势及其应用Demo

前言 仅记录学习过程,有问题欢迎讨论 TF*IDF: 优势: 可解释性好 可以清晰地看到关键词 即使预测结果出错,也很容易找到原因 计算速度快 分词本身占耗时最多,其余为简单统计计算 对标注数据依赖小 可以使用无标注语…

【状态机dp 状态压缩 分组】1994. 好子集的数目

本文涉及知识点 动态规划汇总 动态规划 状态机dp 状态压缩 分组 LeetCode1994. 好子集的数目 给你一个整数数组 nums 。如果 nums 的一个子集中,所有元素的乘积可以表示为一个或多个 互不相同的质数 的乘积,那么我们称它为 好子集 。 比方说&#xff…

离散数学之命题逻辑思维导图+大纲笔记(预习、期末复习,考研,)

大纲笔记: 命题逻辑的基本概念 命题与联结词 命题 命题是推理的基本单位 真命题,假命题 特征 陈述句 唯一的真值 是非真即假的陈述句 非命题 疑问句 祈使句 可真可假 悖论 模糊性 三个基本概念 复合命题 真值取决于原子命题的值和逻辑联结词 原子命题 逻…

基于SSM的考研助手系统(有报告)。Javaee项目。ssm项目。

演示视频: 基于SSM的考研助手系统(有报告)。Javaee项目。ssm项目。 项目介绍: 采用M(model)V(view)C(controller)三层体系结构,通过Spring Spri…

【Java】图书管理系统 介绍与实现

欢迎浏览高耳机的博客 希望我们彼此都有更好的收获 感谢三连支持! 1.介绍 图书馆作为知识的殿堂和学术的中心,其管理系统不仅是图书馆管理的必备工具,更是为用户提供优质、高效服务的重要保障,促进了知识的传播和学术的发展。随着…

基于FPGA的数字信号处理(6)--如何确定Verilog表达式的符号

前言 尽管signed语法的使用能带来很多便利,但同时也给表达式的符号确定带来了更多的不确定性。比如一个有符号数和一个无符号数的加法/乘法结果是有符号数还是无符号数?一个有符号数和一个无符号数的比较结果是有符号数还是无符号数?等等。接…

力扣刷题Day2

题目链接: 24. 两两交换链表中的节点 - 力扣(LeetCode) 效果: 解题思路: 给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。 注意不可以只是单纯的改变节点内部的值,而…

《QT实用小工具·四十七》可交互的创意动态按钮

1、概述 源码放在文章末尾 该项目实现了可交互的创意动态按钮,包含如下功能: 所有颜色自定义 鼠标悬浮渐变 两种点击效果:鼠标点击渐变 / 水波纹动画(可多层波纹叠加) 额外鼠标移入/移出/按下/弹起的实时/延迟共8种事…