tcpdump - ruota i file di acquisizione usando -G, -W e -C


14

Sto cercando di essere in grado di catturare un output tcpdump rotante che cattura ciclicamente dati di 30 minuti, in 48 file.

La pagina man implica che ciò dovrebbe essere possibile, ma i miei test non sembrano produrre il risultato che sto cercando:

-W

      Utilizzato insieme -Call'opzione, questo limiterà il numero di file creati al numero specificato e inizierà a sovrascrivere i file dall'inizio, creando così un buffer 'rotante'. Inoltre, nominerà i file con abbastanza 0 iniziali per supportare il numero massimo di file, consentendo loro di ordinare correttamente.

      Utilizzato insieme -Gall'opzione, questo limiterà il numero di file di dump ruotati che vengono creati, uscendo con lo stato 0 quando si raggiunge il limite. Se utilizzato anche con -C, il comportamento si tradurrà in file ciclici per timeslice.

Sto eseguendo questo su client OS X 10.9.5 / 10.10.3. Ecco il comando test; esce appena dopo il 3 ° file:

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

per favore vedi la mia risposta
MariusMatutiae,

Risposte:


13

Questo perché hai scritto -W 3invece di -W 48. Vi sono, tuttavia, altri errori nel tuo comando.

L'opzione -Gsignifica:

-G rotate_seconds

      Se specificato, ruota il file di dump specificato con l' -wopzione ogni rotate_seconds secondi. I file di salvataggio avranno il nome specificato con il -wquale dovrebbe includere un formato orario definito da strftime (3). Se non viene specificato un formato orario, ogni nuovo file sovrascriverà il precedente.

      Se utilizzato insieme -Call'opzione, i nomi dei file assumeranno la forma di " file <count>".

Dal momento che hai scritto -G 3, lo ruoterai ogni 3 secondi, mentre hai dichiarato

... che acquisisce 30 minuti di dati

Inoltre, lo schema di denominazione è errato: da quanto sopra,

Se utilizzato insieme -Call'opzione, i nomi dei file assumeranno la forma di " file <count>".

Pertanto non ha senso specificare il formato dell'ora per il nome.

Inoltre, l' -Copzione non ha argomenti, mentre, secondo la pagina man , dovrebbe:

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  ] [  espressione  ]

La pagina man afferma:

-C

      Prima di scrivere un pacchetto non elaborato in un file di salvataggio, verificare se il file è attualmente più grande di file_size e, in tal caso, chiudere il file di salvataggio corrente e aprirne uno nuovo. I file di salvataggio dopo il primo file di salvataggio avranno il nome specificato con il -wflag, seguito da un numero, che inizia da 1 e continua verso l'alto. Le unità di file_size sono milioni di byte (1.000.000 di byte, non 1.048.576 byte).

Quindi è necessario specificare -C 100per produrre file da 100 MB.

Alla fine, il tuo comando dovrebbe essere:

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

Questo ruoterà i file (di nomi trace1, trace2, ...) ciclicamente, con il periodo 48, ogni 1800 secondi (= 30 minuti) o ogni 100 MB, a seconda di quale evento si verifichi per primo.


Alla fine della risposta manca la condizione If no time format is specified, each new file will overwrite the previous.(ho aggiornato la risposta.)
okwap

2
@okwap, quando hai modificato la risposta (per aggiungere -% Y-% m-% d_% H:% M:% S), hai rotto insieme la parte ciclica dell'uso di -G, -C e -W. La risposta originale usando solo / var / tmp / trace per il nome file -w era corretta e generava gli output ciclici previsti come descritto (trace1, trace2, ...). Quando si usano -G, -C e -W insieme, non è possibile utilizzare il formato strftime nel nome file e ottenere comunque gli output ciclici. Con la tua modifica, tcpdump continuerà a scrivere i file in modo non ciclico perché i nomi dei file non si ripetono mai.
Bill Menees,

@BillMenees Grazie per avermi portato alla mia attenzione, ho annullato la modifica di okwap.
MariusMatutiae,

Proprio come Swinster nel commento qui sotto, noto che questa risposta non produce il comportamento previsto. L'uso di -w -W -C e -G insieme fa sì che lo stesso file venga sovrascritto più volte. Essa non causare una serie di file da creare pari a -W <n> come ci si aspetterebbe.
Niels2000,

6

Espandendosi sulla risposta di flabdablet (cambiando -G 1800in -G 300- rotazione ogni cinque minuti - solo a scopo di test),

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

vi darà %m=month, %d=day of month, %H=hour of day, %M=minute of day, %S=second of day, %s=millisecond of day, con conseguente

/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

Molto utile per l'organizzazione di tracce per quei fastidiosi problemi intermittenti. Inoltre, se non sei root, potresti volerlo sudoe ovviamente renderlo un nohup:

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

3

Mi sembra che tutto ciò di cui hai bisogno sia

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

L'identificatore del formato strftime che -G si aspetta dal nome -w del file non deve rappresentare una data e un'ora complete. Con solo% H e% M all'interno, e un tempo di rotazione di esattamente mezz'ora, ogni data invocazione di tcpdump genererà sempre e solo due diversi valori% M a mezz'ora di distanza, e i file di traccia di ieri verranno sovrascritti alla stessa ora e i numeri dei minuti scorrono di nuovo.


1

Dopo alcuni esperimenti, non sono riuscito a ottenere la risposta di @MariusMatutiae come previsto. Se l'ora diventa il fattore limitante e senza l'aggiunta del formato dell'ora al nome del file, il file pcap corrente viene semplicemente sovrascritto.

Ad esempio, prova:

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

Tutto ciò che si finisce con viene trace.pcap0scritto più e più volte.

Come suggerito nel commento, se aggiungi la formattazione dell'ora al nome del file, finisci semplicemente con e con ogni elenco crescente di file.

Pertanto, ho dovuto attenermi a file di dimensioni limitate semplici:

tcpdump -i en0 -w /var/tmp/trace -W 48 -C 100

0

Sì, non sembra funzionare come dice la risposta di 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

Mi sembra che potrebbe catturare il maggior numero -C 100possibile di file MB in un periodo di 30 minuti perché httpdebug.pcap03ha il primo timestamp ed è molto più piccolo di 100 MB, quindi sembra che sia stato tagliato in un segno di 30 minuti. Una volta che raggiunge i 30 minuti, sembra tornare indietro httpdebug.pcap00e aumentare il numero mentre raggiunge i 100 MB. Ciò significa che se si hanno molte richieste in un periodo di 30 minuti, si arriva a numeri httpdebug.pcapXX molto elevati. Se non raggiungi più così tante richieste in un determinato periodo, quei numeri httpdebug.pcapXX elevati non verranno mai sovrascritti.

Quindi sto pensando che i file ciclici per timeslice significano che il timeslice è -G 1800e scorrerà ogni -G 1800e incrementerà ogni -C 100.

Non sono sicuro che -W 48influisca, ma forse se ci riesci httpdebug.pcap47(il conteggio inizia da 0`, smetterà di catturare i pacchetti.


Un po 'di recente, c'è stato un problema di GitHub aperto sulla formulazione confusa. Non hanno modificato l'implementazione, ma hanno cercato di rendere la documentazione un po 'più chiara.

Le modifiche proposte sono state integrate il 28 gennaio 2019 .

Ad oggi, 17 marzo 2019, ecco la documentazione attuale:

-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.

Penso ancora che sia un po 'confuso, ma immagino che la differenza dalle mie conclusioni sopra, sia che dice che -Wse usato con -C -Gnon influisce nient'altro che sul nome del file.

In generale, -Wviene utilizzato per limitare il numero di file. Quindi non usarlo se vuoi catturare indefinitamente.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.