11

Я надеюсь, что смогу захватывать вращающийся вывод tcpdump, который собирает данные за 30 минут, в 48 файлов, циклически.

Страница man подразумевает, что это должно быть возможно, но мое тестирование не дает желаемого результата:

-W

      Используется вместе с опцией -C , это ограничит количество файлов, созданных указанным числом, и начнет перезаписывать файлы с самого начала, создавая таким образом «вращающийся» буфер.  Кроме того, он будет называть файлы с достаточным начальным 0, чтобы поддерживать максимальное количество файлов, что позволяет их правильно сортировать.

      Используется вместе с опцией -G , это ограничит количество создаваемых повернутых файлов дампа, выходя из состояния 0 при достижении лимита.  Если также использовать с -C , это приведет к циклическим файлам для каждого временного интервала.

Я использую это на клиентах OS X 10.9.5/10.10.3. Вот тестовая команда; он просто выходит после 3-го файла:

tcpdump -i en0 -w /var/tmp/trace-%Y-%M-%d_%H.%M.%S.pcap -W 3 -G 3 -C -K -n

4 ответа4

11

Это потому, что вы написали -W 3 вместо -W 48 . Однако в вашей команде есть и другие ошибки.

Опция -G означает:

-G rotate_seconds

      Если указано, вращает файл дампа, указанный с параметром -w каждые rotate_seconds секунд.  Файлы сохранения будут иметь имя, указанное в -w которое должно включать формат времени, определенный strftime(3).  Если формат времени не указан, каждый новый файл будет перезаписывать предыдущий.

      Если используется в сочетании с параметром -C , имена файлов будут иметь вид ' file <count>'.

Так как вы написали -G 3 , вы будете вращать это каждые 3 секунды, пока вы заявили

... который собирает данные за 30 минут

Кроме того, схема именования неверна: из вышесказанного,

Если используется в сочетании с параметром -C , имена файлов будут иметь вид ' file <count>'.

Таким образом, нет смысла указывать формат времени для имени.

Кроме того, опция -C не имеет аргументов, в то время как, согласно man-странице, она должна:

tcpdump [ -AdDefIKlLnNOpqRStuUvxX ] [ -B buffer_size ] [ -c count ]
[ -C file_size ] [ -G rotate_seconds ] [ -F файл ] [ -I интерфейс ] [ -m модуль ] [ -M секрет ] [ -r файл ] [ -s оснастка ] [ -T тип ] [ -w файл ] [ -W filecount ] [ -E spi @ ipaddr algo: секрет, ... ] [ -y datalinktype ] [ -z postrotate-команда ] [ -Z пользователь ] [ выражение ]

Страница руководства гласит:

-C

      Перед записью необработанного пакета в файл сохранения убедитесь, что размер файла больше, чем file_size, и, если это так, закройте текущий файл сохранения и откройте новый.  Файлы сохранения после первого файла сохранения будут иметь имя, указанное с флагом -w , с номером после него, начиная с 1 и продолжая вверх.  Единицами file_size являются миллионы байтов (1 000 000 байтов, а не 1 048 576 байтов).

Таким образом, вы должны указать -C 100 , чтобы получить 100 МБ файлов.

В конце ваша команда должна быть:

tcpdump -i en0 -w /var/tmp/trace -W 48 -G 1800 -C 100 -K -n

Это будет циклически вращать файлы (с именами trace1, trace2, ...) с периодом 48, либо каждые 1800 секунд (= 30 минут), либо каждые 100 МБ, в зависимости от того, что произойдет раньше.

4

Расширение после ответа flabdablet (изменение -G 1800 на -G 300 - ротация каждые пять минут - только для целей тестирования),

tcpdump -i en0 -w /var/tmp/trace-%m-%d-%H-%M-%S-%s -W 3 -G 300

даст вам %m=month , %d=day of month , %H=hour of day , %M=minute of day , %S=second of day , %s=millisecond of day , в результате чего

/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

Очень полезно для организации следов для тех надоедливых прерывистых проблем.  Кроме того, если вы не root, вы можете захотеть использовать sudo и, конечно же, сделать это nohup:

sudo bash -c "nohup tcpdump -i en0 -w /var/tmp/trace-%m-%d-%H-%M-%S-%s -W 3 -G 300 &"
3

Сдается мне, что все, что вам нужно, это

tcpdump -i en0 -G 1800 -w /var/tmp/trace-%H-%M.pcap

Спецификатор формата strftime, который -G ожидает в имени -w файла, не должен представлять полную дату и время. При наличии только% H и% M и времени поворота ровно полчаса, любой данный вызов tcpdump будет когда-либо генерировать только два разных значения% M с интервалом в полчаса, а файлы трассировки вчера будут перезаписаны, когда этот час и минутные числа снова вращаются.

1

После некоторых экспериментов я не смог заставить ответ @MariusMatutiae работать так, как ожидалось. Если время стало ограничивающим фактором и без добавления формата времени к имени файла, то текущий файл pcap просто перезаписывается.

Например, попробуйте:

tcpdump -i en0 -w /var/tmp/trace -W 10 -G 5 -C 1

Все, что вы в итоге получите, это trace.pcap0 который пишется снова и снова.

Как предлагается в комментарии, если вы добавите форматирование времени к имени файла, то вы просто получите и каждый растущий список файлов.

Поэтому мне пришлось придерживаться простых файлов с ограниченным размером:

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .