循环tcpdump输出

网络工程 转储 电容
2021-07-29 17:14:40

我有外部硬件,可以通过指定的端口连续发送 UDP 数据段。我想将最后几个接收到的数据包连续存储在一个文件中(也可以是基于时间的)。

如果我使用tcpdumpwith-G-C,则要么创建一个新文件,要么在达到限制后覆盖旧文件。然而,这不是我需要的。我想要一个连续旋转的文件:当一个新的数据包进来时,最旧的数据包应该被删除,为新的数据包腾出空间。

通过这种方式,我知道我将始终(当然,在缓冲区填满之后)有足够大的样本(而不是 0 到 N 个数据包/字节/秒之间的随机大小)。

经过一些网络搜索,我发现曾经有一个名为pcapture的工具,它使用循环缓冲区来实现类似的功能,但它的生命周期很短,甚至在 Linux 下都不支持。

使用现代工具实现这种循环的最佳方法是什么?

2个回答

仔细想想,在磁盘文件中创建循环缓冲区非常复杂,根本不适合典型的磁盘 I/O。让它稍微可行的唯一方法是找到一种方法将固定长度的条目写入文件,这听起来不像是数据包跟踪的良好匹配。

如上所述,我会改为使用 tshark 中的 ringbuffer 功能来创建几个文件,捕获将依次使用这些文件。如果您指定创建 N 个文件(5 到 10 个对我来说似乎合理),并告诉 tshark 在固定时间 T 后轮换,您将拥有合理数量的日志文件,确保它们不会随着时间的推移而累积,方便地访问之间的事情(N-1)*TN*T数据包的分钟。

根据 tshark 手册,您需要使用这样的-b选项来获取 6 个文件,每个文件 2 分钟的日志(请注意,-b必须指定两次)

-b duration:120 -b files:6

如果您需要一次性查看整个捕获,则可以使用该mergecap实用程序将 N 个日志文件合并为一个大文件,以便在 Wireshark 中使用。

支持循环日志记录和循环缓冲的wireshark。如果您希望端口的一行跟踪生成新文件,那么您将使文件大小设置超小。不确定最小支持文件大小是多少。必须将wireshark设置为过滤以仅捕获所需的端口。那部分并不难。

我想它可以通过一些实验来完成。太为这篇文章写了一个主题。

www.wireshark.org。大多数 linux 存储库都有可以下载的wireshark。

如果它是无头服务器,那么使用正确的参数调整启动配置将需要更多的工作。

祝你好运。