使用python子进程时使用不同的UDP源端口

使用python子进程时使用不同的UDP源端口,python,linux,subprocess,iperf,Python,Linux,Subprocess,Iperf,我正在使用Python子流程模块调用“iperf”命令。然后我解析输出并获取iperf客户端的源端口,例如4321,但当我监视网络时,4321丢失,我只能看到UDP端口12851和0。奇怪的是,当我直接从Ubuntu终端调用iperf命令时,我可以在网络中看到iperf报告的源端口(4321)。 有人能帮我解释一下为什么会发生港口的变化吗?以及如何强制子流程在iperf发送的原始端口上发送数据 这就是我调用iperf并获取源端口的方式: import subprocess, sys, os cm

我正在使用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_学习监视UDP端口的代码:

if msg.match.dl_type == 0x0800:
  if msg.match.nw_proto == 17:
    log.warning("FOUND UDP" + str(msg.match.tp_src))

提前感谢

添加您正在使用的代码我使用tcpdump监控流量,iperf端口和监控端口是相同的。所以你应该找到POX的缺陷。