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