我正在使用Python子进程模块来调用“iperf”命令。然后我解析输出并获取iperf客户端的源端口,例如4321但是当我监视网络4321丢失时我只能看到UDP端口12851和0.奇怪的是,当我直接从Ubuntu终端调用iperf命令时,我可以看到iperf在网络中报告的源端口(4321)。 任何人都可以帮助我解释为什么这个港口的变化发生了吗?以及如何强制子进程在iperf发送的原始端口上发送数据?
这就是我调用iperf并获取源端口的方法:
import subprocess, sys, os
cmd = "iperf -c %s -p %s -u -b %sm -t 10 -l 1500" %(self.ip,self.port,self.bw)
print cmd
p = subprocess.Popen(cmd, stdout=subprocess.PIPE, shell=True)
(output, err) = p.communicate()
o_list = output.split(']')
o_list = o_list[1].split(' ')
for i in range(len(o_list)):
if o_list[i] == "port":
self.my_port = int(o_list[i+1])
break
#endIf
我在终端中使用相同的命令并获得不同的输出:
iperf -c 10.1.1.2 -p 5001 -u -b 10m -t 10 -l 1500
我正在软件定义网络领域开展一个项目并使用POX作为网络控制器,因此我可以轻松监控所需的数据包(此处为UDP数据包)及其源和目标端口。这是我添加到forwarding.l2_learning以监控UDP端口的代码:
if msg.match.dl_type == 0x0800:
if msg.match.nw_proto == 17:
log.warning("FOUND UDP" + str(msg.match.tp_src))
提前谢谢