Подтвердить что ты не робот

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

Я хочу, чтобы tcpdump записывал необработанные пакетные данные в файл и отображал анализ пакетов в стандартном выводе при захвате пакетов (по анализу я имею в виду строки, которые он обычно показывает, когда -w отсутствует). Кто-нибудь может сказать мне, как это сделать?

4b9b3361

Ответ 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