我需要运行tshark来长时间记录数据包。在保存数据包时,我还想应用显示过滤器,因为它们被解析以检测错误。
不要填充磁盘并创建巨大的文件我想将其与
--ring-buffer
选项一起使用问题是 tshark 不支持同时应用显示过滤器和保存到文件。
我可以使用
tee
与 tshark 或 tcpdump 进行管道传输,但这不适用于环形缓冲区文件。或者为此使用 2 个单独的进程,但这仍然是创建和删除输出文件的问题。
只有 tshark 才有可能实现这个功能吗?或者我应该寻找其他工具,例如
tee
来生成循环缓冲区?
谢谢
tcpdump
和 tshark
的组合对您有用,如本例所示?
tcpdump -i eth0 -W 10 -C 1 -w file.pcap -z tshark.sh
tshark.sh
可执行脚本的内容:
#!/bin/sh
echo "Post processing $1"
tshark -Y "some display filter" -r $1
echo ""
每个文件达到其大小限制后,将调用
-z postrotate
命令,并且 tshark
将能够对文件进行后处理。这本身并不是实时的,因为在 tshark
运行之前会有延迟,并且它会同时对文件中的所有数据包执行此操作,因此您一次会获得批量输出。您可以通过试验传递给 -C
的值来在一定程度上控制延迟。较大的值将创建更大的文件,但也会在 tshark
后处理中产生更大的延迟。
理想情况下,您还可以指定
tcpdump
的 -G rotate_seconds
选项,但手册页当前指示, “如果与 -C 和 -G 一起使用,则 -W 选项当前将被忽略,并且只会影响文件名。” 我不确定为什么会出现这种情况,但您可以考虑提交 tcpdump
增强错误请求,看看是否有人愿意更改此行为。