我希望能够捕获旋转的 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
用于限制文件数量。所以如果你想无限期地捕获,请不要使用它。