VoIP

Extrayendo el audio de una llamada usando sngrep y wireshark

By Abril 19, 2018 No Comments

En muchas ocasiones nos hemos encontrado con situaciones en las cuales es necesario hacer capturas de llamadas a nivel de red con el fin de depurar algún inconveniente. Si bien existen muchas herramientas para realizar capturas como tcpdump y wireshark/tshark, casi siempre recurrimos a sngrep, puesto que es muy sencillo de usar y cuenta con una gran cantidad de características que nos permiten acceder rápidamente a la llamada que deseamos inspeccionar. Por ello, hemos decidido realizar un post corto sobre cómo instalar y usar sngrep y wireshark para extraer el audio de una llamada.

¿Qué es sngrep?

sngrep es una herramienta para facilitar el aprendizaje o depuración de SIP. Es desarrollada y mantenida por la empresa española irontec, y a nuestro juicio es imprescindible a la hora de depurar inconvenientes en SIP.  Es distribuída bajo el licenciamiento GPLv3. Dentro de las características a resaltar se encuentran su simplicidad, la posibilidad de ejecutarse en la consola gracias a su interfaz basada en ncurses, y la posibilidad de filtrar por una gran cantidad de campos, además del hecho de que nos permita capturar tanto la señalización SIP como el audio RTP.

Instalación

La documentación de sngrep es bastante amplia y no vamos a replicar la misma en el presente post. Para obtener sngrep tenemos la opción de compilarlo desde los fuentes o bien optar por instalarlo usando los binarios los cuales están disponibles en varias distribuciones (Debian/Ubuntu, CentOS/Fedora/RHEL, Alpine Linux, Gentoo, Arch, etc). Por lo general realizamos la instalación usando los binarios disponibles en los repositorios de irontec. Por ejemplo, para Centos 5/6/7 creamos el siguiente archivo con el siguiente contenido:
/etc/yum.repos.d/irontec.repo

[irontec] name=Irontec RPMs repository
baseurl=http://packages.irontec.com/centos/$releasever/$basearch/

Posterior a ello debemos instalar la llave del repositorio:
wget http://packages.irontec.com/public.key -q -O - | apt-key add -

Y finalmente realizar la instalación del paquete:
apt-get update
apt-get install sngrep

Capturando llamadas

Para correr sngrep de forma tal que podamos capturar únicamente llamadas y que adicionalmente se incluya el RTP en las mismas, debemos realizar la ejecución con los siguientes parámetros:

sngrep -c -r

Con lo anterior sngrep se incia en su ventana principal en donde podemos visualizar los diferentes diálogos:

Nuevamente recomendamos consultar la documentación ya que contamos con la opción de ejecutar diferente acciones como filtrar los diálogos y grabar determinadas llamadas.

Al ingresar a un diálogo particular (presionando enter sobre la línea) podemos tener acceso a los diferentes mensajes del mismo:

Esta ventana es particularmente útil ya que podremos navegar por los diferentes mensajes y observar detalladamente cada uno de ellos, pudiendo visualizar las cabeceras SIP así como los valores que se encuentran en los mensajes.

De igual forma, presionando F3 en esta ventana podremos observar la información del RTP.

Al volver a la ventana principal (presionando la tecla ESC) podemos acceder al diálogo de grabación de capturas al presionar la tecla s, es allí donde podemos indicar los diálogos que serán grabados así como si en dicha captura se desea incluir el RTP (Nota. Para grabar el RTP es necesario ejecutar sngrep con la opción -r).

Al descargar el archivo .pcap el mismo podrá ser abierto nuevamente en sngrep, tcpdump o wireshark.

Usando Wireshark para extraer el audio

Después de abrir el archivo en Wireshark procedemos a visualizar los “Streams RTP” en el menú “Telephony”:

seleccionamos uno de los flujos que se deseen analizar y solicitamos a Wireshark que encuentre el diálogo correspondiente a la otra dirección mediante el botón “Find Reverse”:

luego ingresamos al diálogo de análisis de flujos RTP mediante el botón “Analyze”:

En este menú podremos obtener información detallada del flujo RTP, reproducir la llamada, encontrar problemas con el tráfico RTP y descargar el payload que no es más que la grabación de la llamada. Es importante grabar la llamada en formato .au e incluir ambos canales en la grabación:

Finalmente obtendremos un archivo de audio con la llamada deseada:

Lo interesante de este método para acceder al audio de la llamada es que el flujo RTP es capturado directamente en la interfaz de red, por lo que en caso de problemas en la calidad de audio se tendrán más posibilidades de dar un diagnóstico sobre la causa del mismo. De igual forma, es complementamente independiente del core de telefonía que se esté usando como Asterisk,  FreeSWITCH, Kamailio, etc., ya que cuando se hace de esta manera estamos hablando únicamente SIP y RTP.

Leave a Reply