OpenFlow流表_时间因素

2023-11-08

目标

现有拓扑结构如下的网络结构(s1-s4为交换机,h1-h9为主机),现欲让h1和h2白天ping不通,晚上ping的通。

# 拓扑结构:
------------------------------------------------------
-------------------------s1---------------------------
---------------------/---|---\-------------------------
-----------------/-------|------\---------------------
--------------/----------|---------\------------------
------------/------------|------------\---------------
---------s2--------------s3--------------s4-----------
-------/--|--\---------/--|--\---------/--|--\--------
------h1--h2--h3------h4--h5--h6------h7--h8--h9------
------------------------------------------------------
------------------------------------------------------

分析

正常情况下h1和h2是可以ping的通的,要让其ping不通,只需要添加一条流表项,使得h1发送给h2的报文被丢弃即可。

OVS添加流表有两种方式:
1:使用OpenvSwitch的ovs-ofctl add-flow 命令添加流表
2:调用控制器的北向接口下发流表,这里用的是OpenDayLight控制器利用REST API的形式下发流表。

要实现白天和晚上区别处理,普通发送流表显然无法满足要求。故考虑在以上两种方式的基础上拓展对于时间的处理,在白天下发表项晚上删除表项即可。

具体方法:
1:编写shell脚本A,脚本内利用ovs的命令下发流表,将A设定为每天白天执行一次。
编写shell脚本B,脚本内删除流表,将B设定为每天晚上执行一次。

2:编写Python脚本C,脚本内利用OpenDayLight控制器的REST API下发流表,将C设定为每天白天执行一次。
编写Python脚本D,脚本内删除流表,将D设定为每天晚上执行一次。

实现

定时执行脚本的实现:利用crontab
查看执行日志:vim /var/log/cron
修改全局:vim /etc/crontab
修改当前用户: crontab -e

ovs命令实现

sudo ovs-ofctl -O OpenFlow13 dump-flows s2

vim h1_ping_h2.sh

sudo ovs-ofctl -O OpenFlow13 add-flow s2 idle_timeout=2000,priority=100,dl_src=00:00:00:00:00:01,dl_dst=00:00:00:00:00:02,action=drop

vim h1_ping_h2_del.sh

sudo ovs-ofctl -O OpenFlow13 del-flows s2 dl_src=00:00:00:00:00:01

定时

运行 sudo vim /etc/crontab
添加:

00 06 * * * root bash /home/cheney/Downloads/h1_ping_h2/h1_ping_h2.sh
00 18 * * * root bash /home/cheney/Downloads/h1_ping_h2/h1_ping_h2_del.sh

REST API实现

下发流表

URL:控制器ip地址:8181/restconf/config/opendaylight-inventory:nodes/node/交换机switch_id/flow-node-inventory:table/0/flow/demo_1

vim h1_ping_h2.py

#!/usr/bin/python
import requests
from requests.auth import HTTPBasicAuth
def http_put(url,jstr):
      url= url
      headers = {'Content-Type':'application/json'}
      resp = requests.put(url,jstr,headers=headers,auth=HTTPBasicAuth('admin', 'admin'))
      return resp 
      
if __name__ == "__main__":
      url = 'http://127.0.0.1:8181/restconf/config/opendaylight-inventory:nodes/node/openflow:2/flow-node-inventory:table/0/flow/1'
      with open('h1_ping_h2.json') as f:
            jstr = f.read()
      resp = http_put(url,jstr)
      print resp.content

vim h1_ping_h2.json

{
  "flow": [
    {
      "id": "1",
      "flow-name": "demo_1",
      "table_id": 0,
      "match": {
        "ethernet-match": {
          "ethernet-source": {
            "mask": "ff:ff:ff:ff:ff:ff",
            "address": "00:00:00:00:00:01"
          },
          "ethernet-destination": {
            "mask": "ff:ff:ff:ff:ff:ff",
            "address": "00:00:00:00:00:02"
          }
        }
      },
      "instructions": {
        "instruction": [
          {
            "order": "0",
            "apply-actions": {
              "action": [
                {
                  "order": "0",
                  "drop-action": {
                    
                  }
                }
              ]
            }
          }
        ]
      }
    }
  ]
}

删除流表

vim h1_ping_h2_del.py

#!/usr/bin/python
import requests
from requests.auth import HTTPBasicAuth
    
if __name__ == "__main__":
      url = 'http://127.0.0.1:8181/restconf/config/opendaylight-inventory:nodes/node/openflow:2/flow-node-inventory:table/0/flow/1'
      headers = {'Content-Type':'application/xml','Accept': 'application/xml'}
      requests.delete(url,headers=headers,auth=HTTPBasicAuth('admin', 'admin'))

定时

运行 sudo vim /etc/crontab
添加:

00 06 * * * root python /home/cheney/Downloads/h1_ping_h2/h1_ping_h2.py
00 18 * * * root python /home/cheney/Downloads/h1_ping_h2/h1_ping_h2_del.py

测试:

由于实际程序执行周期需要24小时,这里改变一下时间用于测试:
在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

OpenFlow流表_时间因素 的相关文章

随机推荐

  • wifi卡慢延迟高_wifi卡怎么办(wifi信号满格但网速慢解决方法)

    最近学霸君有个朋友 天天吹自己家里 100M 光纤 可每晚一起开黑王者的总是说家里 WiFi 莫名卡顿 断流 然后各种理由坑人 让它换路由器吧 又不舍得花这点钱 说是够用就行 生怕自己气成祖安人的学霸君 只好上门帮他看看是不是路由器没设置好
  • [技术发展-26]:新型信息与通信网络的数据安全

    前言 网络安全 通常指计算机网络的安全 实际上也可以指计算机通信网络的安全 计算机通信网络是将若干台具有独立功能的计算机通过通信设备及传输媒体互连起来 在通信软件的支持下 实现计算机间的信息传输与交换的系统 而计算机网络是指以共享资源为目的
  • 【idea插件开发】从0入门idea插件开发,idea插件开发教程,如何开发idea插件

    idea插件介绍 作为一枚程序员 平时最常用的ide就是IntelliJ IDEA 平时会用到各种各样的插件 通过插件的使用 提高自己的开发效率 idea具有全局性 安装好插件后 对idea生效 所有的工程均能找到 idea使用的便捷性 在
  • 单词长度(输入在一行中给出一行文本,以‘.’结束,结尾的句号不能计算在最后一个单词的长度内。在一行中输出这行文本对应的单词的长度,每个长度之间以空格隔开,行末没有最后的空格。)

    单词长度 5分 题目内容 你的程序要读入一行文本 其中以空格分隔为若干个单词 以 结束 你要输出这行文本中每个单词的长度 这里的单词与语言无关 可以包括各种符号 比如 it s 算一个单词 长度为4 注意 行中可能出现连续的空格 输入格式
  • OpenWRT的开发

    Openwrt 官方正式的发行版是已编译好了的映像文件 后缀名bin或trx trx2 此映像文件可从Openwrt官方网站的下载页面中轻松获取到 连接地址为 OpenWrt官方网站 准备工作 在开始编译Openwrt之前需要您做些准备工作
  • FreeRTOS+CubeMX系列第一篇——初识FreeRTOS

    文章目录 一 关于FreeRTOS 二 FreeRTOS的特点 三 如何在CubeMX上配置FreeRTOS 四 FreeRTOS文档资料 五 同系列博客 一 关于FreeRTOS 1 什么是FreeRTOS FreeRTOS是一个迷你的实
  • goland os.Open 路径错误

    os Open 报错原因 Open不是当前目录下查找 项目取的是项目根目录 不是执行目录 证明如下 exPath os Getwd fmt Println expath exPath file err os Open exPath file
  • 504 错误码排查

    当出现 504 错误码时 表示请求超时 服务器无法及时响应请求 需要检查下应用是否有什么耗时的操作 比如是否出现了 SQL 慢查询 是否接口发生死循环 是否出现死锁等 同时需要关注服务器系统负载高不高 网络异常 接口原本好好的 突然出现超时
  • JAVA基础算法——将字符串按照字典倒序排序并输出

    JAVA基础算法 将字符串按照字典倒序输出 作者 飞不高的鱼 转载请注明出处 import java util Arrays import java util Comparator 将已知的乱序字符串按照字典倒序排序输出 author xi
  • 矩阵的投影、线性拟合与最小二乘法

    概要 投影矩阵 如果一个b向量进行矩阵运算 Pb 那么向量b就会投影要A的列空间的最近点 目录 一 矩阵的四大基础子空间 二 投影矩阵 三 最小二乘法 一 矩阵的四大基础子空间 一个矩阵有4个子空间 分别是行空间 零空间 列空间和左零空间
  • C#中的委托、事件与接口

    C 中的委托 事件与接口 一 委托 一 委托链 二 匿名函数 三 Lamda语句 二 事件 三 接口 一 委托 委托 将方法以变量的形式传递 以方法的形式执行 注意 赋值方法的返回类型 参数要与委托的一致 如委托定义的参数类型是string
  • 微信小程序上传文件组件

    微信小程序上传文件 一 说明 该拍照组件带有微信授权相机功能 会结合后端接口 将上传的图片以数组集合的形式传值给父级页面 注意 组件适用于 单独上传图片 不携带参数 结合后端接口返回路径之后 再调用另外的保存接口 携带参数与图片提交的场景
  • 抓取第三方网站数据

    最近需要把某网站的统计数据聚合到我们自己的系统里 但是该网站没有提供标准API 所以就尝试自己抓取了一下 本文总结一下一般的方法 分析服务地址 通常网站有2种做法 一种是后端渲染 直接把渲染后的完整界面呈现在浏览器 另一种前端是静态页面 通
  • mybatis plus中的${ew.sqlSegment},${ew.sqlSelect},${ew.customSqlSegment},${ew.sqlSet}使用

    ew是mapper方法里的 Param Constants WRAPPER Wrapper queryWrapper对象 首先判断ew emptyOfWhere是否存在where条件 有的话再拼接上去 ew customSqlSegment
  • java毕业设计——基于JSP+JavaBean+sqlserver的在线购物系统设计与实现(毕业论文+程序源码)——在线购物系统

    基于JSP JavaBean sqlserver的在线购物系统设计与实现 毕业论文 程序源码 大家好 今天给大家介绍基于JSP JavaBean sqlserver的在线购物系统设计与实现 文章末尾附有本毕业设计的论文和源码下载地址哦 需要
  • 品味树莓派:GPIO Zero库使用入门

    文章目录 目的 基础说明 入门使用 LED PWMLED Button 更多入门例程 类基础说明 注意事项 总结 目的 树莓派有很多GPIO口可供用户使用 官方同时也提供了一些方式来操作这些IO口 其中目前主要推荐的是基于Python的GP
  • 1、什么是Shader

    什么是Shader Shader 中文名为着色器 Shader其实就是专门用来渲染图形的一种技术 通过shader 我们可以自定义显卡渲染画面的算法 使画面达到我们想要的效果 小到每一个像素点 大到整个屏幕 Shader分为两类 顶点Sha
  • 使用Gradle构建SpringBoot工程系列:第八篇:使用spring-data-jpa 实现数据持久化

    本篇文章是SpringBoot 系列文章的第八篇文章 由于本人工作原因 中断了一段时间 接下来的一段时间里 将陆续更新本系列的其他文章 回归Spring Boot技术体系 记录本人学习和使用Gradle构建spring Boot工程的过程
  • C/C++蓝桥杯三升序列

    本题答案可能是错的 我算出的是180414 和很多博主的答案不一样 我也不太懂哪里有问题 大家可以探讨一下 题目描述 对于一个字母矩阵 我们称矩阵中的一个三升序列是指在矩阵中找到三个字母 它们在同一行 同一列 或者在同一45 度的斜线上 这
  • OpenFlow流表_时间因素

    目标 现有拓扑结构如下的网络结构 s1 s4为交换机 h1 h9为主机 现欲让h1和h2白天ping不通 晚上ping的通 拓扑结构 s1