0

我正在使用 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))

先感谢您

4

0 回答 0