1 import logging
2 import os
3 import time
4 import thread
5 import multiprocessing
6
7 from mininet.net import Mininet
8 from mininet.node import RemoteController
9 from mininet.cli import CLI
10 from mininet.log import setLogLevel
11 from mininet.link import TCLink
12 from mininet.topo import Topo
13
14 logger = logging.getLogger(__name__)
15
16 REQUEST_NUMBER = 3
17
18 class NMTree(Topo):
19 logger.debug("Class NMTree")
20 switchList = []
21 hostList = []
22
23 def __init__(self,level_number,node_number):
24 logger.info("Class NMTree init")
25 self.level_number = level_number
26 self.node_number = node_number
27 #init Topo
28 Topo.__init__(self)
29
30 def create_topo(self):
31 self.create_switch(self.level_number)
32 self.create_host(self.level_number,self.node_number)
33
34 def create_switch(self,number):
35 logger.debug("Create switch")
36 for i in range(1,number+1):
37 index = 0
38 prefix = "s"+str(i)
39 if i == 1:
40 self.switchList.append(self.addSwitch(prefix + str(i)))
41 else:
42 for k in range(1,2**(i-1)+1):
43 self.switchList.append(self.addSwitch(prefix+str(k)))
44 self.addLink(self.switchList[2**(i-2)+index-1],self.switchList[2**(i-1)+k-2])
45 if k % 2 == 0:
46 index += 1
47
48 def create_host(self,level,node):
49 logger.debug("Create host")
50 for i in range(1,2**(level-1)+1):
51 prefix = "h"+str(i)
52 for j in range(1,node+1):
53 self.hostList.append(self.addHost(prefix+str(j)))
54 self.addLink(self.switchList[2**(level-1)+i-2],self.hostList[(i-1)*node+j-1])
55
56
57 def start_log_server(net, topo):
58 time.sleep(15)
59
60 # h21 ip = 10.0.0.4
61 h21 = net.get(topo.hostList[3])
62 # Start ITGLog server on h21
63 h21.cmdPrint("~/D-ITG-2.8.1-r1023/bin/ITGLog")
64
65
66 def start_recv_server(net, topo):
67 time.sleep(10)
68 # h23 ip = 10.0.0.6
69 h23 = net.get(topo.hostList[5])
70 # Start ITGRecv server on h23
71 h23.cmdPrint("~/D-ITG-2.8.1-r1023/bin/ITGRecv")
72
73
74 def generate_traffic_by_n_itg(net, topo):
75 time.sleep(20)
76
77 pool = multiprocessing.Pool(processes=3)
78 # h13 ip = 10.0.0.3
79 h13 = net.get(topo.hostList[2])
80
81 # Start ITGSend server on h13 and send TCP streams to h23
82 pool.apply_async(h13.cmdPrint("~/D-ITG-2.8.1-r1023/bin/ITGSend -a 10.0.0.6 -rp 10001 -c 100 -C 10 -t 80000 \
83 -T TCP -l send_tcp_log -L 10.0.0.4 TCP -x recv_tcp_log -X 10.0.0.4 TCP"))
84 logger.info("end send tcp")
85 # Start ITGSend server on h13 and send UDP streams to h23
86 pool.apply_async(h13.cmdPrint("~/D-ITG-2.8.1-r1023/bin/ITGSend -a 10.0.0.6 -rp 10001 -c 100 -C 10 -t 15000 \
87 -T UDP -l send_udp_log -L 10.0.0.4 UDP -x recv_udp_log -X 10.0.0.4 UDP"))
88 logger.info("end send udp")
89 # Start ITGSend server on h13 and send ICMP streams to h23
90 pool.apply_async(h13.cmdPrint("~/D-ITG-2.8.1-r1023/bin/ITGSend -a 10.0.0.6 -rp 10001 -c 100 -C 10 -t 5000 \
91 -T ICMP -l send_icmp_log -L 10.0.0.4 TCP -x recv_icmp_log -X 10.0.0.4 TCP"))
92 logger.info("end send icmp")
93 pool.close()
94 pass
95
96
97 def create_topo():
98 logging.debug("Create NMTree")
99 topo = NMTree(3,3)
100 topo.create_topo()
101 logging.debug("Start Mininet")
102 controller_ip = "127.0.0.1"
103 controller_port = 6633
104 net = Mininet(topo=topo, link=TCLink, controller=None, autoSetMacs=True)
105 net.addController('controller',controller=RemoteController,ip=controller_ip, port=controller_port)
106 net.start()
107 thread.start_new_thread(generate_traffic_by_n_itg, (net, topo))
108 thread.start_new_thread(start_log_server, (net, topo))
109 thread.start_new_thread(start_recv_server, (net, topo))
110 CLI(net)
111 net.stop()
112
113 if __name__ == '__main__':
114 setLogLevel('info')
115 if os.getuid() != 0:
116 logger.debug("You are NOT root")
117 elif os.getuid() == 0:
118 create_topo()

基于Mininet的网络拓扑搭建代码的更多相关文章

  1. 搭建基于SornaQube的自动化安全代码检测平台

    一.背景和目的 近年来,随着新业务.新技术的快速发展,应用软件安全缺陷层出不穷.虽然一般情况下,开发者基本都会有单元测试.每日构建.功能测试等环节来保证应用的可用性.但在安全缺陷方面,缺乏安全意识.技 ...

  2. Mininet系列实验(四):基于Mininet测量路径的损耗率

    1 实验目的 熟悉Mininet自定义拓扑脚本的编写与损耗率的设定: 熟悉编写POX脚本,测量路径损耗速率 2 实验原理 在SDN环境中,控制器可以通过对交换机下发流表操作来控制交换机的转发行为,此外 ...

  3. Mininet实验 基于Mininet实现BGP路径挟持攻击实验

    参考:基于Mininet实现BGP路径挟持攻击实验 实验目的: 掌握如何mininet内模拟AS. 掌握BGP路径挟持的原理和分析过程. 实验原理: 互联网是由相互连接的自治系统AS组成的,通过一个通 ...

  4. Mininet实验 基于Mininet测量路径的损耗率

    实验原理 在SDN环境中,控制器可以通过对交换机下发流表操作来控制交换机的转发行为,此外,还可以利用控制器测量路径的损耗率.在本实验中,基于Mininet脚本,设置特定的交换机间的路径损耗速率,然后编 ...

  5. 面向服务体系架构(SOA)和数据仓库(DW)的思考基于 IBM 产品体系搭建基于 SOA 和 DW 的企业基础架构平台

    面向服务体系架构(SOA)和数据仓库(DW)的思考 基于 IBM 产品体系搭建基于 SOA 和 DW 的企业基础架构平台 当前业界对面向服务体系架构(SOA)和数据仓库(Data Warehouse, ...

  6. 基于CentOS与VmwareStation10搭建Oracle11G RAC 64集群环境:2.搭建环境-2.6. 安装Oracle所依赖的必要包

    2.6. 安装Oracle所依赖的必要包 2.6.1. 检查Oracle所依赖的必要rpm包 [root@localhost /]#rpm -q binutils compat-libstdc elf ...

  7. windows平台下基于QT和OpenCV搭建图像处理平台

        在之前的博客中,已经分别比较详细地阐述了"windows平台下基于VS和OpenCV"以及"Linux平台下基于QT和OpenCV"搭建图像处理框架,并 ...

  8. 基于 Hexo + GitHub Pages 搭建个人博客(一)

    前言:我的博客写作之路 15 年刚上大学,第一次接触公众号,就萌生了创建一个公众号写点东西,但最终不了了之. 很快到了 16 年,开始接触网上各大博客网站,接触最多的当属 CSDN,萌生了注册一个博客 ...

  9. 基于 Hexo + GitHub Pages 搭建个人博客(二)

    在 基于 Hexo + GitHub Pages 搭建个人博客(一) 这篇文章中,我们已经知道如何使用 Hexo + GitHub Pages 搭建一个个人博客,GitHub 为我们提供了免费的域名和 ...

随机推荐

  1. 解决Error running 'Tomcat 9': Address localhost:8080 is already in use的问题

    在我学习servlet的过程中遇到了tomacat端口8080被占用的情况,所以记录下来,毕竟以后还会碰见这种貌似情况 第一步,打开命令行界面,可快捷键window+R打开输入cmd进入 输入代码:n ...

  2. .Net Redis实战——使用Redis构建Web应用

    示例介绍 示例1:借助Redis实现购物车功能 示例2:Redis实现网页缓存和数据缓存 借助Redis实现购物车功能 每个用户的购物车都是一个散列,散列存储了商品ID与商品订购数量之间的映射.订购商 ...

  3. 重新整理 .net core 实践篇—————服务的配置更新[十三]

    前言 前文讲述了,服务和配置直接的配合,这一节写一下,当配置文件修改了,每个服务如何感知自己的配置. 正文 服务感知到自己的配置发生变化,这就牵扯出两个东西: IoptionsMonitor<o ...

  4. CVPR2020论文解析:视频分类Video Classification

    CVPR2020论文解析:视频分类Video Classification Rethinking Zero-shot Video Classification: End-to-end Training ...

  5. java.lang.ClassNotFoundException: org.apache.curator.RetryPolicy

    dubbo项目启动过程中遇到这个异常,很明显是找不到curator的包,所以需要引入curator的相关包才可以, curator是zookeeper的客户端框架,且要引入完整,才不会报错 比如: & ...

  6. NOIP模拟测试8「寿司」

    考试时打的类似$n^2$暴力,然后炸了只有10分 后来验证我的算法伪了. 题解 显然你有一种解法,假设你要在一个B点断开将R分别移向最左 最右,这样只用分别计算B点右面蓝色数量左面蓝色数量就得到了一个 ...

  7. 【linux】驱动-15-定时器

    目录 前言 15. 定时器 15.1 内核函数汇总 15.2 内核滴答 15.3 相关结构体 15.4 setup_timer() 设置定时器 15.5 add_timer() 向内核添加定时器 15 ...

  8. Map集合中的方法

    Map集合中的方法: values() 方法 : 获取集合中的所有的值----没有键,没有对应关系, KeySet() 方法: 将Map中所有的键存入到set集合中.因为set具备迭代器.所有可以迭代 ...

  9. IDEA拷贝类路径

    1.方法一 1.1.鼠标右击需要复制的类 1.2.点击 Copy Reference 2.方法二 快捷键:Ctrl + Alt + Shift + C

  10. Python常用数据结构(列表)

    Python中常用的数据结构有序列(如列表,元组,字符串),映射(如字典)以及集合(set),是主要的三类容器 内容 序列的基本概念 列表的概念和用法 元组的概念和用法 字典的概念和用法 各类型之间的 ...