【网络安全】【深度学习】【入侵检测】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 updatesudo 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 setLogLeveldef 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 ethernetclass 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.datapathofproto = datapath.ofprotoparser = datapath.ofproto_parsermatch = 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.ofprotoparser = datapath.ofproto_parserinst = [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.msgdatapath = msg.datapathofproto = datapath.ofprotoparser = datapath.ofproto_parserin_port = msg.match['in_port']pkt = packet.Packet(msg.data)eth = pkt.get_protocols(ethernet.ethernet)[0]dst = eth.dstsrc = eth.srcdpid = datapath.idself.mac_to_port.setdefault(dpid, {})self.mac_to_port[dpid][src] = in_portif dst in self.mac_to_port[dpid]:out_port = self.mac_to_port[dpid][dst]else:out_port = ofproto.OFPP_FLOODactions = [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 = Noneif msg.buffer_id == ofproto.OFP_NO_BUFFER:data = msg.dataout = 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].srcdst_ip = packet[IP].dstsrc_port = packet[TCP].sportdst_port = packet[TCP].dportflags = packet[TCP].flagsprint(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

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

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

相关文章

ArcGIS Pro SDK (三)Addin控件 4 工程项目结构类

25 ArcGIS Pro 自定义项目 目录 25 ArcGIS Pro 自定义项目25.1 添加控件25.2 Code26 ArcGIS Pro 自定义工程项目26.1 添加控件26.2 Code25.1 添加控件 25.2 Code ProCustomItemTest.cs using ArcGIS.Desktop.Core; using ArcGIS.Desktop

分布式文件存储 - - - MinIO从入门到飞翔

MinIO从入门到飞翔 文章目录 MinIO从入门到飞翔0、前言1、分布式文件系统2、MinIO 介绍3、 MinIO安装(docker)4、基本概念5、通过代码上传文件到MinIO6、封装MinIO为starter7、在其他项目中集成封装好的模块 0、前言 对象存储是一种数据存储架构&#x…

互联网应用主流框架整合之SpringMVC基础组件开发

多种传参方式 在前一篇文章互联网应用主流框架整合之SpringMVC初始化及各组件工作原理中讨论了最简单的参数传递,而实际情况要复杂的多,比如REST风格,它往往会将参数写入请求路径中,而不是以HTTP请求参数传递;比如查询…

audio标签隐藏播放器尾部的三个点

问题: 在谷歌浏览器上,展示audio音频控件时,后面有三个点,点击后会显示下载和播放速度,想隐藏这两个控件。 注意: 不是所有版本都有这三个点,甚至有的版本里面三个点里面的控件只有下载。 解…

【Windows10】查看WIFI密码

操作步骤 电脑上查看已连接Wi-Fi的密码的步骤如下: 连接需要查看密码的Wi-Fi。右键点击任务栏上的 [网络] 图标,选择 [开启"网络和Internet"设置]。在 高级网络设置 项目中,点选 [网络和共享中心]。开启网络和共享中心的窗口后,点…

vue打包exe实战记录

vue项目不支持直接打包exe,可以依靠electron进行打包,处理方式是将vue打包的dist文件夹放到electron项目中,通过配置后打包electron.先看下本地环境 下面是实操记录: 1.vue项目打包 vue.config.js中设置项目路径为 module.exports {//publicPath: /chat_pc/, // 前端项目…

苍穹外卖笔记-13-导入地址簿功能代码、用户下单、订单支付

文章目录 1. 导入地址簿功能代码1.1 需求分析和设计1.1.1 产品原型1.1.2 接口设计1.1.3 表设计 1.2 代码导入1.2.1 Mapper层1.2.2 Service层1.2.3 Controller层 1.3 功能测试 2. 用户下单2.1 需求分析和设计2.1.1 产品原型2.1.2 接口设计2.1.3 表设计 2.2 代码开发2.2.1 DTO设计…

Spotify 音乐平台宣布成立内部创意机构,测试生成式人工智能配音广告

Spotify是一家流媒体音乐平台,提供广泛的音乐、播客和视频内容。用户可以通过订阅服务Spotify Premium来享受更多高级功能,如无广告播放、离线听歌等。 Spotify 周四宣布,它将通过其首家名为 Creative Lab 的内部创意机构进一步进军广告领域…

集合查询-并(UNION)集运算、交(INTERSECT)集运算、差(EXCEPT)集运算

一、概述 集合查询是对两个SELECT语句的查询结果进行再进行处理的查询 二、条件 1、两个SELECT语句的查询结果必须是属性列数目相同 2、两个SELECT语句的查询结果必须是对应位置上的属性列必须是相同的数据类型 三、并(UNION)运算 1、语法格式: SELECT 语句1…

Vite - 项目打包从 0 到 1(完美解决打包后访问白屏问题)

目录 开始 修改资源相对地址 引入 vitejs/plugin-legacy 插件并配置 修改打包指令 修改 router 中的 history 前端配置跨域相关 打包后成功访问 开始 修改资源相对地址 在 vite.config.js 文件中配置如下: export default defineConfig({base: ./, //1.打包…

揭秘循环购模式:为何商家愿“送钱”,用户能边消费边赚钱?

大家好,我是你们的电商专家吴军。今天,我将带大家走进一个神秘而又吸引人的商业模式——循环购模式。你可能会疑惑,为什么消费者能在这里“消费1000送2000”,每天还能领取现金并提现?商家真的在“送钱”吗?…

(css)el-tabs滚动按钮浮动问题

(css)el-tabs滚动按钮浮动问题 修改前: 修改后: 思路:找到相应元素,降低层级 css写法: ::v-deep .el-tabs__nav {z-index: 1; }

MySql出现的问题

1.在控制面吧输入mysql显示不是内部命令 2.找到mysql安装的目录,复制目录路径 3.打开系统属性设置环境变量中的Path将路径添加到里面 4.添加好以后将控制面板重新打开输入命令 2.解决安装mysql错误 导致多个mysql服务删除教程 1.用管理员身份打开cmd命令板 2.在…

各地区城乡居民基本养老保险情况数据,Shp+excel格式

基本信息. 数据名称: 各地区城乡居民基本养老保险情况数据 数据格式: Shpexcel 数据几何类型: 面 数据坐标系: WGS84 数据时间:2008-2018年 数据来源:网络公开数据 数据可视化.

Android Studio Koala | 2024.1.1 发布,快来看看有什么更新吧

自从三年前 Android Studio 更改了版本方案之后,从 Arctic Fox 开始每个主要版本都发布一个动物代号,同时版本迭代更新的节奏也越来越快,当然“填坑”的速度和“开坑”的速度几乎也“持平”,可以说每个版本都有痛点,都…

68. UE5 RPG 优化敌人角色的表现效果

我们现在已经有了四个敌人角色,接下来,处理一下在战斗中遇到的问题。 处理角色死亡后还会攻击的问题 因为我们有角色溶解的效果,角色在死亡以后的5秒钟才会被销毁掉。所以在这五秒钟之内,角色其实还是会攻击。主要时因为AI行为树…

【踩坑】修复Ubuntu远程桌面忽然无法Ctrl C/V复制粘贴及黑屏

转载请注明出处:小锋学长生活大爆炸[xfxuezhagn.cn] 如果本文帮助到了你,欢迎[点赞、收藏、关注]哦~ 说在前面: 需要注意的是,我发现他应该是新开了一个窗口给我。我之前打开的东西,在这个新窗口里都没有了&#xff0c…

区间预测 | Matlab实现GRU-ABKDE门控循环单元自适应带宽核密度估计多变量回归区间预测

区间预测 | Matlab实现GRU-ABKDE门控循环单元自适应带宽核密度估计多变量回归区间预测 目录 区间预测 | Matlab实现GRU-ABKDE门控循环单元自适应带宽核密度估计多变量回归区间预测效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.Matlab实现GRU-ABKDE门控循环单元自适应…

JAVA动态表达式:Antlr4 表达式树解析

接上面 JAVA动态表达式:Antlr4 G4 模板 读取字符串表达式结构树-CSDN博客 目前已经实现了常量及分组常规表达式的解析。 String formula "啦啦啦1 and 11 and 23 and 1123 contains 1 and 23455 notcontains 5"; String formula "啦啦啦1 and (…

SAP 角色授权账户 重复的问题 解决方案

直接从agr_usrs 里面删除新的 *&---------------------------------------------------------------------* *& Report ZRPT_BC_ROLEASSIGN_RM_DUP *&---------------------------------------------------------------------* *&角色授权去重 *&--------…