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