【网络安全】【深度学习】【入侵检测】SDN模拟网络入侵攻击并检测,实时检测,深度学习【一】

文章目录

    • 1. 前言
    • 2. Mininet 和 Ryu 的区别
      • 2.1 Mininet
      • 2.2 Ryu
      • 2.3 总结
    • 3. 模拟攻击
      • 3.1 环境准备
      • 3.2 创建 Mininet 网络拓扑
      • 3.2 启动 Ryu 控制器
      • 3.3 模拟网络攻击
      • 3.4 捕获流量
    • 4. 实时异常检测
      • 4.1 在 Ryu 控制器中
      • 4.2 在 h2 机器上的实验结果
      • 4.3 深度学习模型部署上h2机器
    • 帮助、咨询

1. 前言

做了很多入侵检测的深度学习模型:

【深度学习】Transformer分类器,CICIDS2017,入侵检测,随机森林、RFE、全连接神经网络

https://qq742971636.blog.csdn.net/article/details/137994375

https://qq742971636.blog.csdn.net/article/details/137873472

有时候有的同学想部署到环境中,模拟攻击,来验证一下模型行不行,我也来试试。
使用 Mininet 模拟网络环境,使用 Ryu 作为 SDN 控制器来管理模拟网络中的设备和流量。
部署深度学习模型在其中做实时检测。

2. Mininet 和 Ryu 的区别

Mininet 和 Ryu 是两个不同的工具,分别用于不同的网络虚拟化和软件定义网络 (SDN) 任务。以下是它们的主要区别:

2.1 Mininet

  1. 功能: Mininet 是一个网络仿真器,用于创建和测试虚拟网络拓扑。它允许用户在单台计算机上模拟完整的网络,包括主机、交换机、链路等。
  2. 用例: Mininet 常用于研究和教学,帮助用户快速构建和测试复杂的网络环境,而无需实际硬件。它也用于开发和调试网络应用和协议。
  3. 实现: Mininet 使用 Linux 容器 (如 Network Namespaces 和 Open vSwitch) 来创建虚拟网络环境。用户可以通过 Python 脚本定义网络拓扑。
  4. 交互: 用户可以使用 Mininet 的命令行接口 (CLI) 或 Python API 来创建和操作网络拓扑。

2.2 Ryu

  1. 功能: Ryu 是一个开源的 SDN 控制器框架,用于开发和管理 SDN 控制器。它提供了用于编写控制平面应用程序的工具和库。
  2. 用例: Ryu 用于实现 SDN 控制器,以管理和控制网络设备的行为。它支持 OpenFlow 协议,可以与支持 OpenFlow 的交换机进行通信。
  3. 实现: Ryu 是用 Python 编写的,并且提供了丰富的 API 和库,便于开发者编写自定义的网络控制逻辑和应用。
  4. 交互: 开发者使用 Ryu 来编写 SDN 应用程序,通过 Ryu 控制器与网络设备进行通信和管理。

2.3 总结

  • Mininet: 主要用于创建和模拟虚拟网络拓扑,适合于网络实验和研究。
  • Ryu: 主要用于开发和运行 SDN 控制器,用于管理和控制网络设备。

这两个工具通常可以结合使用:使用 Mininet 模拟网络环境,使用 Ryu 作为 SDN 控制器来管理模拟网络中的设备和流量。

3. 模拟攻击

Mininet 可以结合 SDN(软件定义网络)控制器来模拟网络攻击。这种组合允许您创建一个虚拟网络环境,在其中可以通过 SDN 控制器动态管理和监控网络流量,同时生成和检测网络攻击。以下是一个详细的示例流程,展示如何使用 Mininet 和 SDN 控制器(例如 Ryu)来模拟网络攻击并检测它们。

3.1 环境准备

Ubuntu22的VM虚拟机。

Python3.8才行,看这里教程使用Python3.8虚拟环境:https://qq742971636.blog.csdn.net/article/details/139566288

  1. 安装 Mininet:
    在 Ubuntu 上,您可以通过以下命令安装 Mininet:

    sudo apt-get update
    
    sudo apt-get install mininet
    pip install mininet # 虚拟环境python3.8中安装
    
    
  2. 安装 Ryu:
    Ryu 是一个开源的 SDN 控制器,可以通过 pip 安装:

    sudo apt-get install python3-pip
    sudo apt install gcc libffi-dev libssl-dev libxml2-dev libxslt1-dev zlib1g-dev -y
    pip3 install eventlet==0.30.2 ryu==4.34
    
  3. 安装 scapy 和 tcpdump:
    scapy 是一个用于生成和处理网络包的 Python 库,而 tcpdump 是一个流行的网络包捕获工具:

    sudo apt-get install python3-scapy tcpdump
    pip3 install scapy -i https://pypi.tuna.tsinghua.edu.cn/simple
    

3.2 创建 Mininet 网络拓扑

创建一个简单的 Mininet 网络拓扑,并启动 Ryu 控制器:

vim simple_topo.py
from mininet.net import Mininet
from mininet.node import RemoteController
from mininet.cli import CLI
from mininet.log import setLogLevel

def simpleTopo():
    net = Mininet(controller=RemoteController)
    
    print("*** Creating nodes")
    h1 = net.addHost('h1')
    h2 = net.addHost('h2')
    s1 = net.addSwitch('s1')
    c0 = net.addController('c0', controller=RemoteController, ip='127.0.0.1', port=6633)

    print("*** Creating links")
    net.addLink(h1, s1)
    net.addLink(h2, s1)

    print("*** Starting network")
    net.start()
    
    print("*** Running CLI")
    CLI(net)
    
    print("*** Stopping network")
    net.stop()

if __name__ == '__main__':
    setLogLevel('info')
    simpleTopo()

这个代码创建了一个简单的 Mininet 拓扑,并使用一个远程 SDN 控制器来管理网络。以下是代码的详细说明以及对应的拓扑图。

  1. 创建 Mininet 网络:

    • Mininet(controller=RemoteController):创建一个 Mininet 网络,并指定使用远程控制器。
  2. 创建节点:

    • h1 = net.addHost('h1'):添加主机 h1。
    • h2 = net.addHost('h2'):添加主机 h2。
    • s1 = net.addSwitch('s1'):添加交换机 s1。
    • c0 = net.addController('c0', controller=RemoteController, ip='127.0.0.1', port=6633):添加一个远程控制器 c0,控制器运行在本地机器上(IP 地址为 127.0.0.1),使用端口 6633。
  3. 创建链接:

    • net.addLink(h1, s1):将主机 h1 连接到交换机 s1。
    • net.addLink(h2, s1):将主机 h2 连接到交换机 s1。
  4. 启动网络:

    • net.start():启动 Mininet 网络。
  5. 运行命令行界面 (CLI):

    • CLI(net):启动 Mininet 的命令行界面,可以在其中输入命令来管理网络。
  6. 停止网络:

    • net.stop():停止 Mininet 网络。

拓扑图

以下是这个代码创建的网络拓扑图:

 +--------+      +--------+
 |  h1    |------|  s1    |------|  h2    |
 +--------+      +--------+      +--------+
                     |
                     |
                +---------+
                |   c0    |  (Remote SDN Controller)
                +---------+
  • h1h2 是两台主机。
  • s1 是一个交换机。
  • c0 是一个远程 SDN 控制器,管理交换机 s1

在这个拓扑中,交换机 s1 由远程控制器 c0 管理,主机 h1h2 通过交换机 s1 进行通信。这个简单的拓扑结构可以用于模拟和测试网络配置、流量管理和攻击检测等任务。

保存上述代码为 simple_topo.py,并使用以下命令运行:

sudo python3 simple_topo.py

启动后得到cli端:
在这里插入图片描述

3.2 启动 Ryu 控制器

创建一个简单的 Ryu 控制器脚本,例如 simple_switch.py,它实现一个基本的交换机功能:

vim simple_switch.py
from ryu.base import app_manager
from ryu.controller import ofp_event
from ryu.controller.handler import MAIN_DISPATCHER, CONFIG_DISPATCHER
from ryu.controller.handler import set_ev_cls
from ryu.ofproto import ofproto_v1_3
from ryu.lib.packet import packet
from ryu.lib.packet import ethernet

class SimpleSwitch13(app_manager.RyuApp):
    OFP_VERSIONS = [ofproto_v1_3.OFP_VERSION]

    def __init__(self, *args, **kwargs):
        super(SimpleSwitch13, self).__init__(*args, **kwargs)
        self.mac_to_port = {}

    @set_ev_cls(ofp_event.EventOFPSwitchFeatures, CONFIG_DISPATCHER)
    def switch_features_handler(self, ev):
        datapath = ev.msg.datapath
        ofproto = datapath.ofproto
        parser = datapath.ofproto_parser

        match = parser.OFPMatch()
        actions = [parser.OFPActionOutput(ofproto.OFPP_CONTROLLER, ofproto.OFPCML_NO_BUFFER)]
        self.add_flow(datapath, 0, match, actions)

    def add_flow(self, datapath, priority, match, actions, buffer_id=None):
        ofproto = datapath.ofproto
        parser = datapath.ofproto_parser

        inst = [parser.OFPInstructionActions(ofproto.OFPIT_APPLY_ACTIONS, actions)]
        if buffer_id:
            mod = parser.OFPFlowMod(datapath=datapath, buffer_id=buffer_id,
                                    priority=priority, match=match,
                                    instructions=inst)
        else:
            mod = parser.OFPFlowMod(datapath=datapath, priority=priority,
                                    match=match, instructions=inst)
        datapath.send_msg(mod)

    @set_ev_cls(ofp_event.EventOFPPacketIn, MAIN_DISPATCHER)
    def _packet_in_handler(self, ev):
        msg = ev.msg
        datapath = msg.datapath
        ofproto = datapath.ofproto
        parser = datapath.ofproto_parser
        in_port = msg.match['in_port']

        pkt = packet.Packet(msg.data)
        eth = pkt.get_protocols(ethernet.ethernet)[0]

        dst = eth.dst
        src = eth.src

        dpid = datapath.id
        self.mac_to_port.setdefault(dpid, {})

        self.mac_to_port[dpid][src] = in_port

        if dst in self.mac_to_port[dpid]:
            out_port = self.mac_to_port[dpid][dst]
        else:
            out_port = ofproto.OFPP_FLOOD

        actions = [parser.OFPActionOutput(out_port)]

        if out_port != ofproto.OFPP_FLOOD:
            match = parser.OFPMatch(in_port=in_port, eth_dst=dst)
            self.add_flow(datapath, 1, match, actions)

        data = None
        if msg.buffer_id == ofproto.OFP_NO_BUFFER:
            data = msg.data

        out = parser.OFPPacketOut(datapath=datapath, buffer_id=msg.buffer_id,
                                  in_port=in_port, actions=actions, data=data)
        datapath.send_msg(out)

保存上述代码为 simple_switch.py,并使用以下命令运行:

ryu-manager simple_switch.py

这个 Ryu 控制器应用程序实现了一个基本的学习交换机功能。当交换机收到一个未知目标 MAC 地址的数据包时,会将该数据包发送给控制器。控制器会首先检查已知的 MAC 地址与端口的映射关系。如果目标 MAC 地址已知,控制器会将数据包转发到对应的端口;如果目标 MAC 地址未知,控制器会将数据包泛洪到所有端口,确保目标主机能够收到数据包并回应。通过这种方式,交换机逐渐学习并建立起网络中各个设备的 MAC 地址与端口的映射关系,从而优化后续的数据包转发过程。

启动成功这样:

在这里插入图片描述

3.3 模拟网络攻击

安装xterm:

sudo apt-get install xterm

进入h1机器:

mininet> xterm h1

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

在 Mininet CLI 中,使用 h1 主机对 h2 主机进行攻击。例如,使用 scapy 生成 SYN Flood 攻击:

python3.8 -c "
from scapy.all import *
target_ip = '10.0.0.2'
target_port = 80
while True:
    send(IP(dst=target_ip)/TCP(dport=target_port,flags='S'),verbose=0)
"

3.4 捕获流量

进入h2机器:

mininet> xterm h2

h2 主机上捕获流量,并保存为 pcap 文件:

tcpdump -w attack_traffic.pcap

在这里插入图片描述
可以用这个指令看一下pcap文件大概内容:

tcpdump -vr attack_traffic.pcap

4. 实时异常检测

我开发了一个基于随机森林的入侵检测模型,利用了CICIDS数据进行训练。现在,我想要实现在 h2 机器上进行实时流量包检测,并利用模型推断出其中的异常流量。

4.1 在 Ryu 控制器中

一种方法是在 Ryu 控制器中添加代码以监测流量模式。举例来说,你可以创建一个模块来检测异常流量,并在检测到攻击时采取相应措施。虽然这种监测方法是可行的,但我更倾向于寻找其他方案。

4.2 在 h2 机器上的实验结果

在之前的实验中,我模拟了 h1 机器向 h2 机器发送 SYN 泛洪攻击。结果显示,h2 机器成功接收到了这些攻击流量。通过使用抓包工具执行指令 tcpdump -w attack_traffic.pcap,我捕获了相关信息。

让我们回顾一下网络拓扑图:

 +--------+      +--------+
 |  h1    |------|  s1    |------|  h2    |
 +--------+      +--------+      +--------+
                     |
                     |
                +---------+
                |   c0    |  (远程 SDN 控制器)
                +---------+

在 h2 机器上执行以下命令查看网络接口:

ifconfig

结果显示网络接口为 h2-eth0

h2-eth0 网络接口

接着,我编写了以下 Python 代码来抓取 h2 机器的流量,并对其进行进一步的检测与分析:

from scapy.all import *

def packet_callback(packet):
    if packet.haslayer(IP) and packet.haslayer(TCP):
        src_ip = packet[IP].src
        dst_ip = packet[IP].dst
        src_port = packet[TCP].sport
        dst_port = packet[TCP].dport
        flags = packet[TCP].flags
        
        print(f"IP: {src_ip} -> {dst_ip}, TCP Port: {src_port} -> {dst_port}, Flags: {flags}")

sniff(iface="h2-eth0", prn=packet_callback, store=0)

通过这段代码,我成功捕获到了 SYN 攻击的流量:

捕获的 SYN 攻击流量

4.3 深度学习模型部署上h2机器

这里嘛,看这个:
https://qq742971636.blog.csdn.net/article/details/139611644

帮助、咨询

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

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

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

相关文章

如何获知lib cell的用途

我正在「拾陆楼」和朋友们讨论有趣的话题,你⼀起来吧? 拾陆楼知识星球入口 除了databook可以查询cell的用途外,还可以通过在pr工具中获取lib cell属性的方法知晓其用途。 ICC2: report_attribute -app -class lib_cell SDFFXXX 通过看is_…

【大数据】计算引擎:Spark核心概念

目录 前言 1.什么是Spark 2.核心概念 2.1.Spark如何拉高计算性能 2.2.RDD 2.3.Stage 3.运行流程 前言 本文是作者大数据系列中的一文,专栏地址: https://blog.csdn.net/joker_zjn/category_12631789.html?spm1001.2014.3001.5482 该系列会成体…

【递归、搜索与回溯】综合练习一

综合练习一 1.找出所有子集的异或总和再求和2.全排列 II3.电话号码的字母组合4.括号生成 点赞👍👍收藏🌟🌟关注💖💖 你的支持是对我最大的鼓励,我们一起努力吧!😃😃 1.找…

2024年【四川省安全员C证】免费试题及四川省安全员C证考试技巧

题库来源:安全生产模拟考试一点通公众号小程序 四川省安全员C证免费试题是安全生产模拟考试一点通总题库中生成的一套四川省安全员C证考试技巧,安全生产模拟考试一点通上四川省安全员C证作业手机同步练习。2024年【四川省安全员C证】免费试题及四川省安…

linux搭建sftp服务

1. 添加用户及用户组 使用 groupadd sftpgroup 添加sftpgroup 用户组; 使用useradd -G sftpgroup -s /sbin/nologin cmssftp给sftpgroup 添加cmssftp用户; 使用passwd cmssftp给用户cmssftp进行设置密码(默认为:654321)。具体如下图所示: 2.…

云原生Kubernetes系列项目实战-k8s集群+高可用负载均衡层+防火墙

一、Kubernetes 区域可采用 Kubeadm 方式进行安装: 名称主机部署服务master192.168.91.10docker、kubeadm、kubelet、kubectl、flannelnode01192.168.91.11docker、kubeadm、kubelet、kubectl、flannelnode02192.168.91.20docker、kubeadm、kubelet、kubectl、flan…

文心一言 VS 讯飞星火 VS chatgpt (280)-- 算法导论20.4 1题

一、假设 CONNECTED-COMPONENTS 作用于一个无向图 G(V,E),这里V{a,b,c,d,e,f,g,h,i,j,k},且 E 中的边以如下的顺序处理:(d…

在Lua解释器中注册自定义函数库

本文目录 1、引言2、注册原理3、实例4、程序验证 文章对应视频教程: 暂无,可以关注我的B站账号等待更新。 点击图片或链接访问我的B站主页~~~ 1、引言 在现代软件开发中,Lua因其轻量级、高效和可嵌入性而被广泛使用。作为一种灵活的脚本语言…

使用uniapp设置tabbar的角标和移除tabbar的角标

使用场景描述 在一进入到小程序的时候就要将用户在购物车中添加的商品总数&#xff0c;要以角标的形式显示在tababr中。 代码实现 //index.vue<script setup> import { onLoad } from dcloudio/uni-apponLoad(()>{uni.setTabBarBadge({index: 1,text: 5 //为了实现…

电商开发者必读:微店商品详情API接口全解析

微店作为一个流行的电商平台&#xff0c;提供了丰富的API接口供开发者使用。详细介绍商品详情API接口的使用方法&#xff0c;帮助开发者快速获取商品信息&#xff0c;实现商品信息的自动化展示和管理。 1. 接口简介 微店商品详情API接口允许开发者通过商品ID获取商品的详细信…

如何使用 Midjourney换脸,将一个人面部复制并粘贴到任意人身上

嘿&#xff0c;想不想将一个人的面部随意粘贴到任意人身上&#xff1f;现在开始教学如何使用 Discord 中的Midjourney Bot 实现&#xff0c;这就是“COPY A FACE”这个超酷的功能&#xff0c;它能帮你一键把脸贴到任何图片上。用到的是一个叫“InsightFace”的开源Discord机器人…

防止数据泄露的软件哪家强?四款防泄密软件助您安心守护企业机密

在信息化时代&#xff0c;企业数据安全成为了关乎生死存亡的关键因素。 数据泄露事件频发&#xff0c;选择一款高效可靠的防泄密软件变得尤为重要。 以下是六款市场上备受推崇的防泄密软件&#xff0c;它们以各自的优势为企业数据安全保驾护航。 1. 域智盾软件 软件以其全面…

Threejs-09、贴图的加载与环境遮蔽强度设置

1、创建文理加载器 let textureLoader new THREE.TextureLoader();2、加载贴图 // 加载文理 let texture textureLoader.load("./img/image.png") // 加载ao贴图 let aoMap textureLoader.load("./img/image.png");3、创建一个平面 let planeGeomet…

预告|博睿数据将受邀出席GOPS全球运维大会北京站!

GOPS全球运维大会作为国内外运维领域最具影响力的技术盛会之一&#xff0c;旨在汇聚全球运维精英&#xff0c;分享运维领域的前沿技术、实践经验与创新理念。6月28日&#xff0c;博睿数据&#xff08;bonree.com&#xff0c;股票代码688229&#xff09;将受邀出席第二十三届 GO…

cdh中的zookeeper怎么配置zoo.cfg

你手动改了zoo.cfg目录是不会生效的&#xff0c;因为是cdh在管控&#xff0c;所以只能通过cdh修改。 首先打开cdh。 xxx:7180 点击zookeeper 选配置&#xff0c;然后选高级 在右边找&#xff0c;有一个就是zoo.cfg&#xff0c;可以点击右边的感叹号。然后在里面编辑的就会直…

ChatGPT中文镜像网站分享

ChatGPT 是什么&#xff1f; ChatGPT 是 OpenAI 开发的一款基于生成预训练变换器&#xff08;GPT&#xff09;架构的大型语言模型。主要通过机器学习生成文本&#xff0c;能够执行包括问答、文章撰写、翻译等多种文本生成任务。截至 2023 年初&#xff0c;ChatGPT 的月活跃用户…

【皇帝的新衣】虚拟小组长的团队管理

团队有时候会需要设立虚拟小组长来分组帮忙管理&#xff0c;那么&#xff0c;虚拟小组的负责人应当怎么做好管理动作&#xff1f; 目前很多大厂追求团队管理上的扁平化&#xff0c;但真正有实职的领导们一般管理30人数&#xff0c;此时需要一个虚拟小组长来分组帮忙管理。 一、…

C# 使用 webview2 嵌入网页

需求&#xff1a;C#客户端程序, 窗口里嵌入一个web网页&#xff0c;可通过URL跳转的那种。并且&#xff0c;需要将登录的身份验证信息&#xff08;token&#xff09;设置到请求头里。 核心代码如下&#xff1a; // 打开按钮的点击事件 private void openBtn_Click(object sen…

Foundation Model 通用大模型的评测体系

随着大模型评测需求逐渐增加,相关研究也进一步深入。大模型相比传统模 型&#xff0c;泛化能力更强、灵活性更高、适应性更广&#xff0c;多任务、多场景&#xff0c;评测维度、评测指标和数 据集更复杂&#xff0c;面向大模型的评估方法、评测基准、测试集成为新的研究课题。 …

不想搭集群,直接用spark

为了完成布置的作业&#xff0c;需要用到spark的本地模式&#xff0c;根本用不到集群&#xff0c;就不想搭建虚拟机&#xff0c;hadoop集群啥的&#xff0c;很繁琐&#xff0c;最后写作业还用不到集群&#xff08;感觉搭建集群对于我完成作业来说没有什么意义&#xff09;&…