【发布时间】:2017-08-07 21:54:45
【问题描述】:
我正在使用subprocess.Popen 执行tcpdump,它可以在我的代码中正确收集包信息。
之后,我想通过另一个线程使用os.kill(pid, signal.SIGKILL) 杀死 tcpdump,然后记录相关的数据包统计信息。
一般来说,我想在 bash 中运行 tcpdump 时获取统计信息:
- 捕获的数据包
- 过滤器收到的数据包
- 内核丢弃的数据包
我尝试了以下格式的cmd:
proc=subprocess.Popen(shlex.split(tcpdump_cmd),
stdouot=subprocess.PIPE,
stderr=subprocess.PIPE)
但是,在通过proc.stdout/stderr.readline() 杀死proc.pid 后,我未能获得统计数据。
我也试过用:
fcntl.fcntl(fd.fileno().fcntl.F_SETFL,
(fcntl.fcntl(fd.fileno.F_GETFL) | os.O_NDELAY | os.O_NONBLOCK))
他们都不能像我预期的那样输出统计数据。
此外,我尝试了shell=True 和shell=false - 结果相同。
有什么方法可以实现吗? 谢谢!
附:我发现有一些与 tcpdump 相关的主题,不幸的是,据我所知,我没有发现他们可以帮助我解决这个问题。
【问题讨论】:
标签: python subprocess tcpdump