Я пробовал это:
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-ответом.