如何使用Python Mininet API发送命令?

时间:2019-01-31 11:24:19

标签: python pexpect mininet

我需要使用Mininet Python API在不同主机上执行命令。

我尝试同时使用API​​并使用子进程和pexpect运行它,以确保Mininet配置没有问题。

    net = Mininet()

    s1 = net.addSwitch('s1')

    for n in range(1,4):
        h = net.addHost('h%s' % n)
        net.addLink(h, s1)

    net.addController('c0', controller=RemoteController, ip='127.0.0.1', 
    port=6653)

    net.start()

    h1 = net.get('h1')
    h1.cmd('ping h2')

这不执行命令h1 ping h2(使用Wireshark检查)

这确实起作用:

    child = pexpect.spawn('sudo mn --topo single,3 --controller remote')
    child.expect('mininet>')
    print child.before
    time.sleep(5)

    child.sendline('h1 ping h2')
    time.sleep(60)

由于我要实现的性质,我需要使用API​​而不是pexpect(发送多个命令,以便不同的主机同时发送流量。在我的测试中,似乎pexpect只能执行一个命令彼此之后)。

为什么h1.cmd('ping h2')不起作用?

1 个答案:

答案 0 :(得分:1)

命令:

h1.cmd('ping h2')

正在返回调试错误:

Unable to resolve 'h2'

尽管文档HERE指出了格式化命令的方式。

此问题通过使用以下内容解决:

h1.cmd('ping 10.0.0.2')

尽管如此,我仍然不知道原因。如果有人知道我很想听听。我希望这对某人有帮助。