Я отслеживаю определенный порт, поскольку мое приложение использует этот порт. Кажется, что соединение обрывается в случайные моменты времени. Я хочу узнать, какие последние пакеты проходят перед обрывом соединения: Я использовал эту строку
sudo tcpdump -XX -i eth0 port 3050 | tail >> tcpamir.txt
но чтобы это сработало, мне нужно запустить другой терминал и выполнить команду
sudo killall tcpdump
есть ли лучший подход? EDIT1: важно захватывать только последние пакеты, так как я не хочу, чтобы файл раздувался, так как трафика достаточно, чтобы быстро заполнить дисковое пространство.
решение1
Хорошо, я думаю, что я нашелрешение:
sudo tcpdump -XX -i eth0 -w tcpamir-%s.txt -G 10 port 3050
Это заменит ваш выходной файл каждые 10 секунд на новый файл с именемtcpamir-<unixtimestamp>.txt
Вы также можете изменить выходной файл, чтобы он перезаписывал себя каждый день, если вас беспокоит размер файла в ожидании. Для получения дополнительной информации читайте man 3 strftime
.
Я думаю о чем-то вроде
sudo tcpdump -XX -i eth0 -w tcpamir-%R.txt -G 86400
Где %R
указано время в 24-часовом формате (например, 12:40).
Прочитайте соответствующие выходные файлы с помощью
sudo tcpdump -r tcpamir-<unixtimestamp>.txt
Второе решение:
Разделите его на несколько команд и сохраните как скрипт/функцию:
sudo tcpdump -XX -i eth0 port 3050 >> tcptmp.txt
sudo tail -n100 tcptmp.txt >> tcpamir.txt
sudo rm tcptmp.txt
решение2
Если вы хотите только записать весь захваченный трафик, вам нужно просто добавить -w к строке, удалив'| хвост >> tcpamir.txt'
# tcpdump -XX -i eth0 port 3050 -w tcpamir.cap
Если вы хотите проанализировать захват в Wireshark, расширение должно быть .cap. Когда вы убедитесь, что захват выполнен, вы можете завершить его с помощьюctrl + c
ПРИМЕЧАНИЕ: -w [имя_файла.cap] для записи захвата в файл