tcpdump 基于时间的循环旋转

tcpdump 基于时间的循环旋转

尽管阅读了手册页并搜索了 StackExchange 和更广泛的互联网,但我未能找到一种方法来制作基于时间的、轮换的、有限计数的 tcpdump。

例如,我希望每小时有一个文件,时间不超过 24 小时。但我不希望 tcpdump 在 24 个文件后停止,我希望它删除最旧的文件并创建一个新文件。我希望它永远运行,但不要生成超过 24 个文件。

手册页似乎表明,如果-C -W -G一起使用,就可以实现这一目标,但我的测试尚未表明这是可行的。

使用-G -Wstrftime在 5 个文件后退出

# tcpdump -w foo.%F_%H%M%S -G 5 -W 5 -Z root port 22
tcpdump: listening on enp0s3, link-type EN10MB (Ethernet), capture size 65535 bytes
Maximum file limit reached: 5

一起使用这三个似乎只会限制每个时间范围生成的文件数量。例如,下面将在每个 5 秒窗口中捕获最多 5 x 1MB 文件。如果5秒内超过5MB,则只保留最后5MB。但文件总数将永远增长。

# tcpdump -w foo.%F_%H%M%S -G 5 -C 1 -W 5 -Z root port 22

这将捕获 5 x 1MB 文件并按环覆盖。

# tcpdump -w foo -C 1 -W 5 -Z root port 22

但我想按时间而不是大小旋转。

答案1

以下面为例,无限期地每分钟生成 6 个捕获文件:

# tcpdump -i eth0 -G 10 -w dump-%S.pcap

%S请注意,只需在模板文件名中指定第二个时间变量,并由 指定十秒的旋转时间范围-G。当捕捉时间每分钟变化时,tcpdump覆盖之前的秒标记文件。

现在,每小时轮换和每日循环捕获可以通过以下方式实现:

# tcpdump -i eth0 -G 3600 -w dump-%H.pcap

同样的原理也适用于此。tcpdump每 3600 秒创建一个新文件,并以当前小时命名。更改日期后,前一小时的文件将依次替换。

相关内容