Comment programmer tcpdump pour une période spécifique?

à chaque fois, quand j'exécute manuellement tcpdump je dois utiliser Ctrl+ C pour l'arrêter. Maintenant, je veux programmer ma tcpdump avec une tâche cron et je n'ai plus besoin de courir pendant 1 heure et demie. Sans exécuter manuellement Ctrl+ C ou commande kill, comment peut-il être arrêté automatiquement? Voici la commande que j'suis en train de tester:

tcpdump -i eth0 'port 8080' -w  myfile

je peux programmer un autre cronjob pour tuer le tcpdump mais ce n'est pas une bonne idée.

24
demandé sur Cœur 2014-09-08 23:25:16

4 réponses

Vous pouvez combiner -G {sec} (rotation des fichiers dump toutes les X secondes) et -W {count} (limiter le nombre de fichiers de vidage) pour obtenir ce que vous voulez:

tcpdump -G 15 -W 1 -w myfile -i eth0 'port 8080'

durerait 15 secondes et s'arrêterait. Transformez 1,5 heure en secondes et ça devrait marcher.

40
répondu Paul Rubel 2014-09-08 19:33:16

vous pouvez utiliser timeout

timeout 5400 tcpdump -i eth0 'port 8080' -w myfile
26
répondu Matt 2016-03-16 08:55:33

Vous pourriez le faire comme ceci:

tcpdump -i eth0 'port 8080' -w  myfile & 
pid=$!
sleep 1.5h
kill $pid
13
répondu kiwisan 2014-09-08 19:35:46

L'approche qui fonctionne le mieux pour moi sur Ubuntu 14.04

sudo -i
crontab -e

puis ajouter la ligne

30 17 * * * /usr/sbin/tcpdump -G 12600 -W 1 -s 3000 -w /home/ubuntu/capture-file.pcap port 5060 or portrange 10000-35000

Notes

  • -g indique le nombre de secondes pour le dump à exécuter, cet exemple Court tous les jours de 17h30 à 21h00
  • -W est le nombre d'itérations que tcpdump exécutera
  • Cron job ne sera pas ajouté tant que vous n'aurez pas sauvegardé et quitté le fichier
  • cet exemple est pour capturer des paquets d'un téléphone astérisque le serveur
4
répondu Ryan Charmley 2015-02-06 23:09:12