sipp – мощная утилита для генерации нагрузки на SIP оборудование. Обычно sipp используется для проверки отказоустойчивости систем IP-телефонии, выявления максимально-допустимой нагрузки или ddos-а конкурентов 🙂 Сценарий сессии в sipp описывается в XML файле. Можно воспользоваться одним из множества сценариев распространяемых в комплекте с sipp или создать свой.
Кроме тестирования сигнализации (SIP) sipp способен тестировать и медиа нагрузку. Для этого существуют два модуля: PCAP play и RTP echo. PCAP play – проигрывает заранее записанный сетевым анализатором (например wireshark) медиа файл. RTP echo – позволяет sipp отсылать обратно все полученные RTP потоки.
Пример использования sipp
sipp 10.10.10.1 -s 12345 -i 10.10.10.2 -d 2h -l 60 -aa -mi 10.10.10.2 -rtp_echo -nd -r 10
10.10.10.1 – IP адрес SIP сервера, на который следует слать запросы.
-s 12345 – Указывает номер который будет вызван. Может быть числом или текстом. Значение по умолчанию – service
-i 10.10.10.2 – Локальный IP адрес. Этот адрес будет использован в SIP сообщениях в качестве адреса источника сообщений. По умолчанию используется адрес 127.0.0.1.
-d 2h – Устанавливает длительность звонков. В данном случае звонки будут длиться 2 часа. Длительность по умолчанию – 1 секунда.
-l 60 – Ограничивает максимальное количество одновременных звонков – 60.
-aa – Включает автоматические ответы 200 OK на сообщения INFO, UPDATE и NOTIFY.
-mi 10.10.10.2 – Устанавливает локальный IP для RTP.
-rtp_echo – Включает режим RTP эха. Все RTP пакеты полученные от удалённой стороны – отправляются обратно.
-nd – Отключает стандартную обработку неожиданных ситуаций – sipp будет прерывать звонки в случае получения неправильных SIP сообщений.
-r 10 – Устанавливает максимальную «скорость звонков» (CPS) в данном случае – не более 10 звонков в секунду.
Максимальной скоростью вызовов можно управлять во время работы sipp с помощью клавиш «+» и «-» – повышая и понижая её соответственно. Вообще, опустив параметры -aa -mi 10.10.10.2 -rtp_echo -nd – мы получаем отличное средство для тестирования отказоустойчивости и максимального CPS у SIP proxy.
Настройка Asterisk
Для того, что бы Asterisk принимал звонки от sipp, необходимо создать в SIP.conf специальный SIP-peer с именем sipp. К сожалению, заставить sipp совершать вызовы от имени существующего пользователя – нельзя. В стандартных сценариях sipp всегда представляется как sipp. Добавляем в SIP.conf запись:
[sipp] type=friend context=in username=sipp host=10.10.10.2 dtmfmode=rfc2833 disallow=all allow=ulaw,alaw insecure=port,invite
Важными моментом, является наличие кодека ulaw в списке разрешенных т.к. именно его анонсирует sipp. Если 711u не будет в списке разрешённых кодеков, то Asterisk отклонит вызов от sipp. Вторым важным моментом, является строка insecure=port,invite. Данная строка заставляет Asterisk авторизовать sipp не по паролю, а по IP адресу указанному в поле host. Кроме записи в SIP.conf, можно создать специальный контекст в extensions.conf для обработки тестовых звонков от sipp.
Следующий пример принимает звонки на «номер» service – именно этот идентификатор используется по умолчанию:
[in] exten => service,1,MusicOnHold()
Вот и всё. Успехов в стресс тестах! 🙂
P.S. Документация по sipp — http://sipp.sourceforge.net/doc3.0/reference.html
