Как стать автором
Обновить

Написание и запуск сценариев SIPP

Время на прочтение3 мин
Количество просмотров6.9K

Решил собрать небольшой гайд по использованию SIPP c предустановленными или собственными сценариями.

Полная информация о SIPP находится в документации, она же и является единственным источником всех знаний.

Здесь же будут описаны первые шаги при работе с sipp.

После прочтения документации, на данном этапе будет достаточно раздела "Create your own XML scenarios" опишу краткий этап создания собственного сценария. Все сценарии имеют расширение .xml и описанную в документации структуру, многом напоминающую структуру html. Довольно полезным источником станет данный репозиторий.

На нем собрано большое количество базовых сценариев на основе которых можно будет с легкостью выстроить собственный. План работы скрипта будет довольно прост:

 INVITE ---------->               
        100 <----------         
         180 <----------                
         200 <----------             
         ACK ---------->                                  
       Pause [   5000ms]           
              [ NOP ]              
       Pause [   5000ms]           
         BYE ---------->                 
        200 <----------

Отправляем INVITE, ожидаем ответов 100, 180, 200, после высылаем ACK, Pause(пауза на 5000мс), проигрывание заранее записанного аудиофайла, пауза на 5000мс, запрос BYE,ожидаем ответ 200.

Создаем файл сценария

nano firstscen.xml

Любой сценарий начинается строками(имя опционально):

<?xml version="1.0" encoding="ISO-8859-1" ?>
<scenario name="Basic Sipstone UAC">

Соответствуя плану мы должны отправить запрос INVITE, используем для этого метод send:

<send>
    <![CDATA[
    
      INVITE sip:[service]@[remote_ip]:[remote_port] SIP/2.0
      Via: SIP/2.0/[transport] [local_ip]:[local_port]
      From: sipp <sip:sipp@[local_ip]:[local_port]>;tag=[call_number]
      To: sut <sip:[service]@[remote_ip]:[remote_port]>
      Call-ID: [call_id]
      Cseq: 1 INVITE
      Contact: sip:sipp@[local_ip]:[local_port]
      Max-Forwards: 70
      Subject: Performance Test
      Content-Type: application/sdp
      Content-Length: [len]

      v=0
      o=user1 53655765 2353687637 IN IP[local_ip_type] [local_ip]
      s=-
      t=0 0
      c=IN IP[media_ip_type] [media_ip]
      m=audio [media_port] RTP/AVP 0
      a=rtpmap:0 PCMU/8000


    ]]>
        </send>

Если на данном этапе вам не понятна структура этого сообщения рекомендую ознакомиться с документацией, а пока можете просто скопировать это.

После запроса INVITE закономерно ожидаем ответов, опишем это используя команду "recovery response"

<recv response="100"> optional="true"
  </recv>

  <recv response="180"> optional="true"
  </recv>

  <recv response="200">
  </recv>

В нашем случае мы ожидаем сразу 3х ответов, из них ответы 100 и 180 нам не обязательны(на это указывает optional="true"), а вот ответ 200 система воспримет как обязательный для продолжения работы сценария.

<send>
    <![CDATA[

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

    ]]>
  </send>

После полученного ответа 200 OK отправим запрос ACK

<pause milliseconds="5000"/>

Выставляем паузу в 5000мс

<nop>
    <action>
      <exec play_pcap_audio="g711a.pcap"/>
    </action>
  </nop>

Команда nop используется для описания действий, в данном случае мы говорим сценарию проиграть записанный ранее файл g711a.pcap, этот файл хранится в дистрибуте о котором я говорил вначале, также вы можете использовать абсолютно любой .pcap файл, но для быстроты написания первого сценария возьмем этот.

<pause milliseconds="5000"/>

Снова зададим паузу в 5000 мс

<send retrans="500">
    <![CDATA[
      BYE sip:[service]@[remote_ip]:[remote_port] SIP/2.0
      Via: SIP/2.0/[transport] [local_ip]:[local_port];branch=[branch]
      From: sipp <sip:sipp@[local_ip]:[local_port]>;tag=[pid]SIPpTag00[call_number]
      To: sut <sip:[service]@[remote_ip]:[remote_port]>[peer_tag_param]
      Call-ID: [call_id]
      CSeq: 2 BYE
      Contact: sip:sipp@[local_ip]:[local_port]
      Max-Forwards: 70
      Subject: Performance Test
      Content-Length: 0
    ]]>
  </send>

  <recv response="200">
  </recv>

Здесь мы на аналогии с предыдущими запросами отправляем запрос BYE c соответстующим полем CSeq и ожидаем ответа 200OK.

Все, теперь наш сценарий написан и мы можем запустить его

sudo sipp ip_адрес_вызываемого_устройства -sf название_сценария.xml -r 1 -rp 1000 -s номер_абонента -l 1

Ключ sf позволяет запускать сторонние сценарии, таким образом Вы можете запустить все сценарии из описанного выше дистрибутива, что несомннено станет полезным учебным материалом.


Забыл упомянуть, сценарий заканчивается закрывающимся тегом </scenario>

Теги:
Хабы:
Всего голосов 3: ↑3 и ↓0+3
Комментарии3

Публикации

Истории

Ближайшие события

One day offer от ВСК
Дата16 – 17 мая
Время09:00 – 18:00
Место
Онлайн
Конференция «Я.Железо»
Дата18 мая
Время14:00 – 23:59
Место
МоскваОнлайн
Антиконференция X5 Future Night
Дата30 мая
Время11:00 – 23:00
Место
Онлайн
Конференция «IT IS CONF 2024»
Дата20 июня
Время09:00 – 19:00
Место
Екатеринбург
Summer Merge
Дата28 – 30 июня
Время11:00
Место
Ульяновская область