尽管阅读了手册页并搜索了 StackExchange 和更广泛的互联网,但我未能找到一种方法来制作基于时间的、轮换的、有限计数的 tcpdump。
例如,我希望每小时有一个文件,时间不超过 24 小时。但我不希望 tcpdump 在 24 个文件后停止,我希望它删除最旧的文件并创建一个新文件。我希望它永远运行,但不要生成超过 24 个文件。
手册页似乎表明,如果-C -W -G
一起使用,就可以实现这一目标,但我的测试尚未表明这是可行的。
使用-G -W
并strftime
在 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 秒创建一个新文件,并以当前小时命名。更改日期后,前一小时的文件将依次替换。