barbitoff programmer`s blog

Здесь я публикую заметки из программерской жизни: грабли, на которые мне случилось наступить, проблемы, для которых было найдено элегантное (или не очень) решение, а также все, с чем мне пришлось столкнуться и чем хотелось бы поделиться =)
PS Если хотите меня поблагодарить - на странице есть 3 места, чтобы это сделать =)

понедельник, 8 ноября 2021 г.

Запуск tcpdump на заданное количество секунд

Задача

Нужно в 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} секунд не нужно.

Комментариев нет:

Отправить комментарий