有人说做网站赌,哈尔滨住房城乡建设局网站首页,唐山网站建设服务,电商货源网站大全文章目录 1. 前言2. Mininet 和 Ryu 的区别2.1 Mininet2.2 Ryu2.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. 前言2. Mininet 和 Ryu 的区别2.1 Mininet2.2 Ryu2.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
功能: Mininet 是一个网络仿真器用于创建和测试虚拟网络拓扑。它允许用户在单台计算机上模拟完整的网络包括主机、交换机、链路等。用例: Mininet 常用于研究和教学帮助用户快速构建和测试复杂的网络环境而无需实际硬件。它也用于开发和调试网络应用和协议。实现: Mininet 使用 Linux 容器 (如 Network Namespaces 和 Open vSwitch) 来创建虚拟网络环境。用户可以通过 Python 脚本定义网络拓扑。交互: 用户可以使用 Mininet 的命令行接口 (CLI) 或 Python API 来创建和操作网络拓扑。
2.2 Ryu
功能: Ryu 是一个开源的 SDN 控制器框架用于开发和管理 SDN 控制器。它提供了用于编写控制平面应用程序的工具和库。用例: Ryu 用于实现 SDN 控制器以管理和控制网络设备的行为。它支持 OpenFlow 协议可以与支持 OpenFlow 的交换机进行通信。实现: Ryu 是用 Python 编写的并且提供了丰富的 API 和库便于开发者编写自定义的网络控制逻辑和应用。交互: 开发者使用 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 安装 Mininet: 在 Ubuntu 上您可以通过以下命令安装 Mininet sudo apt-get updatesudo apt-get install mininet
pip install mininet # 虚拟环境python3.8中安装 安装 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 eventlet0.30.2 ryu4.34安装 scapy 和 tcpdump: scapy 是一个用于生成和处理网络包的 Python 库而 tcpdump 是一个流行的网络包捕获工具 sudo apt-get install python3-scapy tcpdump
pip3 install scapy -i https://pypi.tuna.tsinghua.edu.cn/simple3.2 创建 Mininet 网络拓扑
创建一个简单的 Mininet 网络拓扑并启动 Ryu 控制器
from mininet.net import Mininet
from mininet.node import RemoteController
from mininet.cli import CLI
from mininet.log import setLogLeveldef simpleTopo():net Mininet(controllerRemoteController)print(*** Creating nodes)h1 net.addHost(h1)h2 net.addHost(h2)s1 net.addSwitch(s1)c0 net.addController(c0, controllerRemoteController, ip127.0.0.1, port6633)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 控制器来管理网络。以下是代码的详细说明以及对应的拓扑图。 创建 Mininet 网络: Mininet(controllerRemoteController)创建一个 Mininet 网络并指定使用远程控制器。 创建节点: h1 net.addHost(h1)添加主机 h1。h2 net.addHost(h2)添加主机 h2。s1 net.addSwitch(s1)添加交换机 s1。c0 net.addController(c0, controllerRemoteController, ip127.0.0.1, port6633)添加一个远程控制器 c0控制器运行在本地机器上IP 地址为 127.0.0.1使用端口 6633。 创建链接: net.addLink(h1, s1)将主机 h1 连接到交换机 s1。net.addLink(h2, s1)将主机 h2 连接到交换机 s1。 启动网络: net.start()启动 Mininet 网络。 运行命令行界面 (CLI): CLI(net)启动 Mininet 的命令行界面可以在其中输入命令来管理网络。 停止网络: net.stop()停止 Mininet 网络。
拓扑图
以下是这个代码创建的网络拓扑图 -------- --------| h1 |------| s1 |------| h2 |-------- -------- --------||---------| c0 | (Remote SDN Controller)---------h1 和 h2 是两台主机。s1 是一个交换机。c0 是一个远程 SDN 控制器管理交换机 s1。
在这个拓扑中交换机 s1 由远程控制器 c0 管理主机 h1 和 h2 通过交换机 s1 进行通信。这个简单的拓扑结构可以用于模拟和测试网络配置、流量管理和攻击检测等任务。
保存上述代码为 simple_topo.py并使用以下命令运行
sudo python3 simple_topo.py启动后得到cli端
3.2 启动 Ryu 控制器
创建一个简单的 Ryu 控制器脚本例如 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_idNone):ofproto datapath.ofprotoparser datapath.ofproto_parserinst [parser.OFPInstructionActions(ofproto.OFPIT_APPLY_ACTIONS, actions)]if buffer_id:mod parser.OFPFlowMod(datapathdatapath, buffer_idbuffer_id,prioritypriority, matchmatch,instructionsinst)else:mod parser.OFPFlowMod(datapathdatapath, prioritypriority,matchmatch, instructionsinst)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_portin_port, eth_dstdst)self.add_flow(datapath, 1, match, actions)data Noneif msg.buffer_id ofproto.OFP_NO_BUFFER:data msg.dataout parser.OFPPacketOut(datapathdatapath, buffer_idmsg.buffer_id,in_portin_port, actionsactions, datadata)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(dsttarget_ip)/TCP(dporttarget_port,flagsS),verbose0)3.4 捕获流量
进入h2机器
mininet xterm h2在 h2 主机上捕获流量并保存为 pcap 文件
tcpdump -w attack_traffic.pcap可以用这个指令看一下pcap文件大概内容
tcpdump -vr attack_traffic.pcap4. 实时异常检测
我开发了一个基于随机森林的入侵检测模型利用了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 接着我编写了以下 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(fIP: {src_ip} - {dst_ip}, TCP Port: {src_port} - {dst_port}, Flags: {flags})sniff(ifaceh2-eth0, prnpacket_callback, store0)通过这段代码我成功捕获到了 SYN 攻击的流量 4.3 深度学习模型部署上h2机器
这里嘛有缘再见了。
帮助、咨询
https://docs.qq.com/sheet/DUEdqZ2lmbmR6UVdU?tabBB08J2