Назад | Перейти на главную страницу

Как заставить tcpdump не печатать заголовки tcp?

Я пробовал это:

tcpdump -s 1500 -A -l -i eth0 '(port 6667) and (length > 74)'

Мне нужна только часть ascii. Как удалить остальные?

Как предполагает Джош, tcpflow может печатать только данные пакета TCP в файл или STDOUT. Вы можете передать tcpdump в tcpflow следующим образом:

tcpdump -i lo -l -w - port 23 | tcpflow -C -r -

Чтобы просмотреть только одну сторону разговора, вы можете использовать фильтры для tcpdump, например dst port 23.

Я считаю, что наиболее элегантным решением будет просто отказаться от tcpdump. Никаких трубок:

tcpflow -c port 6667

И это все.

Я не уверен насчет точного синтаксиса для tcpdump... фактически, я отметил этот вопрос как избранный, потому что хотел бы знать! Но в качестве альтернативного решения вы можете попробовать использовать tcpflow вместо. По сути, он работает так же, но гораздо лучше печатает вывод в формате ASCII; он исключил заголовки и распечатал пакеты последовательно как поток, поэтому иногда легче читать и следовать, чем tcpdump.

Быстрый и грязный способ сделать это - отфильтровать вывод через строки:

tcpdump -nli eth0 '(port 6667) and (length > 74)' -s 0 -w - | strings

Иногда у вас нет других инструментов, и этого достаточно для быстрого просмотра полезной нагрузки. Конечно, это бесполезно, если вам нужны точные данные для инъекции или точный анализ.

Если вам нужна только часть ASCII, вы можете использовать: tcpdump -s 1500 -A -l -i eth0 '(port 6667) and (length > 74)'|sed 's/\.//g' или с ngrep: ngrep -d eth0 -lq . '(port 6667) and (length > 74)' |sed -rn '/^ /s/\.//gp'

На прошлой неделе у меня была такая же проблема - я использовал интерфейс wirehark и сделал "копировать читаемый ascii" для интересных пакетов.

Я (успешно) пытался определить проблему с http-запросом к веб-сервису и его XML-ответом.