C'est parce que vous avez écrit -W 3
au lieu de -W 48
. Il y a cependant d'autres erreurs dans votre commande.
L'option -G
signifie :
-G rotate_seconds
Si spécifié, fait pivoter le fichier de vidage spécifié avec le
-w
option toutes les rotate_seconds secondes. Les fichiers de sauvegarde auront le nom spécifié par-w
qui 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 écrasera le précédent.Si utilisé en conjonction avec le
-C
option, les noms de fichiers prendront la forme de 'fichier'.
Depuis que vous avez écrit -G 3
, vous le ferez tourner toutes les 3 secondes, pendant que vous avez déclaré
...qui capture 30 minutes de données
De plus, le schéma de nommage est erroné :d'après ce qui précède,
Si utilisé en conjonction avec le
-C
option, les noms de fichiers prendront la forme de 'fichier'.
Il est donc inutile de spécifier le format de l'heure pour le nom.
De plus, le -C
option n'a pas d'argument, alors que, selon la page de manuel, elle devrait :
tcpdump [ -AdDefIKlLnNOpqRStuUvxX ] [ -B buffer_size ] [ -c compter ]
[ -C file_size ] [ -G rotate_seconds ] [ -F fichier ][ -je interface ] [ -m module ] [ -M secrète ][ -r fichier ] [ -s snaplen ] [ -T tapez ] [ -w fichier ][ -W nombre de fichiers ][ -E [email protected] algo:secret,... ][ -y type de lien de données ] [ -z commande postrotate ] [ -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 actuel et ouvrez-en un nouveau. Les fichiers de sauvegarde après le premier fichier de sauvegarde auront le nom spécifié avec le
-w
drapeau, avec un nombre après lui, 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 100
afin 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 (de noms trace1, trace2, ...) de manière cyclique, avec une période de 48, soit toutes les 1800 secondes (=30 minutes) soit tous les 100 Mo, selon la première éventualité.
Développement de la réponse de flabdablet (modification de -G 1800
à -G 300
–rotation toutes les cinq minutes –juste à 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
, entraînant
/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 pouvez vouloir sudo
et 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 &"
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 n'a pas à représenter une date et une heure complètes. Avec juste %H et %M là-dedans, et un temps de rotation d'exactement une demi-heure, toute invocation donnée 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 chiffres des minutes tournent à nouveau.