Я попробовал это:
tcpdump -s 1500 -A -l -i eth0 '(port 6667) and (length > 74)'
Мне нужна только часть ascii. Как мне удалить остальное?
Я попробовал это:
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
.
tcpflow
с правами root?
Я не уверен в точном синтаксисе для tcpdump
... на самом деле, я отметил этот вопрос как любимый, потому что я хотел бы знать! Но в качестве альтернативного решения вы можете попробовать использовать tcpflow
вместо этого. Он работает по сути так же, но гораздо лучше печатает вывод ASCII; он исключил заголовки и печатал пакеты последовательно как поток, поэтому иногда легче читать и отслеживать, чем tcpdump
.
Я считаю, что самое элегантное решение - просто отказаться от tcpdump. Нет труб любого вида:
tcpflow -c port 6667
Вот и все.
Быстрый и грязный способ сделать это - отфильтровать вывод через строки:
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'