Отладка VoIP звонка с Wireshark

Предположим, вы хотите посмотреть в графической форме диаграмму прохождения вызова.
В удобном формате представляет данные wireshark:

Кликнув по каждой стрелочке, вы можете посмотреть расшифровку сообщения:

Wireshark работает с файлами, содержащими захваченный звонок, в формате .pcap.
Поэтому задача - получить такой файл

Автоматический захват вызовов на сервере.

Это предпочтительный способ.
Воспользуйтесь встроенной системой Захват звонков для получения файла .pcap.

Ручной захват вызовов на сервере.

Если по какой-либо причине автоматический Захват звонков недоступен в вашей версии, воспользуйтесь ручным способом.

1. Получите root доступ. Описано в разделе Как зайти на сервер под root

2. Снимите пакетный лог звонка.
Для этого используем утилиту tcpdump:

# tcpdump -s 0 -w voip.cap

Эта команда будет снимать пакетный лог в файл voip.cap в текущей директории.
Однако намного лучше если вы знаете, от кого вы будете принимать трафик и/или на кого будете отправлять.
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

Команды выше начинают снятие пакетного лога.
Для прекращения снятия и записи в файл нажмите CTRL+C.

Внимание! Для корректного снятия дампа нужно запустить tcpdump до начала звонка и прекратить после завершения звонка.

3. Скачайте пакетный лог себе на компьютер.
Для этого используем программу pscp (http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html):

pscp.exe -C admin@10.0.0.1:voip.cap voip.cap

Теперь пакетный лог у вас на компьютере.

Ручной захват вызовов на вашем ПК

Если вы генерируете вызов с вашего ПК, то удобнее снимать дамп на вашем ПК, а не на сервере.

Для этого:
  1. Запустите wireshark.
  2. Нажмите Start.
  3. Если вам предложит - то выберите сетевой интерфейс, на котором снимать дамп.
  4. Совершите вызов из софтфона
  5. Нажмите Stop в wireshark.
  6. Сохраните в файл (Save As).

Использование wireshark для анализа.

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

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

Проигрывание аудио.

Wireshark умеет проигрывать аудио из звонка.
Поддерживает только G.711 кодек.
Для проигрывания:

  1. Запустите wireshark.
  2. Выберите файл voip.cap в диалоге File->Open.
  3. После открытия файла нажмите Telephony->VoIP calls.
    Вам отобразятся все звонки которые были в пакетном логе.
  4. Выберите нужный звонок, кликнув по нему мышкой и нажмите "Player".
  5. Нажмите "Decode".
  6. Выберите один из потоков, нажав флажок возле соотв. потока
  7. Нажмите "Воспроизвести".

English translation