tcpdump - обертати файли захоплення за допомогою -G, -W та -C


14

Я дивлюсь, щоб мати змогу циклічно фіксувати обертовий вихід 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

pls дивіться мою відповідь
MariusMatutiae

Відповіді:


13

Це тому, що ви писали -W 3замість -W 48. Однак у вашій команді є й інші помилки.

Варіант -Gозначає:

-G rotate_seconds

      Якщо вказано, обертає дамп-файл, вказаний з -wопцією кожні повороти_секунд секунди. Savefiles матиме вказане ім'я, -wяке повинно включати формат часу, визначений строковим рядком (3). Якщо формат часу не вказаний, кожен новий файл замінить попередній.

      Якщо вони використовуються разом із -Cопцією, назви файлів набудуть форми " файл <рахунок>".

Оскільки ви писали -G 3, ви будете обертати це кожні 3 секунди, поки ви заявляли

... що фіксує 30 хвилин даних

Також схема іменування помилкова: із вищезазначеного,

Якщо вони використовуються разом із -Cопцією, назви файлів набудуть форми " файл <рахунок>".

Таким чином, немає сенсу вказувати формат часу для імені.

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

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

На сторінці чоловіка зазначено:

-C

      Перш ніж писати необроблений пакет у файл збереження, перевірте, чи файл у даний момент більше, ніж file_size, і, якщо так, закрийте поточний файл збереження та відкрийте новий. Savefiles після першого файла збереження матиме ім'я, вказане у -wпрапорі, з цифрою після нього, починаючи з 1 і продовжуючи вгору. Одиницями розміру file_size є мільйони байтів (1 000 000 байт, а не 1048 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 Мб, залежно від того, що відбувається раніше.


Зрештою, у відповіді відсутня умова If no time format is specified, each new file will overwrite the previous.(я оновив відповідь)
okwap

2
@okwap, коли ви редагували відповідь (щоб додати -% Y-% m-% d_% H:% M:% S), ви порушили циклічну частину, використовуючи -G, -C та -W разом. Оригінальна відповідь із використанням просто / var / tmp / trace для імені файлу -w була правильною та генерувала призначені циклічні виходи, як описано (trace1, trace2, ...). Коли ви використовуєте -G, -C і -W разом, ви не можете використовувати формат стропок у назві файлу і все одно отримувати циклічні виходи. З вашим редагуванням, tcpdump просто продовжить виписувати файли нециклічно, тому що назви файлів ніколи не повторюються.
Білл Меніс

@BillMenees Спасибі, це мою увагу, я скасоване редагувати OKWAP в.
MariusMatutiae

Так само, як Свінстер у коментарі нижче, зауважу, що ця відповідь не призводить до очікуваної поведінки. Використання сполучників -w -W -C та -G призводить до того, що один і той же файл буде перезаписуватися знову і знову. Це не призводить до створення кількості файлів, рівних -W <n>, як можна було б очікувати.
Niels2000

6

Розширення на відповідь 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звичайно, зробити нохуп:

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

Специфікатор формату стрипінгу, який -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

0

Так, це, мабуть, не працює, як йдеться у відповіді Маріуса Матутія .

tcpdump ...{other options}... -w httpdebug.pcap -W 48 -G 1800 -C 100
$ ls -l
-rw-r--r--. 1 tcpdump tcpdump  100007441 Mar 17 17:57 httpdebug.pcap00
-rw-r--r--. 1 tcpdump tcpdump   46895104 Mar 17 18:02 httpdebug.pcap01
-rw-r--r--. 1 tcpdump tcpdump   93091143 Mar 17 17:47 httpdebug.pcap02
-rw-r--r--. 1 tcpdump tcpdump    5372072 Mar 17 16:17 httpdebug.pcap03

Мені здається, що це могло б зафіксувати якомога більше -C 100файлів МБ за 30 хвилин, оскільки httpdebug.pcap03вона має найраніші часові позначки і набагато менша, ніж 100 Мб, тому здається, що її вирізали за 30 хвилин. Як тільки він потрапляє 30 хвилин, він, схоже, стрибає назад httpdebug.pcap00і збільшує кількість, коли він досягає 100 Мб. Це означає, що якщо у вас протягом 30 хвилин багато запитів, ви отримуєте дуже високі цифри httpdebug.pcapXX. Якщо ви більше ніколи не звертаєтесь до такої кількості запитів, ці високі httpdebug.pcapXX цифри ніколи не будуть перезаписані.

Тому я думаю, що циклічні файли на часовий фрагмент означають, що часовий фрагмент є, -G 1800і він буде циклічно кожен -G 1800і збільшувати кожен -C 100.

Я не впевнений, чи -W 48вплине це, але, можливо, якщо ви дістанетесь httpdebug.pcap47(кількість починається з 0 ", це перестане захоплювати пакети.


Дещо недавно з'явилася проблема GitHub про заплутане формулювання. Вони не змінили реалізацію, але намагалися зробити документацію трохи зрозумілішою.

У пропонованих змінах були об'єднані в на 28 січня 2019 року .

Станом на сьогодні, 17 березня 2019 року, ось поточна документація:

-C:

.BI \-C " file_size"
Before writing a raw packet to a savefile, check whether the file is
currently larger than \fIfile_size\fP and, if so, close the current
savefile and open a new one.  Savefiles after the first savefile will
have the name specified with the
.B \-w
flag, with a number after it, starting at 1 and continuing upward.
The units of \fIfile_size\fP are millions of bytes (1,000,000 bytes,
not 1,048,576 bytes).

-G:

.BI \-G " rotate_seconds"
If specified, rotates the dump file specified with the
.B \-w
option every \fIrotate_seconds\fP seconds.
Savefiles will have the name specified by
.B \-w
which should include a time format as defined by
.BR strftime (3).
If no time format is specified, each new file will overwrite the previous.
Whenever a generated filename is not unique, tcpdump will overwrite the
preexisting data; providing a time specification that is coarser than the
capture period is therefore not advised.
.IP
If used in conjunction with the
.B \-C
option, filenames will take the form of `\fIfile\fP<count>'.

-W:

.B \-W
Used in conjunction with the
.B \-C
option, this will limit the number
of files created to the specified number, and begin overwriting files
from the beginning, thus creating a 'rotating' buffer.
In addition, it will name
the files with enough leading 0s to support the maximum number of
files, allowing them to sort correctly.
.IP
Used in conjunction with the
.B \-G
option, this will limit the number of rotated dump files that get
created, exiting with status 0 when reaching the limit.
.IP
If used in conjunction with both
.B \-C
and
.B \-G,
the
.B \-W
option will currently be ignored, and will only affect the file name.

Я все ще думаю, що це трохи заплутано, але я здогадуюсь, що відмінність від мого висновку вище полягає в тому, що він говорить, -Wколи використовується з -C -G, не впливає ні на що, окрім назви файлу.

Взагалі -Wвикористовується для обмеження кількості файлів. Тому не використовуйте його, якщо ви хочете захопити на невизначений час.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.