Задача
Нужно в bash-скрипте запустить tcpdump, чтобы он отработал N секунд и завершился.
Решение
Как вариант - запуск с помощью команды timout:
timeout --preserve-status {N} tcpdump ...
Здесь {N} нужно заменить на необходимое количество секунд. Если не установить опцию --preserve-status, комадна будет всегда завершаться с ненулевым статусом (сигнализируя о наступлении таймаута). Если это не критично - опцию можно убрать.
Есть более элегантный вариант:
tcpdump -G {N} -W 1 -w myfile ...
, предложенный тут https://stackoverflow.com/questions/25731643/how-to-schedule-tcpdump-to-run-for-a-specific-period-of-time. Идея в том, чтобы задать ротацию по времени выходных файлов-дампов, и установить максимум в 1 файл. Однако, работоспособность такого варианта зависит от наличия трафика на интерфейсе и установленных в tcpdump фильтрах. Если вдруг окажется, что никакой трафик не удовлетворяет условиям установленного фильтра, то tcpdump зависнет навечно, вместо того, чтобы быть завершенным через {N} секунд. Tcpdump будет считать, что раз выходной файл пустой, то и ротировать его по истечении {N} секунд не нужно.
Комментариев нет:
Отправить комментарий