1、sipp的安装

1) 在centos 7.2下安装

yum install make gcc gcc-c++ ncurses ncurses.x86_64 ncurses-devel ncurses-devel.x86_64 openssl lksctp-tools libnet libpcap libpcap-devel libpcap.x86_64 libpcap-devel.x86_64 gsl gsl-devel
cd /root/
wget http://sourceforge.net/projects/sipp/files/sipp/3.4/sipp-3.3.990.tar.gz/download
tar -zxvf sipp-3.3.990.tar.gz
cd sipp-3.3.990/
./configure --with-sctp --with-pcap --with-openssl make && sudo make install
sipp -v

2) 在ubuntu14.04 下有些差异

http://sipp.sourceforge.net/doc3.3/reference.html

http://sipp.sourceforge.net/doc/reference.html

https://github.com/SIPp

tar xvf sipp-3.5.2.tar.gz
cd sipp-3.5.2
sudo apt-get install libsctp-dev lksctp-tools
sudo apt-get install libncurses5-dev
sudo apt-get install libpcap-dev libssl-dev
sudo apt-get install build-essential
./build.sh --with-pcap --with-sctp --with-openssl
make
make install

2、sipp拨号测试

先在freepbx上创建好两个分机103和104

最好是在linux下创建xml脚本文件,因为windows操作之后文档的编码格式可能会改变,xml对编码格式非常敏感。在windows和linux两边编辑容易出问题。

1) 主叫账户

vi caller.csv

SEQUENTIAL
103;104;[authentication username=103 password=103]

2) 被叫账号

vi callee.csv

SEQUENTIAL
104;;[authentication username=104 password=104]

3) 注册脚本

vi regclient_set_c_port.xml

<?xml version="1.0" encoding="ISO-8859-1" ?>
<!DOCTYPE scenario SYSTEM "sipp.dtd">
<scenario name="regclient">
<!--本脚本特为持续性测试使用,如单次使用,建议-p 与-set c_port的端口设为相同-->
<!--执行命令样例:sipp -sf regc_set_c_port.xml 172.31.231.220:5060 -i 172.31.231.23 -p 5077 -inf caller.csv -m 1 -set c_port 5066--><Global variables="c_port" /><nop hide="true"><action><!--设置EXP的值为3600--><assignstr assign_to="EXP" value="3600" /></action></nop><send><![CDATA[REGISTER sip:[remote_ip] SIP/2.0Via: SIP/2.0/[transport] [local_ip]:[local_port];branch=[branch]From: <sip:[field0]@[remote_ip]>;tag=acknnkkg.[call_number]To: <sip:[field0]@[remote_ip]>Call-ID: [call_id]CSeq: 1 REGISTERContact: <sip:[field0]@[local_ip]:[$c_port]>Max-Forwards: 70Subject: Reg Performance Test made by wangweiuser-agent: SIPp clientExpires: [$EXP]Content-Length: 0]]></send><recv response="401" optional="true" auth="true" next="auth" ></recv><recv response="403" optional="true" next="END"></recv><recv response="404" optional="true" next="END"></recv><recv response="200" next="END" timeout="5000"></recv><label id="auth" /><send><![CDATA[REGISTER sip:[remote_ip] SIP/2.0Via: SIP/2.0/[transport] [local_ip]:[local_port];branch=[branch][last_From:][last_To:][last_Call-ID:][last_CSeq:]Contact: <sip:[field0]@[local_ip]:[$c_port]>Max-Forwards: 70Subject: Reg Performance Test made by wangweiuser-agent: SIPp clientExpires: [$EXP][field2]Content-Length: 0]]></send><recv response="200" next="END" timeout="5000"></recv><label id="END"/><nop hide="true"></nop><!--<Reference variables="microseconds,seconds" />--><!-- Definition of the response time repartition table (unit is ms)   --><ResponseTimeRepartition value="50, 200"/><!-- Definition of the call length repartition table (unit is ms)     --><CallLengthRepartition value="500, 5000"/></scenario>

4) 被叫脚本

vi callee_with_bye.xml

<?xml version="1.0" encoding="ISO-8859-1" ?>
<!DOCTYPE scenario SYSTEM "sipp.dtd"><scenario name="callee_with_bye">
<!--用于模拟局内被叫侧用户的正常业务流程媒体类型:PCMU呼叫挂机:主叫方(60秒超时后主动发BYE拆话)--><!--执行命令样例:sipp -sf callee_with_bye.xml -p 5068--><!--定义全局状态机,如果收到OPTIONS消息,则跳转至options标签处-->
<recv request="OPTIONS" optional="global" next="options">
</recv><recv request="INVITE">
<!--参数caller_num、callee_num和caller_tag用于主叫未挂机,BYE接收超时主动发BYE的流程--><action><ereg regexp="<sip:(.*)@(.*)>;tag=(.*)"search_in="hdr"header="From: "check_it="true"assign_to="junk,caller_num,domain,caller_tag" />    <ereg regexp="<sip:(.*)@.*>"search_in="hdr"header="To: "check_it="true"assign_to="junk,callee_num" />      </action>
</recv><!--增加间隔20ms,避免偶现系统不发送100响应的问题-->
<pause hide="true" milliseconds="20"/>  <send><![CDATA[SIP/2.0 100 Trying[last_Via:][last_From:][last_To:][last_Call-ID:][last_CSeq:]Contact: <sip:[local_ip]:[local_port];transport=[transport]>Content-Length: 0]]></send><!--增加间隔20ms,避免偶现系统不发送180响应的问题-->
<pause hide="true" milliseconds="20"/> <send><![CDATA[SIP/2.0 180 Ringing[last_Via:][last_From:][last_To:];tag=[call_number][last_Call-ID:][last_CSeq:]Contact: <sip:[local_ip]:[local_port];transport=[transport]>Content-Length: 0]]>
</send><!--设置发送200后等待ACK的重传周期为1秒,如果1秒内收不到ACK则进行200的重传-->
<send retrans="1000" start_rtd="ack"><![CDATA[SIP/2.0 200 OK [last_Via:][last_From:][last_To:];tag=[call_number][last_Call-ID:][last_CSeq:]Contact:<sip:[local_ip]:[local_port];transport=[transport]>Content-Type: application/sdpContent-Length: [len]v=0o=user1 53655765 2353687637 IN IP[local_ip_type] [local_ip]s=-c=IN IP[media_ip_type] [media_ip]t=0 0m=audio [media_port] RTP/AVP 0 8a=rtpmap:0 PCMU/8000a=rtpmap:8 PCMA/8000a=ptime:20]]>
</send><!--设置等待ACK的超时定时器为30秒,如果30秒内收不到ACK则呼叫超时失败而结束-->
<recv request="ACK" rtd="ack" timeout="30000" /><!--使用rtp_stream循环播放PCMA音频
<nop hide="true"><action><exec rtp_stream="pcap/g711a.pcap,-1,0"/></action>
</nop>
-->
<!--使用rtp_stream循环播放PCMU音频
<nop hide="true"><action><exec rtp_stream="pcap/g711u.pcap,-1,0"/></action>
</nop>
--><!--使用play_pcap单次播放PCMA音频-->
<nop hide="true"><action><exec play_pcap_audio="pcap/g711a.pcap"/> </action>
</nop>
<!--使用play_pcap单次播放PCMU音频
<nop hide="true"><action><exec play_pcap_audio="pcap/g711u.pcap"/> </action>
</nop>
--><recv request="BYE" timeout="60000" ontimeout="send_bye"/>
<send next="END"><![CDATA[SIP/2.0 200 OK[last_Via:][last_From:][last_To:][last_Call-ID:][last_CSeq:]Contact: <sip:[local_ip]:[local_port];transport=[transport]>Content-Length: 0]]>
</send><label id="options"/><send next="END" ><![CDATA[SIP/2.0 200 OK[last_Via:][last_Call-ID:][last_From:][last_To:];tag=telpo-options[call_number][last_CSeq:][last_Contact:]user-agent: SIPP version [sipp_version]subject: reg performance test made by wangweilink-status: I am aliveContent-Length: 0]]>
</send> <!--主叫未挂机,BYE接收超时,被叫主动发BYE-->
<label id="send_bye"/>
<send start_rtd="bye"><![CDATA[BYE sip:[$caller_num]@[local_ip]:[local_port] SIP/2.0Via: SIP/2.0/[transport] [local_ip]:[local_port];branch=[branch]From: "[$caller_num]" <sip:[$caller_num]@[local_ip]>;tag=[call_number]To: "[$callee_num]"<sip:[$callee_num]@[local_ip]>;tag=[$caller_tag]Call-ID: [call_id]CSeq: 2 BYEMax-Forwards: 70Subject: normal call scenario by wangweiContent-Length: 0]]>
</send><recv response="200" rtd="bye">
</recv> <label id="END"/><Reference variables="junk,domain" /><!-- definition of the response time repartition table (unit is ms)-->
<ResponseTimeRepartition value="50, 200"/><!-- definition of the call length repartition table (unit is ms)-->
<CallLengthRepartition value="500, 1000, 10000"/></scenario>

5) 主叫脚本

vi caller_with_auth.xml

<?xml version="1.0" encoding="ISO-8859-1" ?>
<!DOCTYPE scenario SYSTEM "sipp.dtd"><scenario name="caller_with_auth">
<!--执行命令样例:sipp -sf caller_with_auth.xml 47.106.93.236:5060 -p 5066 -inf caller.csv -m 1 -d 10000 -oocsn ooc_default-->
<!--发送INVITE消息,设定重传定时器为1000ms,同时启动定时器invite-->
<send retrans="1000" start_rtd="invite"><![CDATA[INVITE sip:[field1]@[remote_ip] SIP/2.0Via: SIP/2.0/[transport] [local_ip]:[local_port];branch=[branch]From: "[field0]" <sip:[field0]@[remote_ip]>;tag=[call_number]zhg8To: "[field1]"<sip:[field1]@[remote_ip]>Call-ID: [call_id]CSeq: 1 INVITEContact: <sip:[field0]@[local_ip]:[local_port]>User-Agent: SIPp client mode version [sipp_version]Allow: INVITE,PRACK,ACK,UPDATE,CANCEL,BYE,OPTIONS,INFO,SUBSCRIBE,REFER,NOTIFYMax-Forwards: 70Content-Type: application/sdpContent-Length: [len]v=0o=SIPp [pid][call_number] 8[pid][call_number]8 IN IP[local_ip_type] [local_ip]s=SIPp Normal Call Testt=0 0m=audio [media_port] RTP/AVP 0 8c=IN IP[media_ip_type] [media_ip]a=rtpmap:0 PCMU/8000a=rtpmap:8 PCMA/8000a=ptime:20a=sendrecv]]></send><recv response="100" optional="true">
</recv><recv response="401" auth="true">
</recv><!--部分呼叫鉴权可能为407
<recv response="401" auth="true">
</recv>--><send><![CDATA[ACK sip:[field1]@[remote_ip]:[remote_port] SIP/2.0Via: SIP/2.0/[transport] [local_ip]:[local_port];branch=[branch-3]From: "[field0]" <sip:[field0]@[remote_ip]>;tag=[call_number]zhg8To: "[field1]"<sip:[field1]@[remote_ip]>[peer_tag_param]Call-ID: [call_id]CSeq: 1 ACKContact: <sip:[field0]@[local_ip]:[local_port]>Max-Forwards: 70Subject: normal call scenario by wangweiuser-agent: SIPp client mode version [sipp_version]Content-Length: 0]]></send><send retrans="1000" start_rtd="invite"><![CDATA[INVITE sip:[field1]@[remote_ip] SIP/2.0Via: SIP/2.0/[transport] [local_ip]:[local_port];branch=[branch]From: "[field0]" <sip:[field0]@[remote_ip]>;tag=[call_number]zhg8To: "[field1]"<sip:[field1]@[remote_ip]>Call-ID: [call_id]CSeq: 2 INVITE[field2]Contact: <sip:[field0]@[local_ip]:[local_port]>User-Agent: SIPp client mode version [sipp_version]Allow: INVITE,PRACK,ACK,UPDATE,CANCEL,BYE,OPTIONS,INFO,SUBSCRIBE,REFER,NOTIFYMax-Forwards: 70Content-Type: application/sdpContent-Length: [len]v=0o=SIPp [pid][call_number] 8[pid][call_number]8 IN IP[local_ip_type] [local_ip]s=SIPp Normal Call Testt=0 0m=audio [media_port] RTP/AVP 0 8c=IN IP[media_ip_type] [media_ip]a=rtpmap:0 PCMU/8000a=rtpmap:8 PCMA/8000a=sendrecva=ptime:20]]>
</send><!--1xx响应均为可选接收消息,且接收到临时响应后,即可停止invite定时器的计时-->
<!--收到4xx/5xx错误响应后,直接进入呼叫失败-->
<recv response="100" optional="true" rtd="invite">
</recv><recv response="183" optional="true" rtd="invite" next="normal">
</recv><recv response="403" optional="true" rtd="invite" next="err_ack">
</recv><recv response="480" optional="true" rtd="invite" next="err_ack">
</recv><recv response="486" optional="true" rtd="invite" next="err_ack">
</recv><recv response="500" optional="true" rtd="invite" next="err_ack">
</recv><recv response="503" optional="true" rtd="invite" next="err_ack">
</recv><recv response="180"  optional="true" rtd="invite" next="normal">
</recv><label id="normal"/>
<recv response="200" rtd="invite"><action><ereg regexp="m=audio ([0-9]*)"search_in="msg"check_it="true"assign_to="junk,callee_media_port" /></action>
</recv><nop hide="true"></nop><send><![CDATA[ACK sip:[field1]@[remote_ip]:[remote_port] SIP/2.0Via: SIP/2.0/[transport] [local_ip]:[local_port];branch=[branch]From: "[field0]" <sip:[field0]@[remote_ip]>;tag=[call_number]zhg8To: "[field1]"<sip:[field1]@[remote_ip]>[peer_tag_param]Call-ID: [call_id]CSeq: 2 ACKContact: <sip:[field0]@[local_ip]:[local_port]>Max-Forwards: 70Subject: normal call scenario by wangweiuser-agent: SIPp client mode version [sipp_version]Content-Length: 0]]>
</send><!--使用rtp_stream循环播放PCMA音频
<nop hide="true"><action><exec rtp_stream="pcap/g711a.pcap,-1,0"/></action>
</nop>
-->
<!--使用rtp_stream循环播放PCMU音频
<nop hide="true"><action><exec rtp_stream="pcap/g711u.pcap,-1,0"/></action>
</nop>
--><!--使用play_pcap单次播放PCMA音频-->
<nop hide="true"><action><exec play_pcap_audio="pcap/g711a.pcap"/> </action>
</nop>
<!--使用play_pcap单次播放PCMU音频
<nop hide="true"><action><exec play_pcap_audio="pcap/g711u.pcap"/> </action>
</nop>
--><!--媒体流传输完毕后,暂停发送BYE结束呼叫,在执行命令中增加参数-d 指定暂停时间:如-d 10000暂停10秒-->
<pause /><send start_rtd="bye"><![CDATA[BYE sip:[field1]@[remote_ip]:[remote_port] SIP/2.0Via: SIP/2.0/[transport] [local_ip]:[local_port];branch=[branch]From: "[field0]" <sip:[field0]@[remote_ip]>;tag=[call_number]zhg8To: "[field1]"<sip:[field1]@[remote_ip]>[peer_tag_param]Call-ID: [call_id]CSeq: 3 BYEMax-Forwards: 70Subject: normal call scenario by wangweiContent-Length: 0]]>
</send><recv response="200" rtd="bye" next="END">
</recv><!--异常结束,复用err_ack流程-->
<label id="err_ack"/><send><![CDATA[ACK sip:[field1]@[remote_ip]:[remote_port] SIP/2.0[last_Via:]From: "[field0]" <sip:[field0]@[remote_ip]>;tag=[call_number]zhg8To: "[field1]"<sip:[field1]@[remote_ip]>[peer_tag_param][last_Call-ID:]CSeq: 2 ACKMax-Forwards: 70Subject: normal call scenario by wangweiuser-agent: SIPp client mode version [sipp_version]Content-Length: 0]]>
</send><!--正常结束-->
<label id="END"/>
<nop hide="true">
</nop><!--如果存在定义了但未被使用的变量,可以在下面语句的双引号中增加,避免运行时报错-->
<Reference variables="junk,callee_media_port" /><!--definition of the response time repartition table (unit is ms)   -->
<ResponseTimeRepartition value="50, 200,1000,2000,4000,10000"/><!--definition of the call length repartition table (unit is ms)     -->
<CallLengthRepartition value="500, 1000, 10000"/></scenario>

6) 按以下步骤运行

#主叫注册
sipp -sf regclient_set_c_port.xml 47.106.xx.xxx:5060 -i 192.168.247.152 -p 5066 -inf caller.csv -set c_port 5066 -m 1

#被叫注册
sipp -sf regclient_set_c_port.xml 47.106.xx.xxx:5060 -i 192.168.247.152 -p 5088 -inf callee.csv -set c_port 5088 -m 1

#被叫
sipp -sf callee_with_bye.xml -i 192.168.247.152 -p 5088 -trace_err

#主叫
sudo sipp -sf caller_with_auth.xml 47.106.xx.xxx:5060 -i 192.168.247.152 -p 5066 -inf caller.csv -m 1 -d 10000 -oocsn ooc_default -trace_err

7) 登陆会议室

我在freepbx上创建的会议室号是2018,没有密码,直接拨号就能登进去

所以将主叫账户caller.csv改成登陆会议室就行

SEQUENTIAL
103;2018;[authentication username=103 password=103]

3、其他拓展应用

具体应用看手册 SIPp3.4中文参考手册.pdf https://files.cnblogs.com/files/dong1/SIPp3.4%E4%B8%AD%E6%96%87%E5%8F%82%E8%80%83%E6%89%8B%E5%86%8C.pdf

1) SIPP通过next指定id实现循环

https://blog.csdn.net/voip3261/article/details/10335925

参考 https://blog.csdn.net/netluoriver/article/details/21786301

转载于:https://www.cnblogs.com/dong1/p/10188712.html

sipp模拟freepbx分机测试(SIP协议调试)相关推荐

  1. linux sipp 呼叫转移_基于SIP协议的呼叫转移功能实现.pdf

    ea句拣 却m川1归3 年第却卷材第 u E,sw部署跚跚跚. E囚le倪cb胁'O响叫ni沁cS缸ci. &τT.e优ch. /De盹ι 15 , 2013 基于 SIP 协议的呼叫转移功能 ...

  2. SIP协议和压力测试, SIP callflow图形生成

    SIPp是一个测试SIP协议性能的工具软件.这是一个GPL的开放源码软件.      它包含了一些基本的SipStone用户代理工作流程(UAC和UAS),并可使用INVITE和B YE建立和释放多个 ...

  3. 基于python的压测工具_基于Python和SIPp的自动化压力测试系统设计和实现

    信斌 王桂花 摘要:首先,分析了现有测试系统的不足,之后,介绍了软件组成和运行环境说明,最后,设计了基于Python和SIPp的自动化压力测试系统,并给出了相关代码.新的测试系统克服了现有测试系统的不 ...

  4. 【个人作品】推荐一个SIP客户端-软电话,基于SIP协议,语言C++,界面QT4 开源,asterisk,tribox测试成功

    推荐一个SIP客户端-软电话,基于SIP协议,语言C++,界面QT4 开源,asterisk,tribox测试成功 属于个人独创作品,欢迎使用测试,欢迎与作者联系,共同研究.如果大家喜欢将拿出源码. ...

  5. FreePBX 12 SIP协议30分钟自动挂断问题处理

    FreePBX 12 SIP协议30分钟自动挂断问题处理 问题: SIP每次通话几乎恰好在 30 分钟左右掉线,而IAX协议并没有这个问题. 解决方案: 登录管理后台找到Settings =>A ...

  6. sip协议中文(3)

    选择最佳的应答 对于一个有状态的proxy来说,如果根据上边的步骤,没有任何终结应答被立刻发送,并且在客户端事务中的所有的客户端服务都已经终结,那么这个proxy必须发送一个终结应答到一个应答上下文的 ...

  7. 阐述:SIP协议是什么

    sip协议是什么?可能刚刚接触这个协议的朋友会掌握不好它的定义.那么首先我们要了解一下,目前企业中大多数VoIP应用都使用H.323协议,但是,随着越来越多的企业研究SIP协议,不久的将来基于SIP协 ...

  8. SIP协议学习2-pjsip

    一.    在windows下利用vc6.0编译pjsip源码 首先阅读文档readme.txt,查找在win32平台源码的编译方法.自己总结方法如下: a.设置pjsua为当前活动工程 b.因为编译 ...

  9. Cisco路由器全局、接口、协议调试指南

    全局调试 在配置Cisco路由器时,全局和接口命令的界限是十分明显的.在这种情况下,我们使用"全局"来标识那些不能用于接口调试或者特定的传输介质类型 和协议调试的命令.例如,在25 ...

最新文章

  1. Test Reprot
  2. C++中构造函数调用构造函数
  3. redis 的惊群处理和分布式锁的应用例子
  4. Flex与.NET互操作(四):使用HttpService、URLReqeust和URLLoader加载/传输数据
  5. C#学习记录3上——类的封装,继承,多态
  6. d3设置line长度_Graph Embedding之LINE算法解读
  7. 关于H5工程师那些日常必需工具
  8. android 充电模式deamon_Android MarsDaemon实现进程及Service常驻
  9. android res目录下存放图片文件夹 i m h xh xxh
  10. 【图像压缩】基于matlab小波变换图像压缩【含Matlab源码 879期】
  11. 路由器自动重启指令_如何按计划自动重启路由器,简便方法
  12. Ubuntu桌面版高版本无法更新软件:Unmet Dependencies
  13. 针对2021.12.12北大附中信息学奥赛选拔比赛应对策略
  14. 1.5. 唤醒任务:TTWU(try_to_wake_up)
  15. GPA计算器beta1
  16. 《动手学深度学习》学习之路01-- Kaggle⽐赛:房价预测
  17. go内存分析工具介绍--pprof
  18. (CVPR-2021)RepVGG:极简架构,SOTA性能,让VGG式模型再次伟大
  19. win7环境下安装ubuntu双系统
  20. excel切片器_Excel数据透视表,结合切片器制作一个动态的图表!

热门文章

  1. 使用CentOS7卸载自带jdk安装自己的JDK1.8
  2. 我该怎么选择IB课程?
  3. XML02:创建XML文件
  4. Java筑基三《代理模式》
  5. YouTube推荐!动画版机器学习过程 How Machines Learn ?
  6. JAVA调用SAP接口地址_Java以webservice方式调用SAP接口传输数据
  7. Js特殊字符转义之htmlEscape()方法
  8. 赛宁网安车联网项目入选智慧江苏重点工程名单
  9. 如何成为优秀软件设计师
  10. Android 10.0 Launcher3桌面禁止左右滑动