Рубрика, посвященная 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/).
Для этого:
- Запустите wireshark.
- Выберите файл voip.cap в диалоге File->Open.
- После открытия файла нажмите Telephony->VoIP calls.
Вам отобразятся все звонки которые были в пакетном логе. - Выберите нужный звонок, кликнув по нему мышкой и нажмите “Flow”.
- Вам отобразится диаграмма звонка.
Кликнув по любой из стрелок, wireshark отобразит вам содержимое пакета, которое вы сможете посмотреть
Существует и другой, более изящный способ (без копирования файла) и запуске Wireshark с удаленной машины.
Расскажете про другой, более изящный способ? 🙂
Вся его суть заключается лишь в удаленном подключении/захвате трафика через wireshark (т.е. без записи файла на конечном сервере).