Какой самый простой способ обнюхать данные трафика 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-адреса или другие метаданные
  • Показывать только «данные», а не отдельные пакеты и их заголовки
  • Печатать данные как есть, а не в шестнадцатеричном формате, а не с маркерами смещения пакетов
  • Sniff весь сетевой трафик (будь то на eth0 или eth1 или lo и т. Д.)

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

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

Обновить:

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

sudo tcpflow -i any -C -J port 1234

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


Спасибо yves за то, что указали мне на « tcpflow ». Вот комм-линия:

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

Это делает все, что я хочу

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

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

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

 sudo apt-get install tcpflow 

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 

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

Tcpflow – это то, что вы хотите. Выдержка из страницы man:

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

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

192.168.101.102.02345-010.011.012.013.45103

Где содержимое вышеуказанного файла будет передаваться с порта 2345 хоста 192.168.101.102, на порт 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.

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

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

Возможно, вы можете написать оболочку для tcpdump, например, которая удалит всю избыточную информацию

  • Как увеличить разрешение VirtualBox за 800x600 в Linux?
  • Ошибка сегментации сборки после выполнения системного вызова, в конце моего кода
  • Автоматически сопоставлять файлы каталогов в другой каталог
  • Время сеанса терминала ssh, как это можно изменить
  • Как я «глобализую» двоичные файлы в Linux?
  • Почему нам нужно установить пространство подкачки вдвое большим, чем наша физическая память?
  • Windows 7 Virtual PC + Linux Ubuntu
  • Как получить команды, выпущенные в сеансе ssh
  • Как реализовать пространство из раздела Swap в ext4 «нормальный» раздел в Ubuntu?
  • Конфигурация доступа SVN
  • OpenDNS не работает с 1 машиной Ubuntu
  • Interesting Posts

    Максимальный размер содержимого параметра POST?

    Сопоставление почтового индекса США с часовым поясом

    Setter DI или Constructor DI весной?

    Выражение основных критериев запроса доступа в виде регулярных выражений

    Как установить траекторию инструмента SGEN в Msbuild для целевой среды 3.5

    Прокрутка двумя пальцами с помощью UIScrollView

    Вызывается: java.security.UnrecoverableKeyException: невозможно восстановить ключ

    FirebaseListAdapter не подталкивает отдельные элементы для приложения для чата – Firebase-Ui 3.1

    искать текстовый файл с помощью c # и отображать номер строки и полную строку, содержащую ключевое слово поиска

    Создание 3D-сферы в Opengl с использованием Visual C ++

    Вызов суперclassа из конструктора подclassа в Java

    CMake: Какое использование find_package (), если вам нужно указать CMAKE_MODULE_PATH?

    Как захватить рабочий стол в OpenCV (т. Е. Превратить bitmap в Mat)?

    Анализ спектра звука с использованием алгоритма FFT в Java

    Как сохранить режим погружения в диалоговых windowsх?

    Давайте будем гением компьютера.