Диагностика VoIP звонка при помощи Wireshark

Автор Igor Ovcharenko | 06.10.2015

Диагностика VoIP звонка при помощи Wireshark

Диагностика VoIP звонков при помощи Wireshark

Рубрика, посвященная VoIP, постоянно пополняется информацией по диагностике и обслуживанию IP телефонии на базе Asterisk. Сегодня мы рассмотрим возможность диагностики и отладки VoIP звонка при помощи утилит tcpdump и Wireshark. Полученые диаграммы могут понадобиться при анализе проблемных ситуаций: нет звука, плохое качество связи, не проходят звонки и т.п. При этом полезным пособием будет схема диагностики вызовов при проблемах с NAT и отсутствием «голоса» при звонке.

Процесс отладки звонка будет проходить в несколько этапов.

Захват трафика при помощи tcpdump

Захват трафика выполняется на сервере телефонии при подключении по SSH под root. Важно выполнять захват пакетов до начала звонка. Программа Wireshark использует файлы с расширением .cap. Обратите внимание — полученный файл имеет большой объем, возможно, в некоторых случаях проще выполнять запись данного файла на примонтированный сетевой диск.

Итак, перейдя в нужный каталог (место расположение будущего файла) снимаем пакетный лог звонка при помоши утилиты tcpdump:

tcpdump -s 0 -w voip.cap

Обратите внимание: указанная команда будет снимать пакетный лог в файл voip.cap в текущей директории, поэтому, при необходимости, нужно указать явно место расположения создаваемого файла. Захват идет с первого по списку интерфейса. Прекратить захват можно комбинацией CTRL+C. Также не лишним будет, если вы знаете, от кого вы будете принимать траффик и/или на кого будете отправлять. IP адрес терминатора или оригинатора вы можете увидеть на веб интерфейсе. В таком случае выполните команду так:

tcpdump -s 0 -w voip.cap host 192.168.0.1

В этом случае 192.168.0.1 — это IP адрес искомого пира, через которого проходит звонок. Для снятия дампа с нескольких хостов (например, оригинатора и терминатора) воспользуйтесь такой командой:

tcpdump -s 0 -w voip.cap host 192.168.0.1 or 192.168.0.2

В этом случае 192.168.0.1 — это IP адрес оригинатора,
192.168.0.2 — это IP адрес терминатора.

Как было сказано выше — данные команды снимают дамп с первого по списку сетевого интерфейса. Для снятия дампа с определенного сетевого интерфеса выполните команду так:

tcpdump -i rl0 -s 0 -w voip.cap

Здесь rl0 — один из интерфейсов, выводимый по списку из:

ifconfig

Далее — копируем полученный файл на машину с Wireshark.

Использование Wireshark

Откройте пакетный лог, полученный автоматическим либо ручным способом, в программе Wireshark (http://www.wireshark.org/).

Для этого:

  1. Запустите wireshark.
  2. Выберите файл voip.cap в диалоге File->Open.
  3. После открытия файла нажмите Telephony->VoIP calls.
    Вам отобразятся все звонки которые были в пакетном логе.
  4. Выберите нужный звонок, кликнув по нему мышкой и нажмите «Flow».
  5. Вам отобразится диаграмма звонка.
    Кликнув по любой из стрелок, wireshark отобразит вам содержимое пакета, которое вы сможете посмотреть

Существует и другой, более изящный способо (без копирования файла) и запуске Wireshark с удаленной машины.

  • Андрей Михайлович

    Расскажете про другой, более изящный способ? 🙂

    • Вся его суть заключается лишь в удаленном подключении/захвате трафика через wireshark (т.е. без записи файла на конечном сервере).