前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >初试mininet(可选PyCharm)

初试mininet(可选PyCharm)

作者头像
Enterprise_
发布2019-03-21 15:53:59
1.1K0
发布2019-03-21 15:53:59
举报
文章被收录于专栏:小L的魔法馆小L的魔法馆

0x00 Mininet

尝试理解一下mininet,话说mininet是基于python编写的,代码结构清晰,简直清醒脱俗((≧▽≦)/啦啦啦),附上链接mininet,mark一下。

0x01 Important classes, methods, functions

简单记录一下比较重要的类和方法

代码语言:javascript
复制
Important classes, methods, functions and variables in the above code include:

Topo: the base class for Mininet topologies

build(): The method to override in your topology class. Constructor parameters (n) will be passed through to it automatically by Topo.__init__().

addSwitch(): adds a switch to a topology and returns the switch name

addHost(): adds a host to a topology and returns the host name

addLink(): adds a bidirectional link to a topology (and returns a link key, but this is not important). Links in Mininet are bidirectional unless noted otherwise.

Mininet: main class to create and manage a network

start(): starts your network

pingAll(): tests connectivity by trying to have all nodes ping each other

stop(): stops your network

net.hosts: all the hosts in a network

dumpNodeConnections(): dumps connections to/from a set of nodes.

setLogLevel( 'info' | 'debug' | 'output' ): set Mininet's default output level; 'info' is recommended as it provides useful information.

0x02 Sample

自己写了一个简单的,h1~h5链接到s1, h6~h10链接到s2,然后s1和s2互联 一开始想着SingleSwitchTopo的方法来写LinearTopo,结果一直报错,╮(╯_╰)╭,明明人家代码都写好了 SingleSwitchTopoSingle switch connected to k hosts,而Linear topology of k switches, with n hosts per switch

代码语言:javascript
复制
#!/usr/bin/python

from mininet.topo import Topo
from mininet.net import Mininet
from mininet.util import irange,dumpNodeConnections
from mininet.log import setLogLevel

class LinearTopo(Topo):
    ""
    """Linear topology of k switches, with n hosts per switch."""
    ""
    def __init__(self, k=2, n=5,**opts):

        """k:number of switches (and hosts)"""
        """hconf: host configuration options"""
        """lconf: ling configuration options"""
        super(LinearTopo, self).__init__(**opts)
        self.n = n
        self.k = k
        """creates 2 switchs"""
        switch1 = self.addSwitch('s1')
        switch2 = self.addSwitch('s2')

        """creates h1~h5 and addLink switch1"""

        for i in irange(1,n):
            host = self.addHost('h%s' %i)
            self.addLink(host,switch1)

        """creates h6~h10 and addLink switch2"""

        for i in irange(n+1,n+5):
            host =self.addHost('h%s' %i)
            self.addLink(host,switch2)

        """addLink switch1 and switch2"""
        self.addLink(switch1,switch2)


def simpleTest():
    "Create and test a simple network"
    topo = LinearTopo(k=2,n=5)
    net = Mininet(topo)
    #start the network
    net.start()
    print "Dumping host connections"
    dumpNodeConnections(net.hosts)

    #test the connections of the network
    print "Testing network connectivity"
    net.pingAll()

    #Test the bandwidth of the h* and h*
    print "Testing bandwidth between h1 and h2"
    h1, h2 = net.get('h1', 'h2')
    net.iperf((h1,h2))

    print "Testing bandwidth between h10 and h1"
    h10, h1 = net.get('h10', 'h1')
    net.iperf((h10,h1))


    #stop the network
    net.stop()

if __name__== '__main__':
    # Tell mininet to print useful information
    setLogLevel('info')
    simpleTest()

0x04 run in shell

命令行直接运行

代码语言:javascript
复制
#将代码保存到一个文件中
sudo vi test.py

#运行
sudo python test.py

0x05 Output

代码语言:javascript
复制
*** Creating network
*** Adding controller
*** Adding hosts:
h1 h2 h3 h4 h5 h6 h7 h8 h9 h10 
*** Adding switches:
s1 s2 
*** Adding links:
(h1, s1) (h2, s1) (h3, s1) (h4, s1) (h5, s1) (h6, s2) (h7, s2) (h8, s2) (h9, s2) (h10, s2) (s1, s2) 
*** Configuring hosts
h1 h2 h3 h4 h5 h6 h7 h8 h9 h10 
*** Starting controller
c0 
*** Starting 2 switches
s1 s2 ...
Dumping host connections
h1 h1-eth0:s1-eth1
h2 h2-eth0:s1-eth2
h3 h3-eth0:s1-eth3
h4 h4-eth0:s1-eth4
h5 h5-eth0:s1-eth5
h6 h6-eth0:s2-eth1
h7 h7-eth0:s2-eth2
h8 h8-eth0:s2-eth3
h9 h9-eth0:s2-eth4
h10 h10-eth0:s2-eth5
Testing network connectivity
*** Ping: testing ping reachability
h1 -> h2 h3 h4 h5 h6 h7 h8 h9 h10 
h2 -> h1 h3 h4 h5 h6 h7 h8 h9 h10 
h3 -> h1 h2 h4 h5 h6 h7 h8 h9 h10 
h4 -> h1 h2 h3 h5 h6 h7 h8 h9 h10 
h5 -> h1 h2 h3 h4 h6 h7 h8 h9 h10 
h6 -> h1 h2 h3 h4 h5 h7 h8 h9 h10 
h7 -> h1 h2 h3 h4 h5 h6 h8 h9 h10 
h8 -> h1 h2 h3 h4 h5 h6 h7 h9 h10 
h9 -> h1 h2 h3 h4 h5 h6 h7 h8 h10 
h10 -> h1 h2 h3 h4 h5 h6 h7 h8 h9 
*** Results: 0% dropped (90/90 received)
Testing bandwidth between h1 and h2
*** Iperf: testing TCP bandwidth between h1 and h2 
*** Results: ['35.8 Gbits/sec', '35.8 Gbits/sec']
Testing bandwidth between h10 and h1
*** Iperf: testing TCP bandwidth between h10 and h1 
*** Results: ['36.4 Gbits/sec', '36.4 Gbits/sec']
*** Stopping 1 controllers
c0 
*** Stopping 11 links
...........
*** Stopping 2 switches
s1 s2 
*** Stopping 10 hosts
h1 h2 h3 h4 h5 h6 h7 h8 h9 h10 
*** Done

0x06 Problems

遇到的问题: 一.Mininet只能使用python2使用python3不行,即使用外部库也不行二.PyCharm配置root运行文件 一开始我没有使用shell来运行,而是使用了PyCharm来跑,然后出现了一个问题,就是Mininet must run as a root,即必须以管理员身份进行,所以需要在PyCharm上设置管理员运行,具体做法:

  1. 在/usr/bin/目录下新建文件 python_sudo.sh :
代码语言:javascript
复制
sudo gedit /usr/bin/python_sudo.sh

在文件中写入下列代码:

代码语言:javascript
复制
#! /bin/bash 
sudo python $*
  1. 给sh文件赋予权限:
代码语言:javascript
复制
cd /usr/bin/
sudo chmod a+x python_sudo.sh
  1. 编辑visudo(其他工具有点问题):
代码语言:javascript
复制
sudo visudo
  1. 在最后一行输入,然后保存:
代码语言:javascript
复制
%sudo ALL=NOPASSWD: /usr/bin/python
  1. 将pycharm 中的 File→Settings→Project Interpreter 置换为自己写的python_sudo.sh,在下图选中框右边有个小齿轮,点那个进行Add就OK了
在这里插入图片描述
在这里插入图片描述
  1. 同理可以对python3等进行设定,只要在将python改成对应版本就可以(前提是在这个目录下已安装)

0x07 Paint

一个能用画图工具

代码语言:javascript
复制
sudo apt-get install kolourpaint4

然后搜paint就OK了

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019年02月28日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 0x00 Mininet
  • 0x01 Important classes, methods, functions
  • 0x02 Sample
  • 0x04 run in shell
  • 0x05 Output
  • 0x06 Problems
  • 0x07 Paint
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档