web-dev-qa-db-fra.com

tcpdump - fait pivoter les fichiers de capture en utilisant -G, -W et -C

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

La page de manuel laisse entendre que cela devrait être possible, mais mes tests ne semblent pas produire le résultat recherché:

-W

      Utilisé conjointement avec l'option -C, cela limitera le nombre de fichiers créés au nombre spécifié, et commencera à écraser les fichiers à partir du début, créant ainsi un tampon "rotatif". En outre, il nommera les fichiers avec suffisamment de zéros en début de chaîne pour prendre en charge le nombre maximal de fichiers, leur permettant de trier correctement.

      Utilisé en conjonction avec l'option -G, cela limitera le nombre de fichiers de vidage pivotés qui sont créés, quittant l'état 0 lorsque la limite est atteinte. S'il est également utilisé avec -C, le comportement produit des fichiers cycliques par tranche de temps.

J'utilise ceci sur les clients OS X 10.9.5/10.10.3. Voici la commande de test; il se termine 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
11
Andrew

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:

-Grotate_seconds

      Si spécifié, fait pivoter le fichier de vidage spécifié avec l'option-wtoutes les rotation_secondes secondes. Savefiles aura le nom spécifié par-wqui 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.

      S'ils sont utilisés avec l'option-C, les noms de fichiers prendront la forme 'fichier _ <nombre>'.

Puisque vous avez écrit -G 3, vous effectuerez cette rotation toutes les 3 secondes, tandis que vous avez indiqué

... qui capture 30 minutes de données

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

S'ils sont utilisés avec l'option-C, les noms de fichiers prendront la forme 'fichier _ <nombre>'.

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

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

tcpdump [ -AdDefIKlLnNOpqRStuUvxX ] [ -B buffer_size] [ -c count]
[ -C taille_fichier] [ -G rotation_secondes] [ -F fichier] [ -I interface] [ -m module] [ -M secret] [ -r fichier] [ -s snaplen] [ -T type] [ -w fichier] [ -W nombre de fichiers] [ -E spi @ ipaddr algo: secret, ...] [ -y Type de liaison de données] [ -z commande de post-rotation] [ -Z tilisateur] [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 volumineux que taille_fichier 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 drapeau-w, suivi d'un nombre, commençant à 1 et se poursuivant vers le haut. Les unités de file_size sont des millions d'octets (1 000 000 octets, et non 1 048 576 octets).

Donc, vous devriez spécifier -C 100 afin de produire des fichiers de 100 Mo.

En fin de compte, 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 secondes, toutes les 1800 secondes (= 30 minutes) ou tous les 100 Mo, selon la première éventualité.

12
MariusMatutiae

Développer la réponse de de flabdablet (remplacer -G 1800 par -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, résultant en

/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 des traces pour 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 &"
6
jarofnstdkys

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 nécessairement représenter une date et une heure complètes. Avec seulement% H et% M ici et un temps de rotation d'une demi-heure exactement, 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 minute roulent à nouveau.

3
flabdablet

Après quelques expériences, je n'ai pas pu obtenir la réponse de @MariusMatutiae au travail prévu. Si l'heure est devenue le facteur limitant et sans l'ajout du format de l'heure au nom du 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 obtenez est que trace.pcap0 soit écrit encore et encore.

Comme suggéré dans le commentaire, si vous ajoutez la mise en forme de l'heure au nom du fichier, vous vous retrouvez avec une liste de fichiers de plus en plus longue.

Par conséquent, je devais m'en tenir à des fichiers de taille simple et limitée:

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

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 fichiers -C 100MB que possible en une période de 30 minutes, car httpdebug.pcap03 a l’horodatage le plus ancien et est beaucoup plus petit que 100 Mo; il semble donc qu’il a été coupé à 30 minutes. Une fois qu'il atteint 30 minutes, il semble revenir à httpdebug.pcap00 et incrémenter le nombre au fur et à mesure qu'il atteint 100 Mo. Cela signifie que si vous avez beaucoup de demandes dans une période de 30 minutes, vous obtenez des nombres httpdebug.pcapXX très élevés. Si vous n'atteignez plus autant de demandes au cours d'une période donnée, ces nombres httpdebug.pcapXX élevés ne seront jamais écrasés.

Je pense donc que les fichiers cycliques par tranche de temps signifient que la tranche de temps est -G 1800 et qu'il parcourt chaque -G 1800 et incrémente chaque -C 100.

Je ne sais pas si -W 48 l’affecte, mais peut-être que si vous atteignez httpdebug.pcap47 (le compte commence à 0`, la capture des paquets sera arrêtée.


Un peu récemment, un problème de GitHub a été ouvert à propos du libellé confus. Ils n'ont pas changé la mise en œuvre, mais ils ont essayé de rendre la documentation un peu plus claire.

Les modifications proposées ont été fusionnées le 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 que le code -W, lorsqu'il est utilisé avec -C -G, n'affecte que le nom du fichier.

-W est généralement utilisé pour limiter le nombre de fichiers. Donc, ne l'utilisez pas si vous voulez capturer indéfiniment.

0
dosentmatter