tcpdump - rotation des fichiers de capture en utilisant -G, -W et -C

14

Je cherche à pouvoir capturer une sortie tcpdump rotative qui capture 30 minutes de données, dans 48 fichiers, de manière cyclique.

La page de manuel implique que cela devrait être possible, mais mes tests ne semblent pas produire le résultat que je recherche:

-W

      Utilisé conjointement avec l' -Coption, cela limitera le nombre de fichiers créés au nombre spécifié et commencera à remplacer les fichiers depuis le début, créant ainsi un tampon «rotatif». De plus, il nommera les fichiers avec suffisamment de 0 au début pour prendre en charge le nombre maximal de fichiers, ce qui leur permettra de trier correctement.

      Utilisé conjointement avec l' -Goption, cela limitera le nombre de fichiers de vidage tournés qui seront créés, en quittant avec le statut 0 lorsque vous atteindrez la limite. S'il est également utilisé avec -C, le comportement entraînera des fichiers cycliques par tranche de temps.

J'exécute cela sur les clients OS X 10.9.5 / 10.10.3. Voici la commande de test; il sort juste après le 3ème fichier:

tcpdump -i en0 -w /var/tmp/trace-%Y-%M-%d_%H.%M.%S.pcap -W 3 -G 3 -C -K -n
Andrew
la source
pls voir ma réponse
MariusMatutiae

Réponses:

13

C'est parce que vous avez écrit -W 3au lieu de -W 48. Il y a cependant d'autres erreurs dans votre commande.

L'option -Gsignifie:

-G rotate_seconds

      S'il est spécifié, fait pivoter le fichier de vidage spécifié avec l' -woption toutes les secondes de rotation_secondes . Les fichiers de sauvegarde auront le nom spécifié par -wlequel devrait inclure un format d'heure tel que défini par strftime (3). Si aucun format d'heure n'est spécifié, chaque nouveau fichier remplacera le précédent.

      S'ils sont utilisés conjointement avec l' -Coption, les noms de fichiers prendront la forme de « fichier <nombre>».

Depuis que vous avez écrit -G 3, vous effectuerez une rotation toutes les 3 secondes, pendant que vous déclarerez

... qui capture 30 minutes de données

En outre, le schéma de dénomination est incorrect: à partir de ce qui précède,

S'ils sont utilisés conjointement avec l' -Coption, les noms de fichiers prendront la forme de « fichier <nombre>».

Il est donc inutile de spécifier le format d'heure pour le nom.

De plus, l' -Coption n'a pas d'argument, alors que, selon la page de manuel , elle devrait:

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

La page de manuel indique:

-C

      Avant d'écrire un paquet brut dans un fichier de sauvegarde, vérifiez si le fichier est actuellement plus grand que file_size et, si c'est le cas, fermez le fichier de sauvegarde en cours et ouvrez-en un nouveau. Les fichiers de sauvegarde après le premier fichier de sauvegarde auront le nom spécifié avec l' -windicateur, avec un numéro après, commençant à 1 et continuant vers le haut. Les unités de file_size sont des millions d'octets (1 000 000 octets, et non 1 048 576 octets).

Vous devez donc spécifier -C 100afin de produire des fichiers de 100 Mo.

Au final, votre commande devrait être:

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

Cela fera tourner les fichiers (des noms trace1, trace2, ...) de manière cyclique, avec une période de 48, soit toutes les 1800 secondes (= 30 minutes) ou toutes les 100 Mo, selon la première éventualité.

MariusMatutiae
la source
La réponse If no time format is specified, each new file will overwrite the previous.
finale ne contient pas
2
@okwap, lorsque vous avez modifié la réponse (pour ajouter -% Y-% m-% d_% H:% M:% S), vous avez rompu la partie cyclique de l'utilisation de -G, -C et -W ensemble. La réponse d'origine en utilisant juste / var / tmp / trace pour le nom de fichier -w était correcte et a généré les sorties cycliques prévues comme décrit (trace1, trace2, ...). Lorsque vous utilisez -G, -C et -W ensemble, vous ne pouvez pas utiliser le format strftime dans le nom de fichier et toujours obtenir les sorties cycliques. Avec votre modification, tcpdump continuera simplement à écrire des fichiers de manière non cyclique car les noms de fichiers ne se répètent jamais.
Bill Menees
@BillMenees Merci d'avoir porté cela à mon attention, j'ai annulé la modification d'okwap.
MariusMatutiae
Tout comme Swinster dans le commentaire ci-dessous, je note que cette réponse ne produit pas le comportement attendu. L'utilisation de -w -W -C et -G conjointement entraîne l'écrasement du même fichier encore et encore. Cela n'entraîne pas la création d'un nombre de fichiers égal à -W <n> comme on pourrait s'y attendre.
Niels2000
6

Extension de la réponse de flabdablet (changement -G 1800en -G 300- rotation toutes les cinq minutes - uniquement à des fins de test),

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

vous donnera %m=month, %d=day of month, %H=hour of day, %M=minute of day, %S=second of day, %s=millisecond of day, ce qui

/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

Très utile pour organiser les traces de ces problèmes intermittents embêtants. De plus, si vous n'êtes pas root, vous voudrez peut-être sudoet bien sûr en faire un nohup:

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

Il me semble que tout ce dont vous avez besoin est

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

Le spécificateur de format strftime que -G attend dans le nom de fichier -w ne doit pas représenter une date et une heure complètes. Avec seulement% H et% M dedans, et un temps de rotation d'exactement une demi-heure, toute invocation de tcpdump ne générera que deux valeurs% M différentes à une demi-heure d'intervalle, et les fichiers de trace d'hier seront écrasés à la même heure et les nombres de minutes roulent à nouveau.

flabdablet
la source
1

Après quelques expérimentations, je n'ai pas pu faire fonctionner la réponse @MariusMatutiae comme prévu. Si l'heure est devenue le facteur limitant et sans l'ajout du format d'heure au nom de fichier, le fichier pcap actuel est simplement écrasé.

Par exemple, essayez:

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

Tout ce que vous vous retrouvez est trace.pcap0d'écrire encore et encore.

Comme il l'a suggéré dans le commentaire, si vous ajoutez la mise en forme de l'heure au nom de fichier, vous vous retrouvez simplement avec chaque liste croissante de fichiers.

Par conséquent, j'ai dû m'en tenir à des fichiers simples de taille limitée:

tcpdump -i en0 -w /var/tmp/trace -W 48 -C 100
Swinster
la source
0

Oui, cela ne semble pas fonctionner comme le dit la réponse de 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

Il me semble qu'il pourrait capturer autant de -C 100fichiers Mo que possible sur une période de 30 minutes, car il httpdebug.pcap03a l'horodatage le plus précoce et il est beaucoup plus petit que 100 Mo, il semble donc qu'il ait été coupé à 30 minutes. Une fois qu'il atteint 30 minutes, il semble revenir en arrière httpdebug.pcap00et incrémenter le nombre lorsqu'il atteint 100 Mo. Cela signifie que si vous avez beaucoup de demandes en 30 minutes, vous obtenez des numéros httpdebug.pcapXX très élevés. Si vous n'atteignez plus autant de demandes dans une période, ces chiffres élevés de httpdebug.pcapXX ne seront jamais écrasés.

Donc, je pense que les fichiers cycliques par tranche de temps signifient que la tranche de temps est -G 1800et qu'elle cyclera chaque -G 1800et incrémentera chaque -C 100.

Je ne sais pas si -W 48cela l'affecte, mais peut-être que si vous y arrivez httpdebug.pcap47(le décompte commence à 0, cela arrêtera de capturer les paquets.


Un peu récemment, un problème GitHub a été ouvert concernant la formulation confuse. Ils n'ont pas modifié l'implémentation, mais ils ont essayé de rendre la documentation un peu plus claire.

Les modifications proposées ont été fusionnées le 28 janvier 2019 .

À compter d'aujourd'hui, le 17 mars 2019, voici la documentation actuelle:

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

Je pense toujours que c'est un peu déroutant, mais je suppose que la différence par rapport à ma conclusion ci-dessus, c'est qu'il dit que -Wlorsqu'il est utilisé avec -C -Gn'affecte rien d'autre que le nom du fichier.

En général, -West utilisé pour limiter le nombre de fichiers. Alors ne l'utilisez pas si vous voulez capturer indéfiniment.

dosentmatter
la source