Как запланировать tcpdump для выполнения в течение определенного периода времени?

Каждый раз, когда я запускаю вручную tcpdump, я должен использовать Ctrl + C, чтобы остановить его. Теперь я хочу запланировать мой tcpdump с помощью cronjob, и мне нужно всего лишь запустить его на полтора часа. Без ручного запуска Ctrl + C или команды kill, как ее можно остановить автоматически? Вот команда, которую я тестирую:

tcpdump -i eth0 'port 8080' -w  myfile

Я могу запланировать еще один cronjob, чтобы убить процесс tcpdump, но, похоже, это не очень хорошая идея.

Ответы

Ответ 1

Вы можете объединить -G {sec} (повернуть файлы дампа каждые x секунд) и -W {count} (ограничение # файлов дампа), чтобы получить то, что вы хотите:

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

будет работать в течение 15 секунд, а затем остановится. Поверните 1,5 часа в секундах, и он должен работать.

Ответ 2

вы можете использовать таймаут

timeout 5400 tcpdump -i eth0 'port 8080' -w myfile

Ответ 3

Вы можете сделать это следующим образом:

tcpdump -i eth0 'port 8080' -w  myfile & 
pid=$!
sleep 1.5h
kill $pid

Ответ 4

Подход, который работал лучше всего для меня на Ubuntu 14.04

sudo -i
crontab -e

а затем добавьте строку

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

Примечания

  • -G флаг указывает число секунд для запуска дампа, этот пример выполняется ежедневно с 17:30 до 21:00.
  • -W - число итераций, выполняемых tcpdump
  • Задание Cron не будет добавлено до сохранения и выхода из файла.
  • Этот пример предназначен для захвата пакетов на сервере Asterisk.