基于深度学习检测恶意流量识别框架(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] = 0
    packet_dict["data"] = packet
    packet_dict["id"] = const.cdist[const.pkg_id]
    const.cdist[const.pkg_id] +=1
    if IP in packet:
        packet_dict["src_ip"] = packet[IP].src
        packet_dict["dst_ip"] = packet[IP].dst
    else:
        packet_dict["src_ip"] = ""
        packet_dict["dst_ip"] = ""
    return packet_dict

def 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)

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Spring管理第三方依赖

在开发中,我们常需要根据业务需求导入我们需要的第三方依赖包,本文主要以导入druid数据库来连接池为案例讲解有关spring管理第三方依赖 目录 纯注解文件注入 1.在pom.xml中导入依赖 2.在com.lcyy包下建立一个config包用于配置类的实现 3.在config包下…

2024年第十五届蓝桥杯江苏省赛回顾

呜呜呜~~~ 我在考完了后感觉自己直接炸了:好多学到的算法都没有用上,几乎所有的题目都是暴力的。。。 最后十几分钟对于一道dp算法终于有思路了,但是。。匆匆忙忙之间就是没有调试出来。(还是交了一道暴力[旋风狗头]直接哭死~~&…

微信小程序开发核心:样式,组件,布局,矢量图标

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,…

Zynq 7000 系列之启动模式—NAND启动

NAND启动是一种使用NAND闪存进行设备启动的方式。NAND闪存是一种非易失性存储设备,广泛用于嵌入式系统、计算机和其他电子设备中。由于NAND闪存具有高速读写和较高的存储密度等特点,使得NAND启动成为了一种高效且常用的启动方式。 1 特点 NAND启动具有…

【Spring】Spring中AOP的简介和基本使用,SpringBoot使用AOP

📝个人主页:哈__ 期待您的关注 一、AOP简介 AOP的全称是Aspect-Oriented Programming,即面向切面编程(也称面向方面编程)。它是面向对象编程(OOP)的一种补充,目前已成为一种比较成…

Milvus Cloud 向量数据库Reranker成本比较和使用场景

成本比较:向量检索 v.s. Cross-encoder Reranker v.s. 大模型生成 虽然 Reranker 的使用成本远高于单纯使用向量检索的成本,但它仍然比使用 LLM 为同等数量文档生成答案的成本要低。在 RAG 架构中,Reranker 可以筛选向量搜索的初步结果,丢弃掉与查询相关性低的文档,从而有…

电商技术揭秘三十九:电商智能风控技术架构设计

相关系列文章 电商技术揭秘相关系列文章合集(1) 电商技术揭秘相关系列文章合集(2) 电商技术揭秘二十八:安全与合规性保障 电商技术揭秘二十九:电商法律合规浅析 电商技术揭秘三十:知识产权保…

简单分享,豆瓣小组,可能被你忽视的获取精准流量渠道!

⾖瓣⼩组:精准流量的隐藏宝藏 探索互联网世界的每一个角落,你会发现总有那么一些被忽视的宝藏,等待着被发现者的光临。今天,我要和大家分享的这个宝藏,就是⾖瓣⼩组——一个你可能未曾注意到的精准流量渠道。 ⾖瓣平…

2024最新UI发卡盗U/支持多语言/更新UI界面/支持多个主流钱包

本文来自:2024最新UI发卡盗U/支持多语言/更新UI界面/支持多个主流钱包 - 源码1688 应用介绍 简介: 2024最新UI发卡盗U/支持多语言/更新UI界面/支持多个主流钱包 自行检查后门,最好是部署智能合约后用合约地址来授权 包含转账支付页面盗U授…

蓝网科技临床浏览系统 deleteStudy SQL注入漏洞复现(CVE-2024-4257)

0x01 产品简介 蓝网科技临床浏览系统是一个专门用于医疗行业的软件系统,主要用于医生、护士和其他医疗专业人员在临床工作中进行信息浏览、查询和管理。 0x02 漏洞概述 蓝网科技临床浏览系统 deleteStudy接口处SQL注入漏洞,未经身份验证的恶意攻击者利用 SQL 注入漏洞获取…

HEVC/H.265视频编解码学习笔记–框架及块划分关系

前言 由于本人在学习视频的过程中,觉得分块单元太多搞不清楚其关系,因此本文着重记录这些分块单元的概念以及关联。 一、框架 视频为一帧一帧的图像,其编码的主要核心是压缩空间以及时间上的冗余。因此,视频编码有帧内预测和帧间…

TCP协议在物联网中实战

一、TCP协议介绍 网上对TCP协议介绍众多,本人按照自己的理解简单介绍一下。 TCP(Transmission Control Protocol, 传输控制协议)是一种面向连接的、可靠的、基于字节流的传输控制层通信协议。 1.1 协议机制 1.1.1 三次握手 &…

面试重点1:打开网页点击URL,返回页面内容,从网络协议层面讲解一下

在这种场景下,从网络协议层面来讲解打开网页并点击 URL 的过程可以大致分为以下几个步骤: 1. DNS 解析 当你在浏览器中输入一个 URL(例如 https://www.example.com),首先浏览器会进行 DNS 解析,将域名解析…

前端VUE项目中使用async()用法是为什么?能不用吗?

使用 async 关键字来定义一个函数主要有几个原因: 支持 await 关键字: async 函数允许你在其中使用 await 关键字,这使得你可以在不阻塞程序执行的情况下,等待一个异步操作(如网络请求、文件读写等)的完成。…

JAVA基础---Stream流

Stream流出现背景 背景 在Java8之前,通常用 fori、for each 或者 Iterator 迭代来重排序合并数据,或者通过重新定义 Collections.sorts的 Comparator 方法来实现,这两种方式对 大数量系统来说,效率不理想。 Java8 中添加了一个…

Python量化炒股的获取数据函数—get_concept()

查询股票所属的概念板块函数get_concept(),利用该函数可以查询一只或多只股票所属的概念板块,其语法格式如下: get_concept(security, dateNone)security:标的代码。类型为字符串,形式如‘000001.XSHE’,或…

邦注科技 模具清洗机 干冰清洗机 干冰清洗设备原理介绍

干冰清洗机,这款神奇的清洁设备,以干冰颗粒——固态的二氧化碳,作为其独特的清洁介质。它的工作原理可谓独具匠心,利用高压空气将干冰颗粒推送至超音速的速度,犹如一颗颗银色的流星,疾速喷射至待清洗的物体…

攻防世界XCTF-WEB入门12题解题报告

WEB入门题比较适合信息安全专业大一学生,难度低上手快,套路基本都一样 需要掌握: 基本的PHP、Python、JS语法基本的代理BurpSuite使用基本的HTTP请求交互过程基本的安全知识(Owasp top10) 先人一步,掌握W…

基准测试函数表达式--单峰函数与多峰函数

⚠申明: 未经许可,禁止以任何形式转载,若要引用,请标注链接地址。 全文共计3077字,阅读大概需要3分钟 🌈更多学习内容, 欢迎👏关注👀【文末】我的个人微信公众号&#xf…

SSH和Telnet的区别

SSH(Secure Shell)和Telnet是两种网络协议,用于远程登录和管理计算机系统。但是它们有以下几个主要的区别: 安全性:SSH是一种加密的协议,可以向服务器传输加密的数据,以防止数据被窃听或篡改。而…