如何使用 Python Mininet API 发送命令?
How to send a command with the Python Mininet API?
我需要使用 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 只能在彼此之后执行一个命令)。
为什么 h1.cmd('ping h2')
不起作用?
命令:
h1.cmd('ping h2')
正在返回调试错误:
Unable to resolve 'h2'
尽管文档 HERE 说明这是格式化命令的方式。
已通过使用以下方法解决此问题:
h1.cmd('ping 10.0.0.2')
虽然我仍然不知道这是为什么。如果有人知道我很想听听。我希望这对某人有所帮助。
Mininet 不知道 h1、h2 等是什么。
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')
h2 = net.get('h2')
h1.cmd('ping h2')
应该可以解决问题:)
我需要使用 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 只能在彼此之后执行一个命令)。
为什么 h1.cmd('ping h2')
不起作用?
命令:
h1.cmd('ping h2')
正在返回调试错误:
Unable to resolve 'h2'
尽管文档 HERE 说明这是格式化命令的方式。
已通过使用以下方法解决此问题:
h1.cmd('ping 10.0.0.2')
虽然我仍然不知道这是为什么。如果有人知道我很想听听。我希望这对某人有所帮助。
Mininet 不知道 h1、h2 等是什么。
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')
h2 = net.get('h2')
h1.cmd('ping h2')
应该可以解决问题:)