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. 日常Bug排查-抛异常不回滚

    日常Bug排查-抛异常不回滚 前言 日常Bug排查系列都是一些简单Bug排查,笔者将在这里介绍一些排查Bug的简单技巧,同时顺便积累素材_. Bug现场 最近有人反映java应用操作数据库的时候,抛异 ...

  2. CodeGen标记循环

    CodeGen标记循环 标记循环是一个模板文件构造,它允许您迭代CodeGen拥有的标记信息的集合.为了使用标记循环,必须基于至少定义了一个字段标记的存储库结构生成代码.              标 ...

  3. 包及权限配置&java存储机理绘制

    包及权限配置 包的声明和导入 //声明 package aa.bb.cc; public class A{;} class B{;} //即在java输出目录aa.bb.cc中放入编译后的A.clas ...

  4. Java线程的并发工具类

    Java线程的并发工具类. 一.fork/join 1. Fork-Join原理 在必要的情况下,将一个大任务,拆分(fork)成若干个小任务,然后再将一个个小任务的结果进行汇总(join). 适用场 ...

  5. Java IO学习笔记六:NIO到多路复用

    作者:Grey 原文地址:Java IO学习笔记六:NIO到多路复用 虽然NIO性能上比BIO要好,参考:Java IO学习笔记五:BIO到NIO 但是NIO也有问题,NIO服务端的示例代码中往往会包 ...

  6. 小程序微信支付(UNIAPP+第三方SDK:binarywang)

    小程序支付流程图说明(UNIAPP+第三方SDK:binarywang) 说明:小程序为UNI-APP开发,使用的第三方微信支付SDK为binarywang提供的,此SDK对微信公众号.小程序.微信各 ...

  7. 会点自动化就要25k? 现在年轻人这么浮躁吗

    面试中一问元素定位就对答如流.一问实际项目框架如何搭建就避重就轻.含糊其辞,这样的自动化实战能力也能拿25K?静待下文: 一.为什么现在自动化测试工资那么高呢? 结合现在的职场环境与企业用人需求,自动 ...

  8. 大白话带你认识JVM

    如果在文中用词或者理解方面出现问题,欢迎指出.此文旨在提及和而不深究,但会尽量效率地把知识点都抛出来 一.JVM的基本介绍 JVM 是 Java Virtual Machine 的缩写,它是一个虚构出 ...

  9. 我的物联网大学【第二章】:Luat的出世

    壹 启动火种 有一位软件行业的大神,名字叫做许小刚. 小刚是一位憨厚的年轻的码农,嵌入式.后端.前端,无所不能,是一个很牛的物联网全栈工程师,也是一家物联网软件公司的创始人兼CEO. 有次跟我.老陆. ...

  10. Jetpack Compose和View的互操作性

    Jetpack Compose Interoperability Compose风这么大, 对于已有项目使用新技术, 难免会担心兼容性. 对于Compose来说, 至少和View的结合是无缝的. (目 ...