尽管阅读了手册页并搜索了 StackExchange 和更广泛的互联网,我还是没有找到一种方法来制作基于时间的、旋转的、有限的计数、tcpdump。
例如,我希望每小时有一个文件,不超过 24 小时。但我不希望 tcpdump 在 24 个文件后停止,我希望它删除最旧的文件并创建一个新文件。我希望它永远运行,但永远不会超过 24 个文件。
手册页似乎表明,如果您-C -W -G一起使用,您可以实现这一目标,但我的测试并未显示此方法有效。
使用-G -W和 astrftime在 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
Run Code Online (Sandbox Code Playgroud)
将所有三个一起使用似乎只是限制了每个时间范围生成的文件数量。例如,下面将在每个 5s 窗口中捕获多达 5 x 1MB 的文件。如果 5s 超过 5MB,则只保留最后的 5MB。但是,总文件数将永远增长。
# tcpdump -w foo.%F_%H%M%S -G 5 -C 1 -W 5 -Z root port 22
Run Code Online (Sandbox Code Playgroud)
这将捕获 5 x 1MB 文件并在环中覆盖。
# tcpdump -w foo -C 1 -W 5 -Z root port 22
Run Code Online (Sandbox Code Playgroud)
但我想按时间旋转,而不是大小。
以每分钟无限生成六个捕获文件为例:
# tcpdump -i eth0 -G 10 -w dump-%S.pcap.
请注意,仅%S需要在模板文件名中指定第二个时间变量,由 指定十秒的旋转时间范围-G。当捕获时间从分钟变为分钟时,tcpdump覆盖之前的秒标记文件。
现在,可以通过以下方式实现每小时轮换和每日循环捕获:
# tcpdump -i eth0 -G 3600 -w dump-%H.pcap.
同样的道理也适用于此。tcpdump每 3600 秒创建一个新文件,以当前小时命名。更改日期后,将依次替换之前的小时文件。