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. win10家庭中文版CUDA+CUDNN+显卡GPU使用tensorflow-gpu训练模型安装过程(精华帖汇总+重新修改多次复现)

    查看安装包 pip list 本帖提供操作过程,具体操作网上有好多了,不赘述.红色字体为后来复现出现的问题以及批注 题外话: (1)python 的环境尽量保持干净,尽量单一,否则容易把自己搞晕,不知 ...

  2. SQL Server将同一列多条数据合并成一行

    Sql server中,将同一字段多条数据用字符拼接为一个字符串方式. 原数据查询展示: 使用 STUFF 函数,将结果列拼接成一行.结果如下: STUFF: 1.作用 stuff(param1, s ...

  3. THINKPHP_(2)_TP模型的多表关联查询和多表字段的关键字搜索。

    问题: 上述内容中,标题和学年属于一个数据表.分类则属于另外一个数据表,并且是利用id关联后,另外一个数据表中的title字段. 需要设置关键字搜索,实现多表关联查询和多表字段的关键字搜索. 解决方法 ...

  4. X-Deep Learning功能模块

    X-Deep Learning功能模块 特征体系 样本 特征 网络 数据准备 样本格式 使用DataReader读取数据 自定义python reader 定义模型 稀疏部分 稠密部分 优化器 训练模 ...

  5. 在NVIDIA A100 GPU上利用硬件JPEG解码器和NVIDIA nvJPEG库

    在NVIDIA A100 GPU上利用硬件JPEG解码器和NVIDIA nvJPEG库 根据调查,普通人产生的1.2万亿张图像可以通过电话或数码相机捕获.这样的图像的存储,尤其是以高分辨率的原始格式, ...

  6. 开发掉坑(二)前端静态资源 Uncaught SyntaxError: Unexpected token <

    某天,有同学反馈后台管理系统出现静态资源无法加载的问题. 复现如下: 进入首页. 点击侧边栏某个子功能,静态资源可正常访问到. 等待10分钟左右,点击侧边栏其他子功能,无法访问到静态资源. 查看控制台 ...

  7. Java 面试题关于包装类

    这几个问题的知识点涉及的内容非常的刁钻,值得自己好好的理解. 问以下程序的输出结果是: 问题一: Object object=true ? new Integer(1):new Double(2.0) ...

  8. Pytorch线性规划模型 学习笔记(一)

    Pytorch线性规划模型 学习笔记(一) Pytorch视频学习资料参考:<PyTorch深度学习实践>完结合集 Pytorch搭建神经网络的四大部分 1. 准备数据 Prepare d ...

  9. 基于Android平台的图书管理系统的制作(2)

    上一篇讲解了制作图书管理系统的初衷与要求,和app首页的代码. 下面来介绍图书管理系统的服务对象:学生 学生类的设计: 个人信息:账号.密码.姓名.学号.邮箱.年龄. 借阅信息:借阅总数(不超过十本) ...

  10. 【VBA】读取另一个excel工作簿中的内容

    后台打开工作簿读取内容源码: Sub subOpenWorkbook() Dim datebase As String datebase = "... ....xlsx" Appl ...