h1. Отладка VoIP звонка с Wireshark {{>toc}} Предположим, вы хотите посмотреть в графической форме диаграмму прохождения вызова. В удобном формате представляет данные _wireshark_: !capture.gif! Кликнув по каждой стрелочке, вы можете посмотреть расшифровку сообщения: !capture1.gif! _Wireshark_ работает с файлами, содержащими захваченный звонок, в формате _.pcap_. Поэтому задача - получить такой файл h2. Автоматический захват вызовов на сервере. Это предпочтительный способ. Воспользуйтесь встроенной системой [[Захват звонков]] для получения файла _.pcap_. h2. Ручной захват вызовов на сервере. Если по какой-либо причине автоматический [[Захват звонков]] недоступен в вашей версии, воспользуйтесь ручным способом. 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
Теперь пакетный лог у вас на компьютере. h2. Ручной захват вызовов на вашем ПК Если вы генерируете вызов с вашего ПК, то удобнее снимать дамп на вашем ПК, а не на сервере. Для этого: # Запустите _wireshark_. # Нажмите Start. # Если вам предложит - то выберите сетевой интерфейс, на котором снимать дамп. # Совершите вызов из софтфона # Нажмите Stop в _wireshark_. # Сохраните в файл (Save As). h2. Использование _wireshark_ для анализа. Откройте пакетный лог, полученный автоматическим либо ручным способом, в программе _wireshark_ (http://www.wireshark.org/). Для этого: # Запустите _wireshark_. # Выберите файл voip.cap в диалоге File->Open. # После открытия файла нажмите Telephony->VoIP calls. Вам отобразятся все звонки которые были в пакетном логе. # Выберите нужный звонок, кликнув по нему мышкой и нажмите "Flow". # Вам отобразится диаграмма звонка. Кликнув по любой из стрелок, _wireshark_ отобразит вам содержимое пакета, которое вы сможете посмотреть. h3. Проигрывание аудио. Wireshark умеет проигрывать аудио из звонка. Поддерживает только G.711 кодек. Для проигрывания: # Запустите _wireshark_. # Выберите файл voip.cap в диалоге File->Open. # После открытия файла нажмите Telephony->VoIP calls. Вам отобразятся все звонки которые были в пакетном логе. # Выберите нужный звонок, кликнув по нему мышкой и нажмите "Player". # Нажмите "Decode". # Выберите один из потоков, нажав флажок возле соотв. потока # Нажмите "Воспроизвести". [[Debug VoIP call with Wireshark|English translation]]