Captura dos pacotes
Como todos já devem saber, quando o problema é extremamente complexo e os debugs não estão sendo muito claros, devemos partir para a captura de pacotes.
Ao ler sobre este termo, já nos vem a cabeça o Wireshark, sendo este o importante e famoso software de análise de protocolos. Através deste software podemos capturar todo o tráfego em uma interface para analisar as sinalizações, protocolos, etc.
O intuito desde documento não será abordar o Wireshark (para isso existe diversos artigos na internet a fora explicando em como utilizá-lo) mas sim em QUANDO devemos fazer uma captura de pacotes para análise de problemas relacionados a VoIP.
Pois bem, como dito acima, a "captura de pacotes" (em ingles o termo é conhecido como Sniffing) consiste em capturar todo o tráfego sendo transmitido ou recebido através de uma interface de redes para ser possível analisar os pacotes, mas para que essa captura seja feita é necessário algumas configurações na sua infraestrutura.
Por exemplo, é necessário capturar todo o tráfego de uma interface do Switch onde um IP Phone está conectado. Para isso o administrador de redes faz o espelhamento da porta (através da feature SPAN - Switched Port Analyzer) onde o telefone está conectado para outra interface que está conectada a um computador e com o Wireshark aberto em modo de captura. No momento da captura é efetuado os devidos testes para reprodução do problema/comportamento e assim que finalizado, a captura é interrompida para iniciar a análise. Veja na imagem abaixo uma ilustração do exemplo acima.
O exemplo acima demonstra uma captura de pacotes para analizar os pacotes RTP (Real-Time Protocol) trocados entre o IP Phone A e o IP Phone B.
Existem várias formas de SPAN, todas abordadas neste documento oficial.
Lembrando que o SPAN é aplicado em camada 2 apenas. Mas e se for necessário uma captura em um Voice Gateway que é interligado a um provedor SIP ? Bom, em casos assim podemos utilizar a feature IP Traffic Export (disponivel a partir da IOS 12.4) para capturar, e exportar para um servidor FTP, TFTP e analisar depois com o Wireshark. Conforme exibido na imagem abaixo.
Agora que já sabemos o que é e como fazer uma captura de pacotes, como devemos iniciar a análise ? Bom, primeiro deve-se ter mapeado aonde está o problema. Se o problema é relacionado a ligações ficando presas, digitos não sendo enviados, podemos deduzir que é algo relacionado a sinalização, portanto deve-se focar no protocolo SCCP ou SIP, se for problemas de one-way voice (voz em apenas um sentido da chamada) devemos checar o protocolo RTP
Analisando a captura dos pacotes
Agora vem a parte interessante: Analisar os pacotes capturados.
Utilizando o Wireshark, abra a captura e reserve um bom tempo para analisar as informações. Felizmente o Wireshark possui diversos filtros e expressões para que a investigação seja mais rápida, e com base nestes filtros (que com certeza você encontrou em um excelente documento na internet explicando como usar o Wireshark) é possível filtrar origem, destino, tipo do pacote, protocolo etc etc etc....
Eu particularmente já tive que fazer diversas capturas para analisar chamadas voip, principalmente com problemas de One-Way Voice. Em captura de chamadas VoIP, é possivel "reconstruir" a conversa utilizando o Wireshark, sendo este um importante recurso para validar estes problemas de "a pessoa do outro lado não me escuta, mas eu escuto ela".
DICA: One Way Voice é ocasionado por Balanceamento/Roteamento indevido dos pacotes RTP ou bloqueio em regras de Firewall
Para analizar os fluxos de voz presentes em sua captura com o Wireshark, vá em Telephony >> RTP >> Show All Streams
Como podemos ver na imagem acima, temos 14 Streams RTP nesta captura. Cada sentido da chamada possui o seu Stream (entrada/saida).
Ao selecionar um dos Streams e clicarmos em Analyze, podemos ver a origem e o destino da chamada e outras diversas informações como Jitter, perdas, etc.
Ao clicarmos em Player, abrirá uma nova janela. Clique em Decode, e selecione o Stream para que o botão Play fique ativo para que você possa ouvir o áudio. Conforme exibido na imagem abaixo.
Caso, sua análise forense exija que você exporte o arquivo, este poderá ser salvo em formato .raw ou .au.
Exportando o áudio capturado
Agora que a chamada foi capturada, analisada e exportada.... como podemos fazer para converter o arquivo .raw ou .au em WAV para que possamos ouvir o audio sem o uso do Wireshark? Simples, utilize o Audacity.
No Audacity, vá em Arquivo > Importar > Dados Raw...
Selecione o arquivo e em seguida insira as informações referente ao Codec utilizado na chamada.
Se você não informar os dados corretamente a conversão não funcionará. Conforme exibido na imagem acima, podemos ver que o Codec é G711a-law, Little-Endian (ordem dos bytes) e a frequência de 8000Hz.
Pronto, clique em importar e o áudio estará no Audacity, a partir dai você pode exportar para o formato que desejar, inclusive MP3.