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学习-(26) Go语言操作mongoDB

    Go语言操作mongoDB mongoDB是目前比较流行的一个基于分布式文件存储的数据库,它是一个介于关系数据库和非关系数据库(NoSQL)之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的. ...

  2. Jmeter- 笔记2 - Jmeter介绍

    性能测试工具:Jmeter 环境:Window,jdk1.8 Jmeter是Apache下的Java语言开发.运行Java语言的环境是jre(Java run env.).jdk是Java开发工具包, ...

  3. Volatile 原理及使用,java并发中的可见性问题

    1.解决并发编程中的可见性问题 volatile 代表不使用cpu缓存,修改后的数据,将直接刷到内存中,被volatile修饰的变量,读取的时候,也是从内存中读取,不从cpu缓存中读取 上代码 // ...

  4. Darknet_Yolov3模型搭建

    Darknet_Yolov3模型搭建 YOLO(You only look once)是目前流行的目标检测模型之一,目前最新已经发展到V3版本了,在业界的应用也很广泛.YOLO的特点就是"快 ...

  5. DeepLabV3+语义分割实战

    DeepLabV3+语义分割实战 语义分割是计算机视觉的一项重要任务,本文使用Jittor框架实现了DeepLabV3+语义分割模型. DeepLabV3+论文:https://arxiv.org/p ...

  6. 用OpenCV进行摄像机标定

    用OpenCV进行摄像机标定 照相机已经存在很长时间了.然而,随着廉价针孔相机在20世纪末的引入,日常生活中变得司空见惯.不幸的是,这种廉价伴随着它的代价:显著的扭曲.幸运的是,这些常数,通过校准和一 ...

  7. python小知识,sort和serted的区别

    列表对象sort()方法和内置sorted()函数的作用基本相同,但,不同的是sort会改变原有列表的顺序,而sorted不会 具体示例如下: """ create:20 ...

  8. 尚硅谷Java——宋红康笔记【day1-day5】

    day1 注释 1.java规范的三种注释方式: 单行注释 多行注释 文档注释(java特有) 2. 单行注释和多行注释的作用: ① 对所写的程序进行解释说明,增强可读性.方便自己,方便别人 ② 调试 ...

  9. Handler_read_*的总结

    在分析一个SQL的性能好坏时,除了执行计划,另外一个常看的指标是"Handler_read_*"相关变量. Handler_read_key Handler_read_first ...

  10. 『动善时』JMeter基础 — 41、使用JMeter连接数据库(MySQL)

    目录 1.为什么要使用JMeter连接数据库 2.JMeter连接数据库的前提 3.JDBC连接配置组件界面介绍 4.JMeter连接数据库演示 (1)测试计划内包含的元件 (2)测试计划中添加链接数 ...