tcpdump - gira os arquivos de captura usando -G, -W e -C

9

Eu estou olhando para ser capaz de capturar uma saída tcpdump rotativa que captura 30 minutos de dados, em 48 arquivos, ciclicamente.

A página man implica que isso deve ser possível, mas meu teste não parece produzir o resultado que estou procurando:

-W

      Used in conjunction with the -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.

      Used in conjunction with the -G option, this will limit the number of rotated dump files that get created, exiting with status 0 when reaching the limit.  If used with -C as well, the behavior will result in cyclical files per timeslice.

Estou executando isso em clientes do OS X 10.9.5 / 10.10.3. Aqui está o comando de teste; apenas sai depois do terceiro arquivo:

tcpdump -i en0 -w /var/tmp/trace-%Y-%M-%d_%H.%M.%S.pcap -W 3 -G 3 -C -K -n
    
por Andrew 22.04.2015 / 19:06

4 respostas

11

Isso porque você escreveu -W 3 em vez de -W 48 . Existem, no entanto, outros erros no seu comando.

A opção -G significa:

-G rotate_seconds

      If specified, rotates the dump file specified with the -w option every rotate_seconds seconds.  Savefiles will have the name specified by -w which should include a time format as defined by strftime(3).  If no time format is specified, each new file will overwrite the previous.

      If used in conjunction with the -C option, filenames will take the form of 'file<count>'.

Como você escreveu -G 3 , você estará girando isso a cada 3 segundos, enquanto declarou

...which captures 30 minutes worth of data

Além disso, o esquema de nomes está errado: acima,

If used in conjunction with the -C option, filenames will take the form of 'file<count>'.

Assim, não faz sentido especificar o formato da hora para o nome.

Além disso, a opção -C não tem argumento, enquanto de acordo com a página de manual , ela deve:

tcpdump [ -AdDefIKlLnNOpqRStuUvxX ] [ -B buffer_size ] [ -c count ]
-C file_size ] [ -G rotate_seconds ] [ -F file ] [ -I interface ] [ -m module ] [ -M secret ] [ -r file ] [ -s snaplen ] [ -T type ] [ -w file ] [ -W filecount ] [ -E spi@ipaddr algo:secret,... ] [ -y datalinktype ] [ -z postrotate-command ] [ -Z user ] [ expression ]

A página do manual afirma:

-C

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

Portanto, você deve especificar -C 100 para produzir arquivos de 100MB.

No final, seu comando deve ser:

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

Isso rotacionará os arquivos (dos nomes trace1, trace2, ...) ciclicamente, com o período 48, a cada 1800 segundos (= 30 minutos) ou a cada 100MB, o que ocorrer primeiro.

    
por 17.06.2015 / 12:52
3

Parece-me que tudo que você precisa é

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

O especificador de formato strftime que -G espera no nome -w do arquivo não precisa representar uma data e hora completas. Com apenas% H e% M ali, e um tempo de rotação de exatamente meia hora, qualquer chamada do tcpdump gerará apenas dois valores diferentes de% M com intervalo de meia hora, e os arquivos de rastreamento de ontem serão sobrescritos quando a mesma hora e os números de minuto rolam novamente.

    
por 09.05.2017 / 17:04
3

Expandindo a resposta do flabdablet (alterando -G 1800 para -G 300 - rotação a cada cinco minutos - apenas para fins de teste),

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

fornecerá %m=month , %d=day of month , %H=hour of day , %M=minute of day , %S=second of day , %s=millisecond of day , resultando em

/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

Muito útil para organizar traços para esses problemas intermitentes. Além disso, se você não for root, talvez queira sudo e, claro, torná-lo um nohup:

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

Após algumas experiências, não consegui que a resposta @MariusMatutiae funcionasse como esperado. Se o tempo se tornar o fator limitante e sem a adição do formato de hora ao nome do arquivo, o arquivo pcap atual será simplesmente sobrescrito.

Por exemplo, tente:

tcpdump -i en0 -w /var/tmp/trace -W 10 -G 5 -C 1

Tudo o que você tem é trace.pcap0 sendo escrito repetidamente.

Como sugerido no comentário, se você adicionar a formatação de hora ao nome do arquivo, você acabará com toda e crescente lista de arquivos.

Portanto, eu tive que ficar com arquivos limitados de tamanho simples:

tcpdump -i en0 -w /var/tmp/trace -W 48 -C 100
    
por 23.09.2017 / 00:58