Как перехватить последние 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.