Как я могу сделать так, чтобы tcpdump записывал в файл и выводил соответствующие данные?
Я хочу, чтобы tcpdump записывал необработанные пакетные данные в файл и отображал анализ пакетов в стандартном выводе по мере захвата пакетов (под анализом я подразумеваю строки, которые он обычно отображает, когда отсутствует -w). Кто-нибудь может сказать, пожалуйста, как это сделать?
5 ответов
Вот отличный способ сделать то, что вы хотите:
tcpdump -w - | tee somefile | tcpdump -r -
Что оно делает:
-w -
говоритtcpdump
записать двоичные данные вstdout
tee
записывает двоичные данные в файл И в своиstdout
-r -
говорит второйtcpdump
чтобы получить свои данные из егоstdin
Начиная с tcpdump 4.9.1,
--print
вариант можно использовать:
tcpdump -w somefile --print
tcpdump ${ARGS} &
PID=$!
tcpdump ${ARGS} -w ${filename}
kill $PID
tcpdump > output.txt , если вы хотите сохранить выходные данные в файл в текстовом формате.
Используйте sudo, если есть проблемы с разрешениями.
Мой опыт, данные записываются постоянно.
Если вам нужен способ сделать это без двойного запуска tcpdump, подумайте:
sudo tcpdump port 80 -w $(tty) | tee /tmp/output.txt
Из интерактивной командной строки вы можете использовать $TTY
вместо того $(tty)
но в сценарии первое не будет установлено (хотя я не уверен, насколько распространено выполнение tcpdump в сценарии).
Примечание: это не совсем Unix-y способ, которым tcpdump по умолчанию заставляет вас писать в файл. Программы по умолчанию должны писать в stdout. Перенаправление к файлу уже обеспечивается конструкциями оболочки. Может быть, есть веская причина, по которой tcpdump разработан таким образом, но я не знаю, что это такое.