基于深度学习检测恶意流量识别框架(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.hqwc.cn/news/671029.html

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

相关文章

Python安装以及环境配置

目录 一、下载安装包二级目录三级目录 一、下载安装包 方式网址Python官网python.org镜像下载地址Download pythonpycharmDownload PyCharm https://blog.csdn.net/sun80760/article/details/135256627 二级目录 三级目录

C#连接S7-200 smart通讯测试

honeytree 一、编程环境 VS2022软件,选择windows窗体应用(.NET FrameWork):​博途TIA/WINCC社区VX群 ​博途TIA/WINCC社区VX群 添加NuGet程序包;S7netplus 二、引用http://S7.net 三、建立PLC链接 S7-200smart和…

Window如何运行sh文件以及wget指令

Git下载 官网链接如下:https://gitforwindows.org/ 安装就保持一路无脑安装就行,不需要改变安装过程中的任何一个选项。 配置Git 切刀桌面,随便右击屏幕空白处,点open Git Bash here 把这行复制过去,回车&#xff1…

Linux第三节--常见的指令介绍集合(持续更新中)

点赞关注不迷路!,本节涉及初识Linux第三节,主要为常见的几条指令介绍。 如果文章对你有帮助的话 欢迎 评论💬 点赞👍🏻 收藏 ✨ 加关注👀 期待与你共同进步! Linux下基本指令 1. man指令 Linu…

io (fscanf fprintf)

20 #include <sys/un.h>21 typedef struct stu22 {23 char name[16];24 int age;25 double score;26 }stu;27 int main(int argc, const char *argv[])28 {29 /* 有如下结构体30 31 申请该结构体数组&#xff0c;容量为5&#xff0c;初始化5个学生的信息32 …

Flink窗口理论到实践 | 大数据技术

⭐简单说两句⭐ ✨ 正在努力的小叮当~ &#x1f496; 超级爱分享&#xff0c;分享各种有趣干货&#xff01; &#x1f469;‍&#x1f4bb; 提供&#xff1a;模拟面试 | 简历诊断 | 独家简历模板 &#x1f308; 感谢关注&#xff0c;关注了你就是我的超级粉丝啦&#xff01; &a…

奶爸预备 |《P.E.T.父母效能训练:让亲子沟通如此高效而简单:21世纪版》 / 托马斯·戈登——读书笔记

目录 引出致中国读者译序前言第1章 父母总是被指责&#xff0c;而非受训练第2章 父母是人&#xff0c;不是神第3章 如何听&#xff0c;孩子才会说&#xff1a;接纳性语言第4章 让积极倾听发挥作用第5章 如何倾听不会说话的婴幼儿第6章 如何听&#xff0c;孩子才肯听第8章 通过改…

光端机(2)——光纤通信学习笔记九

学习笔记里面只关注基本原理和概念&#xff0c;复杂的公式和推导都没有涉及 光端机 光发射机 作用&#xff1a;实现电光转换。将来自电端机的电信号对光源发出的光波进行调制&#xff0c;然后将调制好的光信号耦合到光线中传输。 基本性能要求 1.合适的发光波长&#xff08;光…

Kalign 3:大型数据集的多序列比对

之前一直用的是muscle&#xff0c;看到一个文章使用了Kalign&#xff0c;尝试一下吧 安装 wget -c https://github.com/TimoLassmann/kalign/archive/refs/tags/v3.4.0.tar.gz tar -zxvf v3.4.0.tar.gz cd kalign-3.4.0 mkdir build cd build cmake .. make make test su…

“AI 程序员”席卷而来,吴恩达四步设计让 Agent 提前超越 GPT-5

作者 | 王启隆 出品 | AI 科技大本营&#xff08;ID&#xff1a;rgznai100&#xff09; 有不少科幻片描绘了这样的世界&#xff1a;数字实体执行一座城市的所有任务&#xff0c;人工智能可以与数字世界甚至物理世界的一切事物进行交互&#xff0c;不断学习和适应新环境&#xf…

安卓应用开发(一):工具与环境

开发工具 Android Studio&#xff0c;用于开发 Android 应用的官方集成开发环境 (IDE)。包括以下功能&#xff1a; 基于Gradle的构建系统 gradle是一个项目构建工具&#xff0c;将源工程打包构建为apk 安卓模拟器统一环境代码编辑模拟器实时更新Github集成Lint功能&#xff0…

AIGC-音频生产十大主流模型技术原理及优缺点

音频生成(Audio Generation)指的是利用机器学习和人工智能技术&#xff0c;从文本、语音或其他源自动生成音频的过程。 音频生成行业是AIGC技术主要渗透的领域之一。AI音频生成行业是指利用人工智能技术和算法来生成音频内容的领域。按照输入数据类型不同可以分为&#xff1a;根…