SIPp – Benchmarking servidores VoIP

SIPp (http://sipp.sourceforge.net/) es una herramienta opensource de prueba que permite inyectar tráfico SIP contra servidores de los cuales deseemos evaluar el rendimiento. Este programa puede actuar tanto actuando como UAC (User Agent Client) o UAS (User Agent Server), de tal forma que es capaz de generar tráfico, así como de reponder a él como si de un telefono o servidor Asterisk se tratase.

Gracias a unos ficheros XML, de los cuales mostraremos alguno, esta herramienta, que está disponible en los repositiorios de debian (ubuntu), permite establecer multiples llamadas y/o registros entre diferentes entidades. Estos ficheros XMLs pueden describir desde simples flujos de llamadas hasta algunos de mayor complejidad (dependerá de nuestro nivel y ganas).

Permite conexiones SIP sobre TCP o UDP, y es totalmente customizable. SIPP también puede enviar tráfico de audio (inyección de RTP) lo cual es muy interesante para poder analizar cuando se degrada el audio, por ejemplo, y/o analizar que nuestro servidor se encuentra completamente operativo.

Es una herramienta muy completa, y en el post actual voy a intentar hacer unas pruebas de concepto para familiarizarme con el, y poderlo utilizar regularmente como herramienta de debug.

Este software debe de ser utilizado con responsabilidad, y en ningún caso para realizar ataques contra terceras entidades. Tal y como yo lo veo, ha de ser una herramienta que nos permita calibrar la capacidad de nuestras máquinas, y así poder ver cuantos recursos tenemos disponibles y el comportamiento de centralitas y SBCs bajos condiciones extremas.

(1) Instalación de SIPP: Bajamos, descromprimimos e instalamos.

Instalamos SIPP, para comenzar a trabajar contra nuestro servidor. Así que abrimos una terminal, y si lo queremos hacer desde source code, nos deberemos de bajar el tar.gz, descomprimirlo, y realizar el ./configure y el make de lo que deseemos

toni@netvoip-sbc001:/home/toni# wget http://sourceforge.net/projects/sipp/files/sipp/3.4/sipp-3.3.990.tar.gz/download

toni@netvoip-sbc001:/home/toni# tar -xvzf sipp-3.3.990.tar.gz

toni@netvoip-sbc001:/home/toni# cd sipp-3.3.990

toni@netvoip-sbc001:/home/toni/sipp-3.3.990#./configure

En el paso de configure, podremos elegir qué soporte queremos para nuestro sipp. En cualquier caso, durante el proceso de instalación cabe destacar que yo tuve que ir haciendo apt-get installs de librerias y dependencias que faltaban.

toni@netvoip-sbc001:/home/toni/sipp-3.3.990#./configure --with-sctp --with-pcap

Instalamos SIPP a através de repositorios, o bajando del source. De modo simple:

toni@netvoip-sbc001:/home/toni#sudo apt-get install sipp

Una vez hecho esto, podemos ver si lo tenemos corriendo del siguiente modo:

toni@netvoip-sbc001:~$ sipp -v
SIPp v3.4.1-RTPSTREAM built Dec 29 2015, 16:36:44.
This program is free software; you can redistribute it and/or
 modify it under the terms of the GNU General Public License as
 published by the Free Software Foundation; either version 2 of
 the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
 but WITHOUT ANY WARRANTY; without even the implied warranty of
 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 GNU General Public License for more details.
You should have received a copy of the GNU General Public
 License along with this program; if not, write to the
 Free Software Foundation, Inc.,
 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
Author: see source files.
toni@netvoip-sbc001:~$

(2) Bajamos y/o generamos un XML para trabajar

La verdad es que me bajé un XML, con el objetivo de generar registros, pero no me funcionó demasiado bien (básicamente no era capaz de hacerlo funcionar, así que me puse a tuneralo un poco y me funcionó contra el Asterisk). El XML que comparto lo he bajado de OpenVoip (http://www.open-voip.org/index.php?title=SIPP_UAC_and_asterisk). Es muy interesante esta página.

 <?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE scenario SYSTEM "sipp.dtd">
<!-- -->
<!-- Sipp Rgistration scenario. -->
<!-- -->
<scenario name="Basic Sipstone UAC">
 <!-- ********************************* -->
 <!-- ***** Send Register packet ****** -->
 <!-- ********************************* -->
 <send retrans="500">
 <![CDATA[

 REGISTER sip:[remote_ip]:[remote_port] SIP/2.0
 Via: SIP/2.0/[transport] [local_ip]:[local_port];port;branch=branchTag.[call_id]
 Route: <sip:[remote_ip]:[remote_port];transport=[transport];lr>
 Max-Forwards: 70
 From: <sip:[service]@[remote_ip]>;tag=[call_number]
 To: <sip:[service]@[remote_ip]>
 Call-ID: [call_id]
 CSeq: 2 REGISTER
 User-Agent: sipp-testing-reg
 Contact: <sip:[service]@[local_ip]:[local_port];ob>
 Expires: 7200
 Content-Length: 0

 ]]>
 </send>
<!--
Contact: <sip:[service]@[local_ip]:[local_port]>;transport=[transport]
-->

<!-- ******************************************** -->
<!-- ***** Getting 100 message is optional ****** -->
<!-- ******************************************** -->
 <recv response="100"
 optional="true">
<!-- ***** Must get 401. auth="true" to take the challenge into account ****** -->
 </recv>
 <recv response="401" auth="true">
 </recv>
<!-- ********************* -->
<!-- ***** Send Ack ****** -->
<!-- ********************* -->
 <send>
 <![CDATA[

 ACK sip:[service]@[remote_ip]:[remote_port] SIP/2.0
 Via: SIP/2.0/[transport] [local_ip]:[local_port];port;branch=branchTag.[call_id]
 From: <sip:[service]@[remote_ip]:[local_port]>;tag=[call_number]
 To: <sip:[service]@[remote_ip]:[remote_port]>[peer_tag_param]
 Call-ID: [call_id]
 CSeq: 1 ACK
 Contact: sip:[service]@[local_ip]:[local_port]
 Max-Forwards: 70
 Subject: Performance Test
 Content-Length: 0

 ]]>
 </send>
<!-- ********************************************************************************** -->
<!-- ***** Send Registration with the authentication, note the user and password ****** -->
<!-- ********************************************************************************** -->
 <send retrans="500">
 <![CDATA[

 REGISTER sip:[remote_ip] SIP/2.0
 Via: SIP/2.0/[transport] [local_ip]:[local_port];port;branch=branchTag.[call_id]
 From: <sip:[service]@[remote_ip]:[remote_port]>;tag=[call_number]
 To: <sip:[service]@[remote_ip]:[remote_port]>[peer_tag_param]
 Call-ID: [call_id]
 CSeq: 2 REGISTER
 User-Agent: sipp-testing-reg
 Contact: <sip:[service]@[local_ip]:[local_port];ob>
 [authentication]
 Expires: 7200
 Content-Length: 0

 ]]>
 </send>
<!-- ******************************************** -->
<!-- ***** Getting 100 message is optional ****** -->
<!-- ******************************************** -->
 <recv response="100"
 optional="true">
 </recv>
<!-- ****************************** -->
<!-- ***** Should get 200 Ok ****** -->
<!-- ****************************** -->
 <recv response="200" rtd="true">
 </recv>
</scenario>

In order to modify this XML file, I take into account regular REGISTERs sent from a regular user agent, and I just copied the syntax, emulating the behavior.

(3) Hacemos pruebas

Una vez listo nuestro XML procederemos a ejecutar sipp con los comandos necesarios para poder autenticar nuestro UA simulado contra nuestro Asterisk:

Extension to register: 1001

Password extension to register: p4ss0rdn4d4s3gur4

Source IP of the server (Local): 10.0.0.1

Destination Server (Asterisk): server.testing.netvoip.no-ip.org:5060

File to load:

Resumiendo, ejecutamos lo siguiente:

toni@netvoip-sbc001:/home/toni#sipp -s 1001 -ap p4ss0rdn4d4s3gur4 -i 10.0.0.1:5060 -r 10 server.testing.netvoip.no-ip.org:5060 -sf samplesXML/reg_uac.xml

Nos aparecerá una pantalla como la siguiente la cual se ira actualizando en nuestra consola.

sipp

Resultados de SIPP registrandose contra un servidor Asterisk

Lo aconsejable: ir trasteando y no olvidar el man de sipp.

Bueno, espero que os haya parecido de utilidad la herramienta. La verdad es que sólo le veo posibilidades…

Como siempre, os dejo con las referencias!

Sources:

http://sipp.sourceforge.net/

http://sipp.sourceforge.net/doc/reference.html#Create+your+own+XML+scenarios

http://www.open-voip.org/index.php?title=SIPP_UAC_and_asterisk

http://techvick.blogspot.co.uk/2014/09/how-to-intsall-sipp-on-ubuntu.html

https://www.mail-archive.com/sipp-users@lists.sourceforge.net/msg02305.html

Anuncios