Я пытаюсь устранить проблему, когда на устройстве доступно только tcpdump. Я хочу использовать tcpdump для фильтрации веб-трафика и отображения только трафика, содержащего определенные строки.
Я делаю следующее:
tcpdump -nei eth0 -X | grep "something interesting"
Вывод представляет собой hexview с 16 байтами pr строки. Я не могу получить эти данные, поскольку данные представлены в несколько строк.
Есть ли способ для tcpdump представить захваченные данные в одной строке? Это позволило бы использовать grep для поиска интересных пакетов.
linux
networking
tcpdump
Собака ест кошачий мир
источник
источник
tcpdump -nei eth0 -X | grep --line-buffered "something interesting"
сделаю, по незаметным причинам мой действительный рабочий ответ был удален.Ответы:
Для таких, как вы, которые не могут использовать
ngrep
, вот как использовать,awk
чтобы сделатьtcpdump
вывод содержимого пакета grepable.Сначала приведем пример выходных данных, предоставленных
tcpdump -x
, чтобы представить задачу впереди:И это копируемый и вставляемый
awk
скрипт, к которому вы можете направить выводчтобы получить следующий, grepable вывод
Ниже приведена прокомментированная версия вышеуказанного скрипта:
источник
Из
tcpdump
справочной страницы:Убедитесь, что вы также используете
-s 0
опцию, чтобы убедиться, что весь пакет отображается.источник
Вы можете посмотреть на
ngrep
команду:ngrep -W single -d eth0 'regex to match' 'port 80'
Где:
-W single
определяет форматирование одной строкиregex to match
означает только сбросить пакеты, содержащие определенную строку.'port 80'
это фильтр pcap, который только прослушивает пакеты от или до порта 80источник
Причиной вашего вывода является шестнадцатеричный
-X
флаг. Пытаться:Вы получите дамп читаемый вывод прямо в кли.
источник
Я не мог заставить скрипт awk делать то, что хотел, и ngrep не работал на Ethernet через USB, поэтому я написал небольшую программу на C для соединения строк, выводимых tcpdump, чтобы они были grepable. Это на https://gitlab.com/dargaud/TcpDumpJoin
источник