【发布时间】:2011-10-21 07:51:46
【问题描述】:
我正在尝试将tshark 输出通过管道传输到awk。 tshark 命令本身运行良好,当通过管道传输到其他程序(如cat)时,它运行良好(实时打印输出)。但是,当通过管道传输到 awk 时,它挂起并且没有任何反应。
sudo tshark -i eth0 -l -f "tcp" -R 'http.request.method=="GET"' -T fields -e ip.src -e ip.dst -e
tcp.srcport -e tcp.dstport -e tcp.seq -e tcp.ack | awk '{printf("mz -A %s -B %s -tcp \"s=%s sp=%s
dp=%s\"\n", $2, $1, $5, $4, $3)}'
这是一个更简单的版本:
sudo tshark -i eth0 -f "tcp" -R 'http.request.method=="GET"' | awk '{print $0}'
比较一下,以下工作正常(虽然不是很有用):
sudo tshark -i eth0 -f "tcp" -R 'http.request.method=="GET"' | cat
提前致谢。
【问题讨论】:
-
请问什么操作系统/版本的 Linux。此外,如果您的系统有
unbuffer,请尝试将其添加到组合中。不是一个很好的解决方案,但如果你需要它工作,那可能会做到。祝你好运。 -
使用 Ubuntu 11.04。我尝试了 unbuffer,但没有运气 - 它只是挂起。
-
您的问题有据可查。但是......是否可以安全地假设您使用
cat的最后一个示例在使用tshark 的所有选项(即-T fields ...)时也有效?看来awk处理输出应该没有问题。另外,当你把sudo从图片中取出时会发生什么?祝你好运。 -
cat 适用于所有选项。我刚刚意识到 awk '最终'工作 - 几秒钟后。所以我认为 awk 正在缓冲或其他什么。由于问题的性质,快速响应非常重要,所以我需要想办法停止 awk 缓冲。
标签: awk packet-capture piping tshark