[关闭]
@juecan 2017-08-08T12:55:26.000000Z 字数 5134 阅读 1195

【应用软件】SIPp手册

应用软件

我的个人博客


SIPp安装

SIPp 是一个测试 SIP 协议性能的工具软件

安装依赖

RedHat

  1. yum install gcc-c++ gcc automake autoconf libtool make
  2. yum install ncurses ncurses-devel
  3. yum install openssl openssl-devel # TLS support
  4. yum install lksctp-tools lksctp-tools-devel # SCTP support
  5. yum install libpcap libpcap-devel libnet libnet-devel # PCAP play support
  6. yum install gsl gsl-devel # distributed pauses

Debian

  1. apt-get install g++ gcc automake autoconf libtool make
  2. apt-get install libncurses5 libncurses5-dev
  3. apt-get install openssl libssl-dev
  4. apt-get install libsctp1 lksctp-tools libsctp-dev
  5. apt-get install libpcap-dev libnet1 libnet1-dev
  6. apt-get install gsl-bin libgsl0-dev libgsl0ldbl

编译安装

  1. ./configure --with-sctp --with-pcap --with-openssl
  2. make
  3. make install

SIPp使用

SIPp 自带用户代理工作流程

可使用命令导出自带的用户代理工作流程(uac、uas、regexp、branchc、branchs、3pcc-C-A、3pcc-C-B、3pcc-A、3pcc-B)到文件中,例如:

  1. sipp -sd uac >> uac.xml

同一台机子进行测试

  1. sipp -sn uas # 本机作为服务端
  2. sipp -sn uac 127.0.0.1 # 本机作为客户端

SIPp 作为 SIP 服务器端

sipp -sf 场景文件 -p 本地端口 -i 本地IP -rsa 对端IP:对端端口 -trace_msg

SIPp 作为 SIP 客户端

sipp -sf 场景文件 -i 本地IP 对端IP:对端端口 -m 最大呼叫量 -trace_msg

  1. sipp 172.16.8.88:5060 -i 172.16.8.181 -sf sipp-uac-register.xml -inf 3001-register.csv -m 10 -l 10 -d 10000 -r 10 -rp 10000
参数 说明
172.16.8.88:5060 表示远端服务器的 IP 和端口(Asterisk Server)
-i 172.16.8.181 表示本机(SIPp 端)的IP
-sf sipp-uac-register.xml 表示使用的XML场景文件是sipp-uac-register.xml(该场景文件用于注册到 Asterisk,暂停一会儿后取消注册)
-inf 3001-register.csv 表示使用的 CSV 统计数据转储文件是 3001-register.csv
-m 10 表示最大呼叫数为 10
-l 10 表示最大并发数为 10
-d 10000 对应 XML 文件中使用 pause 的参数,如果 pause 没有指定参数,则使用 -d 选项的参数,表示暂停 10000ms
-r 10 -rp 10000 表示10000ms内发起10次呼叫

注意:传递语音流(g711a.pcap)后暂停,暂停时间可由-d指定

CSV 统计数据转储文件

csv 文件是外部配置文件,定义 XML 场景文件中的相关变量,脚本会从 csv 文件中读取配置信息,比如用户账号,鉴权信息等。命令行使用 “-inf 文件名”
第一行申明变量的读取方式:顺序读取(SEQUENTIAL)、随机读取(RANDOM)、基于用户(USER)
之后每一行对应一个呼叫,使用 “;” 分隔符分隔每一项数据,分开的项在脚本中作为变量名 [filed0],[field1]……[fieldn] 来引用

  1. 1000;1050;[authentication username=1000 password=1234]
  1. RANDOM
  2. 1000;1050;[authentication username=1000 password=1234]
  1. SEQUENTIAL
  2. 1000;1050;[authentication username=1000 password=1234]
  1. USERS
  2. user000;password000
  1. SEQUENTIAL,PRINTF=120,PRINTFMULTIPLE=1,PRINTFOFFSET=1,
  2. 1%04d;1%04d;[authentication username=1%04d password=1%04d];1%04d
  3. # 10001~10120
  4. # PRINTF:用户个数
  5. # PRINTFMULTIPLE:步长
  6. # PRINTFOFFSET:基数(起始数据)

XML的场景文件

xml 文件是 sipp 的执行脚本,描述 SIP 工作流程,sipp 按照脚本定义的流程来完成 sip 协议的流程

选项 说明
[field0] 匹配 CSV 配置文件第二行开始的每行第一列数据
[field1] 匹配 CSV 配置文件第二行开始的每行第二列数据
[fieldn] 匹配 CSV 配置文件第 n 行开始的每行第二列数据
[remote_ip] 匹配命令行参数的远端服务器 IP
[remote_port] 匹配命令行参数的远端服务器 PORT
[local_ip] 匹配命令行参数 –i 设置的本地 IP
其他’[]’ 表示的参数SIPp可自动获取

一个 xml 场景文件必须以如下语句开始:

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

以如下语句结束:

  1. </scenario>

根据不同的场景在中间加入不同的控制命令,若一个场景中很有多段,可以使用标号 label 来区分,标号的写法为:,其中,“x”为标号 ID

控制界面

按键 作用
+ 以 1 倍于 rate_scale 的速率增加呼叫
- 以 1 倍于 rate_scale 的速率减少呼叫
* 以 10 倍于 rate_scale 的速率增加呼叫
/ 以 10 倍于 rate_scale 的速率减少呼叫
c 进入命令控制模式
q 待所有呼叫完成后退出 sipp
Q 立即退出 sipp
s 转储当前状态到日志文件
p 暂停当前工作
1 显示场景页面
2 显示统计页面
3 显示分部页面
4 显示变量页面
5 显示 TDM 页面
6-9 显示其它分部页面

按 c 进入命令模式后,可以输入如下命令控制:

命令 描述
dump tasks 把错误信息转储到日志文件
set rate x 设置呼叫率
set rate-scale x 设置 rate-scale
set users x 设置用户数
set limit x 设置呼叫限制
set hide true/false
set display main/ooc 改变视图
set index true/false 设置场景视图中的索引信息
trace log on/off 设置开启或关闭日志跟踪

场景页面:显示呼叫的信令个数,呼叫率,呼叫限制、超时次数,重传次数,接收到异常的数据包个数
统计视图:显示呼叫的统计信息
分部视图:显示呼叫的平均响应时间以及平均通话时长

检查 SIPp 网络状态

  1. netstat -lpn |grep sipp
  2. 8888 is the port for SIPp control. Use the option -cp in the command line to change the base number.
  3. 5067 is the port for SIP signaling. Use the option -p in the command line to change it.
  4. 6000 is the default local RTP echo port.Use the option -mp in the command line to change it. RTP/UDP packets received on this port are echoed to their sender
  5. 6002 is the RTP echo port +2. RTP/UDP packets coming on this port are also echoed to their sender.

自制 SIPp 语音流

工具

  1. Server:Asterisk Server
  2. Client:Eyebeam、Wireshark

Server 端配置:

1. SIP Trunk

  1. [88001]
  2. username=88001
  3. secret=88001
  4. context=from-sip
  5. type=friend
  6. host=dynamic
  7. disallow=all
  8. allow=alaw

sip_endpoints

2. Routing Rules

  1. [from-sip]
  2. exten => _X.,1,Answer()
  3. exten => _X.,n,Playback(demo-instruct)
  4. exten => _X.,n,Hangup()
  5. ; 抓取 DTMF 按键
  6. [from-dtmf]
  7. exten => _X.,1,Answer()
  8. exten => _X.,n(background),BackGround(demo-instruct)
  9. exten => _X.,n,Hangup()
  10. exten => 0,1,Playback(digits/0)
  11. exten => 0,n,Goto(from-1234,_X.,background)
  12. exten => 1,1,Playback(digits/1)
  13. exten => 1,n,Goto(from-1234,_X.,background)
  14. exten => 2,1,Playback(digits/2)
  15. exten => 2,n,Goto(from-1234,_X.,background)
  16. exten => 3,1,Playback(digits/3)
  17. exten => 3,n,Goto(from-1234,_X.,background)
  18. exten => 4,1,Playback(digits/4)
  19. exten => 4,n,Goto(from-1234,_X.,background)
  20. exten => 5,1,Playback(digits/5)
  21. exten => 5,n,Goto(from-1234,_X.,background)
  22. exten => 6,1,Playback(digits/6)
  23. exten => 6,n,Goto(from-1234,_X.,background)
  24. exten => 7,1,Playback(digits/7)
  25. exten => 7,n,Goto(from-1234,_X.,background)
  26. exten => 8,1,Playback(digits/8)
  27. exten => 8,n,Goto(from-1234,_X.,background)
  28. exten => 9,1,Playback(digits/9)
  29. exten => 9,n,Goto(from-1234,_X.,background)
  30. exten => *,1,Playback(digits/*)
  31. exten => *,n,Goto(from-1234,_X.,background)
  32. exten => #,1,Playback(digits/#)
  33. exten => #,n,Goto(from-1234,_X.,background)

dialplan

Client 端抓包

  1. Wireshark 抓包
  2. Eyebeam 使用 88001 注册到 AsteriskServer,呼叫任意号码等待对端挂机
  3. Wireshark 停止抓包

注:Wireshark 中查看语音流编码

  1. Telephony - RTP - Show All Streams - g711A
  2. Telephony - VoIP Calls - Flow -> RTP (g711A)

wireshark_rtp_stream
wireshark_graph_analysis

生成 SIPp 支持的语音流

  1. 过滤:ip.src == AsteriskServerIP and ip.dst == EyebeamIP and rtp
  2. 导出:Export Specified Packets - All packages - Displayed - 保存类型:wireshark/tcpdump - 后缀.pcap

wireshark_rtp_filter

注:

  1. 过滤 RTP 包使用 rtp
  2. 过滤 dtmf 使用 rtpevent.event_id == ${num}
    • rtpevent.event_id == 10 表示 *(star)
    • rtpevent.event_id == 11 表示 #(pound)
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注