Mininet Python - AttributeError: 'dict' 没有属性 'hosts'

问题描述

我正在尝试编写自己的 Python 脚本,以便能够监控流量和执行基本攻击,并使用基本防火墙防止这些攻击。我以前从未使用过 mininet,因此对于更有经验的用户来说,可能会做一些明显错误的事情。

到目前为止,我已经设法创建了一个有效的拓扑,但我想在脚本中运行 iperf 命令,这意味着我需要调用 iperf() 方法,这要求我创建一个新的 Mininet 对象。

我使用了 mininet's SimplePerf.py example 中的一段代码,并尝试将它改编成我目前所写的内容。据我了解,该方法创建的拓扑结构会逐渐降低新主机的处理能力,从而导致性能下降。我不想要 cpu 受限的主机,所以我尝试调整 Mininet 的调用方式。

这是我目前的代码

from mininet.topo import Topo
from mininet.net import Mininet

from sys import argv
from mininet.node import OVSController
from mininet.link import TCLink


class Project( Topo ):
    def __init__( self ):
        # Initialize topology
        Topo.__init__( self )
        # Add hosts
        h1 = self.addHost('h1')
        h2 = self.addHost('h2')
        h3 = self.addHost('h3')
        # Add switches
        s1 = self.addSwitch('s1')
        # Add links
        self.addLink(h1,s1)
        self.addLink(h2,s1)
        self.addLink(h3,s1)

topos = { 'project': ( lambda: Project() )} 

net = Mininet( topo=topos,link=TCLink,controller=OVSController,autoStaticArp=True )
net.start()
#dumpNodeConnections(net.hosts)
h1,h3 = net.getNodeByName('h1','h3')
net.iperf( ( h1,h3 ),l4Type='UDP' )
net.stop()

执行此操作时,我收到一条错误消息,指出 Attribute error: 'dict' object has no attribute 'hosts'。如您所见,我已经注释掉了“dumpNodeConnections(net.hosts)”,因为我认为这可能是问题的根源,尽管我相信它也可能与导入有关。

在这里使用 OVSController 的原因是因为我看到它修复了我说 'Exception: Could not find a default OpenFlow controller'错误,所以我觉得它也可能与此有关。

任何关于我如何修复此错误或如何完全绕过它的建议将不胜感激。

[编辑] 自从发布这个问题以来,我尝试了 cpuLimitedHost 作为控制器类型,以及标准控制器对象,两者都给出了相同的错误。有趣的是,在运行 simpleperf.py 时,文件会运行,但我的文件仍然出现相同的错误

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)