Назад | Перейти на главную страницу

Как в реальном времени увидеть коммуникацию сетевого протокола приложения

Я хотел бы видеть протокол, используемый клиент-серверным приложением в режиме реального времени. Меня не интересует никакая статистика. Все, что я хочу видеть, это сообщение, отправленное сервером и клиентом. Это специфично для FreeBSD, если это помогает. После некоторого поиска в Google я обнаружил, что tcpdump - правильный выбор. Поэтому я попытался запустить его на своем сервере, но не смог сузить список содержимого пакета, специфичного для моего приложения. Это связка прокрутки текста вживую. Реальная коммуникация моего приложения не настолько сложна, чтобы потерять его из виду, когда оно отображается на терминале.

Думаю, я могу не предоставить достаточно информации. Если что-то нужно, пожалуйста, оставьте комментарий. Я отвечу быстро.

Любая помощь или указатели приветствуются.

Вы можете легко отфильтровать, какие пакеты ловит tcpdump. Я полагаю, вы знаете, через какой порт обменивается данными ваше приложение? Скажем, например, что вы хотите перехватить весь трафик на порт 12345. Затем вы запустите:

$ tcpdump port 12345

Кроме того, вы можете записать в файл, а затем открыть позже с помощью инструмента графического интерфейса. Wireshark:

$ tcpdump -s0 -w packets.log port 12345

Если протокол основан на тексте (например, HTTP, SMTP и т. Д.), Мне нравится нгреп. Оно использует libpcap лайк tcpdump делает, поэтому синтаксис фильтрации такой же. Разница в том, что его вывод ориентирован на отображение полезной нагрузки пакета, и он позволит вам ограничить вывод пакетами, соответствующими регулярному выражению.

Например, чтобы увидеть попытки доставки почты, вы можете:

ngrep -d eth0 -qlM -s 0 -W byline '^MAIL FROM:|^RCPT TO:' 'tcp port 25'

Вам нужно будет выполнить некоторую фильтрацию, чтобы ограничить tcpdump только теми данными, которые вы хотите. Примером может быть поиск только трафика с участием как хоста a, так и хоста b:

tcpdump $options host a and host b 

Обычно я использую параметры -n, -X, -vv и -s0 с tcpdump. Вы также можете фильтровать по портам и многому другому. Чтобы посмотреть на SMTP-диалог между хостом a и хостом b, вы можете запустить tcpdump примерно так:

tcpdump -n -X -vv -s0  host a and host b and port smtp

Это ограничит отображаемые данные тем, что включает порт ldap, хост a и хост b. Если какой-либо из трех отсутствует, он не будет отображаться. На странице руководства будет гораздо больше информации о фильтрации.

Надеюсь, это поможет, Рик