tcpdump – 使用 -G、-W 和 -C 轮换捕获文件

tcpdump – 使用 -G、-W 和 -C 轮换捕获文件

我希望能够捕获旋转的 tcpdump 输出,该输出可循环捕获 30 分钟的数据并保存到 48 个文件中。

手册页意味着这应该是可能的,但我的测试似乎没有产生我想要的结果:

-W

      -C选项,这会将创建的文件数限制为指定的数量,并从头开始覆盖文件,从而创建一个“旋转”缓冲区。此外,它将使用足够的前导 0 来命名文件,以支持最大文件数,从而使它们能够正确排序。

      -G选项,这将限制创建的旋转转储文件的数量,达到限制时以状态 0 退出。如果与-C同样,这种行为也会导致每个时间片内出现循环文件。

我在 OS X 10.9.5/10.10.3 客户端上运行此程序。这是测试命令;它在第三个文件后退出:

tcpdump -i en0 -w /var/tmp/trace-%Y-%M-%d_%H.%M.%S.pcap -W 3 -G 3 -C -K -n

答案1

这是因为您写的-W 3是 而不是-W 48。但是,您的命令中还有其他错误。

该选项的-G含义是:

-G rotate_seconds

      如果指定,则旋转指定的转储文件-w选择每一个旋转秒数秒。保存文件的名称将由-w其中应包含 strftime(3) 定义的时间格式。如果没有指定时间格式,则每个新文件都会覆盖前一个文件。

      如果与-C选项,文件名将采用'文件<数量>”。

由于你写了-G 3,你将每 3 秒旋转一次,而你声明

...捕获 30 分钟的数据

此外,命名方案是错误的:从上面来看,

如果与-C选项,文件名将采用'文件<数量>”。

因此指定名称的时间格式是没有意义的。

此外,该-C选项没有参数,而根据手册页, 它应该:

tcpdump [ -AdDefIKlLnNOpqRStuUvxX ][ -B 缓冲区大小 ][ -C 数数 ]
-C 文件大小 ][ -G 旋转秒数 ][ -F 文件 ][ -我 界面 ][ -m 模块 ][ -M 秘密 ][ -r 文件 ][ -s 快照 ][ -T 类型 ][ -w 文件 ][ -W 文件数 ][ -E spi@ipaddr 算法:秘密,... ][ -y 数据链路类型 ][ -z 后旋转命令 ][ -Z 用户 ][ 表达 ]

手册页状态:

-C

      在将原始数据包写入保存文件之前,请检查文件当前是否大于文件大小如果是,则关闭当前保存文件并打开一个新文件。第一个保存文件之后的保存文件将具有使用-w标志,后面跟着一个数字,从 1 开始向上。单位文件大小为数百万字节(1,000,000 字节,而不是 1,048,576 字节)。

因此您应该指定-C 100以便生成 100 MB 的文件。

最后,你的命令应该是:

tcpdump -i en0 -w /var/tmp/trace -W 48 -G 1800 -C 100 -K -n

这将以 48 为周期,循环轮换文件(名为 trace1、trace2、...),每 1800 秒(=30 分钟)或每 100 MB 一次(以先到者为准)。

答案2

扩展flabdablet 的回答 (更改-G 1800-G 300每五分钟旋转一次 - 仅用于测试目的),

tcpdump -i en0 -w /var/tmp/trace-%m-%d-%H-%M-%S-%s -W 3 -G 300

将为您提供%m=month%d=day of month%H=hour of day%M=minute of day%S=second of day%s=millisecond of day从而

/var/temp/trace-03-02-08-30-56-1520002568
/var/temp/trace-03-02-08-35-56-1520002568
/var/temp/trace-03-02-08-40-56-1520002568

对于整理那些令人讨厌的间歇性问题的踪迹非常有用。另外,如果您不是 root 用户,您可能希望将sudo其设为 nohup:

sudo bash -c "nohup tcpdump -i en0 -w /var/tmp/trace-%m-%d-%H-%M-%S-%s -W 3 -G 300 &"

答案3

我觉得你需要的是

tcpdump -i en0 -G 1800 -w /var/tmp/trace-%H-%M.pcap

-G 在 -w 文件名中期望的 strftime 格式说明符不必代表完整的日期和时间。如果其中只有 %H 和 %M,并且旋转时间恰好为半小时,则任何给定的 tcpdump 调用都只会生成两个相隔半小时的不同 %M 值,并且当相同的小时和分钟数字再次滚动时,昨天的跟踪文件将被覆盖。

答案4

是的,它似乎不起作用MariusMatutiae 的答案是。

tcpdump ...{other options}... -w httpdebug.pcap -W 48 -G 1800 -C 100
$ ls -l
-rw-r--r--. 1 tcpdump tcpdump  100007441 Mar 17 17:57 httpdebug.pcap00
-rw-r--r--. 1 tcpdump tcpdump   46895104 Mar 17 18:02 httpdebug.pcap01
-rw-r--r--. 1 tcpdump tcpdump   93091143 Mar 17 17:47 httpdebug.pcap02
-rw-r--r--. 1 tcpdump tcpdump    5372072 Mar 17 16:17 httpdebug.pcap03

在我看来,它可能会-C 100在 30 分钟内捕获尽可能多的 MB 文件,因为httpdebug.pcap03它有最早的时间戳,而且比 100MB 小很多,所以它似乎是在 30 分钟时被截断的。一旦达到 30 分钟,它似乎就会跳回httpdebug.pcap00并在达到 100MB 时增加数字。这意味着,如果您在 30 分钟内收到大量请求,那么您会得到非常高的 httpdebug.pcapXX 数字。如果您在一段时间内再也没有达到那么多请求,那么那些高 httpdebug.pcapXX 数字将永远不会被覆盖。

所以我想每个时间片的循环文件意味着时间片为-G 1800,它将每 循环一次-G 1800并每 增加一次-C 100

我不确定这是否-W 48会影响它,但也许如果你到达httpdebug.pcap47(计数从 0 开始,它就会停止捕获数据包。


最近,有一个GitHub 问题公开了令人困惑的措辞。他们没有改变实现,但他们试图使文档更清晰一些。

提议的变更被合并到2019 年 1 月 28 日

截至 2019 年 3 月 17 日,当前文档如下:

-C

.BI \-C " file_size"
Before writing a raw packet to a savefile, check whether the file is
currently larger than \fIfile_size\fP and, if so, close the current
savefile and open a new one.  Savefiles after the first savefile will
have the name specified with the
.B \-w
flag, with a number after it, starting at 1 and continuing upward.
The units of \fIfile_size\fP are millions of bytes (1,000,000 bytes,
not 1,048,576 bytes).

-G

.BI \-G " rotate_seconds"
If specified, rotates the dump file specified with the
.B \-w
option every \fIrotate_seconds\fP seconds.
Savefiles will have the name specified by
.B \-w
which should include a time format as defined by
.BR strftime (3).
If no time format is specified, each new file will overwrite the previous.
Whenever a generated filename is not unique, tcpdump will overwrite the
preexisting data; providing a time specification that is coarser than the
capture period is therefore not advised.
.IP
If used in conjunction with the
.B \-C
option, filenames will take the form of `\fIfile\fP<count>'.

-W

.B \-W
Used in conjunction with the
.B \-C
option, this will limit the number
of files created to the specified number, and begin overwriting files
from the beginning, thus creating a 'rotating' buffer.
In addition, it will name
the files with enough leading 0s to support the maximum number of
files, allowing them to sort correctly.
.IP
Used in conjunction with the
.B \-G
option, this will limit the number of rotated dump files that get
created, exiting with status 0 when reaching the limit.
.IP
If used in conjunction with both
.B \-C
and
.B \-G,
the
.B \-W
option will currently be ignored, and will only affect the file name.

我仍然认为这有点令人困惑,但我猜与我上面的结论的区别在于,它说-W当使用时-C -G不会影响文件名以外的任何东西。

一般情况下,-W用于限制文件数量。所以如果你想无限期地捕获,请不要使用它。

相关内容