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. Go语言的函数04---变量作用域

    package main import "fmt" /* 变量的作用域 全局变量:写在函数外,当前包下的所有函数都可以访问的变量(整个包),生命周期与程序相同(程序结束时,全局变量 ...

  2. CVPR2019论文观察:感知边缘检测的双向级联网络

    CVPR2019论文观察:感知边缘检测的双向级联网络 BDCN:Bi-Directional Cascade Network for Perceptual Edge Detection 摘要 探索多尺 ...

  3. MinkowskiEngine demo ModelNet40分类

    MinkowskiEngine demo ModelNet40分类 本文将看一个简单的演示示例,该示例训练用于分类的3D卷积神经网络.输入是稀疏张量,卷积也定义在稀疏张量上.该网络是以下体系结构的扩展 ...

  4. 黎曼曲面Riemann Surface

    黎曼曲面Riemann Surface A Riemann surface is a surface-like configuration that covers the complex plane  ...

  5. java容器学习笔记

    容器 容器的组成 容器有两个接口Map和Collection. collection接口有List类和set类. List类可以分为:Vector.LinkedList.ArrayList.CopyO ...

  6. Hive窗口函数保姆级教程

    在SQL中有一类函数叫做聚合函数,例如sum().avg().max()等等,这类函数可以将多行数据按照规则聚集为一行,一般来讲聚集后的行数是要少于聚集前的行数的.但是有时我们想要既显示聚集前的数据, ...

  7. 记一次项目中解决 -- 并发减库存超卖问题过程(Java)

    起因:项目中要做预约功能,首先每天的余票都是有上限的,自然不能出现超卖的情况 基于我们项目是单体分布式的springcloud部署,我想了下 第一种方法,直接mysql加行锁,要update这条库存数 ...

  8. 云原生时代的Java

    原文链接(作者:周志明):https://time.geekbang.org/column/article/321185 公开课链接:https://time.geekbang.org/opencou ...

  9. java并发编程JUC第十一篇:如何在线程之间进行对等数据交换

    java.util.concurrent.Exchanger可以用来进行数据交换,或者被称为"数据交换器".两个线程可以使用Exchanger交换数据,下图用来说明Exchange ...

  10. 怎么回答面试官:你对Spring的理解?

    最近看了点Spring的源码,正好来稍微扯一扯,帮一部分培训班的朋友撕开一道口子,透透气.我自己都是看的培训班视频,所以也算培训班出身吧.所以下文开口闭口"培训班",不要觉得是我在 ...