Как перехватить последние N секунд пакетов с помощью tcpdump


14

Как я могу захватить последние N секунд пакетов с помощью tcpdump?


1
«Дай мне» не уведет тебя далеко сюда. Может быть, вы должны показать нам, что вы пробовали до сих пор и где именно у вас есть проблемы, которые вы не можете решить самостоятельно.
— Матиас Крулл

Команда bash, которую вы хотите, это: "man tcpdump"
— Уильям Перселл

Ответы:


15

Если вы просто хотите, чтобы tcpdump запускался в течение n секунд, а затем выходил, вы можете использовать тайм-аут.

Например:

timeout 2 tcpdump -eni mon0

В противном случае я не верю, что tcpdump имеет возможность сделать это.


К сожалению, команда timeout отсутствует в CentOS 5.x. Он был добавлен в более новую версию coreutils. Еще одна мотивация для меня, чтобы обновить ОС.
— Mister_Tom

Я полагаю, если у вас нет тайм-аута, вы могли бы вместо этого создать что-то вроде тайм-аута с помощью сценария:
— siesta

Прекрасно работает для меня. Я использовал это, чтобы контролировать весь трафик для программы, которая не работала. Я запустил tcpdump с таймаутом N секунд. Затем я запустил программу (которая занимает до N секунд).
— Тревор Бойд Смит

Вопрос просит захватить последние N секунд. Ваш ответ говорит, как захватить первые N секунд.
— Хлипкий

3

Я думаю, что лучший способ сделать это с помощью флага -G tcpdump, который при использовании с -w будет сохранять ваш дамп в новый файл каждые N секунд. Например:

tcpdump -w outfile-% s -G 10

Это создаст новый файл с именем 'outfile-XXXX' (где XXXX представляет количество секунд с начала эпохи) каждые 10 секунд.

Смотрите man-страницы для tcpdump (8) и strftime (3) для получения дополнительной информации.


tcpdump 3.9.4, поставляемый с CentOS 5.10, не имеет опции -G. Мне действительно нужно обновить мою ОС.
— Mister_Tom

-G не останавливает команду tcpdump. Это все еще работает вечно. Тайм-аут 2 tcpdump остановит команду через 2 секунды.
— Цицерон

@ciceron: Вопрос не в том, чтобы остановить tcpdump. Это было о захвате последних N секунд . Ваше предложение будет захватывать первые N секунд. Решительно не то, что попросил ОП.
— Хлипкий

1

Вы можете использовать tethereal вместо tcpdump. Вы можете использовать эту опцию командной строки:

-a duration:X

Хотя это может ответить на вопрос, было бы лучше, если бы вы могли объяснить, почему это так.
— ДэвидПостилл

Сам tcpdump не допускает ограниченную по времени трассировку пакетов, но tshark делает. (примечание: после того, как этот вопрос был задан и получен ответ, Ethereal стал Wireshark), он tshark -a duration:600 -i eth0 -w $(hostname).10mins.pcapполучит за десять минут трафика из интерфейса eth0 в файл $ (имя хоста) .10mins.pcap
— Эндрю Билс

0

tcpdump options -w new.tcpdump

ps -ef |grep tcpdump

принять к сведению PID, скажем, это 11193

at 11:00 kill 11193

теперь просто подождите до 11:00 и ваш захват будет убит, но сохранен


fwiw pgrep - намного лучшая альтернатива ps | grep; особенно здесь.
— Хороший человек

0

Я пытался решить ту же проблему, поэтому я написал переносимый скрипт для запуска tcpdump в течение n секунд.

#tcpdump_for_n_sec.sh
n=$1
shift #remove first arg from $@ 
tcpdump $@ & x=$!
sleep $n
kill $x

Использование ./tcpdump_for_n_sec.sh sec аргументы для tcpdump

./tcpdump_for_n_sec.sh 5 i- any not port 22 -s0 -wfile.pcap

0

sudo tcpdump -i -w & это запустит tcpdump в спящем режиме

  • w: сохранить вывод в файле .pcap &: tcpdump будет выполняться в режиме ожидания. Примечание: убедитесь, что у вас достаточно свободного места, если хотите. запустить его на некоторое время. Он не прервется, если выйдет из системы, пока вы не убьете процесс.
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.