it-swarm.xyz

Какой самый простой способ нюхать TCP данные трафика на Linux?

Мне нужен простой способ показать все данные TCP (не заголовки TCP или что-либо еще), проходящие через любой интерфейс на моем компьютере с Linux.

Например, я хочу волшебную команду, которая, если я сделаю:

magic_commmand_I_want port=1234

затем, если на моей машине был сервер, прослушивающий порт 1234, и кто-то сделал:

echo hello | nc localhost 1234
# Note: "nc" (aka "netcat") is a simple tool that sends data to a Host/port

Тогда магическая команда просто распечатает:

hello

Я пробовал "tcpdump", "Ethereal", "tethereal", "tshark" и другие, но не совсем понятно, как их получить:

  • не показывать IP-адреса или другие метаданные
  • показывать только отправляемые «данные», а не отдельные пакеты и их заголовки
  • печатать данные как есть, не в шестнадцатеричном виде и не с маркерами смещения пакетов
  • снифф все сетевой трафик (будь то eth0 или eth1 или lo и т. д ...)

Да, вы могли бы, вероятно, связать воедино переданный набор команд Unix, чтобы сделать это, но это не очень легко запомнить в следующий раз :)

Если у вас есть простой пример точной командной строки, которая делает это, я бы этого хотел.

77
Dustin Boswell

Обновить:

Как отметил Михал в комментариях: С tcpflow версии 1.3 опция -e используется для указания имени сканера. Поэтому выводится ошибка «Неверное имя сканера« 8983 ». Правильная команда

Sudo tcpflow -i any -C -J port 1234

(также -J был изменен на -g в последней версии)


Спасибо Ив за то, что указал мне на " tcpflow ". Вот командная строка:

tcpflow -i any -C -e port 1234  # as root, or with Sudo

Это все, что я хочу

  • отображает данные побайтно, как они поступают
  • не отображает другие метаданные
  • прослушивает все интерфейсы (таким образом, он захватывает данные, поступающие изнутри машины и снаружи)

«-C» говорит ему, чтобы дамп на консоль вместо файла. «-e» включает цвета, чтобы клиент-> сервер и сервер-> клиент были визуально различимы.

Я установил tcpflow, просто выполнив

Sudo apt-get install tcpflow
104
Dustin Boswell

socat - это инструмент, который вы запрашиваете. Он может выступать в качестве прокси:

$socat -v TCP-LISTEN:4444 TCP:localhost:1234
hello

тогда ваше приложение должно подключить порт 4444 вместо прямого подключения к 1234

Опция -v для socat распечатывает все, что получает по стандартной ошибке (stderr).

Обновление:

Если socat недоступен на вашем компьютере, вы все равно можете эмулировать его с помощью netcat:

$netcat -l -p 4444 | tee output_file | netcat localhost 1234

предостережения: эта опция является однонаправленной. второй экземпляр netcat напечатает любой ответ с вашего сервера на стандартный вывод. Вы все еще можете сделать тогда:

$mkfifo my_fifo
$netcat -l -p 4444 < my_fifo | tee output_file | netcat localhost 1234 > my_fifo
28
yves Baumes

Попробуйте Wireshark . Это отличный анализатор протоколов, предназначенный как для Linux, так и для Windows.

20
Kevin Boyd

tcpflow - это то, что вы хотите. Выдержка из справочной страницы:

ОПИСАНИЕ
tcpflow - это программа, которая собирает данные, передаваемые как часть TCP соединений (потоков), и сохраняет данные удобным для анализа или отладки протокола. Программа наподобие tcpdump (4) показывает сводку пакетов, увиденных на проводе, но обычно не хранит данные, которые фактически передаются. Напротив, tcpflow реконструирует фактические потоки данных и сохраняет каждый поток в отдельном файле для последующего анализа. tcpflow понимает порядковые номера TCP и ​​корректно восстанавливает потоки данных независимо от повторных передач или неупорядоченной доставки.

tcpflow хранит все захваченные данные в файлах с именами вида

192.168.101.102.02345-010.011.012.013.45103

где содержимым вышеупомянутого файла будут данные, передаваемые с хоста 192.168.101.102 через порт 2345, на хост 10.11.12.13 через порт 45103.

Установите соединение между приложением и сервером. Когда соединение установлено и работает, tcpflow все еще может захватывать данные из него. Например:

$ Sudo tcpflow -i lo port 5555
tcpflow[3006]: listening on lo

Все данные будут храниться в файле с именем 127.000.000.001.48842-127.000.000.001.05555.

Вы можете все еще перенаправить это на стандартный вывод с опцией -Cs. Прочитайте страницу руководства, чтобы поиграть с выражением, чтобы настроить пакеты, которые вы хотите захватить tcpflow.

13
yves Baumes

ngrep очень хорош для этого. Для поиска в пакетах требуется строка BPF и дополнительная строка, а затем выводит содержимое пакета на экран в довольно полезном формате. При желании он также создает дамп в файл pcap_dump, который вы можете более подробно изучить в Wireshark позже.

2
hobbs

Взгляните на Chaosreader . Хотя он делает немного больше, чем вы просите, и немного по-другому, возможно, вы могли бы изменить его код, чтобы сделать то, что вы хотите.

0
Andrew Y