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

14

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

Flimzy
источник
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) для получения дополнительной информации.

Flimzy
источник
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
Ugo
источник
Хотя это может ответить на вопрос, было бы лучше, если бы вы могли объяснить, почему это так.
ДэвидПостилл
Сам 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
lafferc
источник
0

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

  • w: сохранить вывод в файле .pcap &: tcpdump будет выполняться в режиме ожидания. Примечание: убедитесь, что у вас достаточно свободного места, если хотите. запустить его на некоторое время. Он не прервется, если выйдет из системы, пока вы не убьете процесс.
Лин-человек
источник