【应用软件】SIPp手册

我的个人博客


SIPp安装

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

安装依赖

RedHat

yum install gcc-c++ gcc automake autoconf libtool make
yum install ncurses ncurses-devel
yum install openssl openssl-devel # TLS support
yum install lksctp-tools lksctp-tools-devel # SCTP support
yum install libpcap libpcap-devel libnet libnet-devel # PCAP play support
yum install gsl gsl-devel # distributed pauses

Debian

apt-get install g++ gcc automake autoconf libtool make
apt-get install libncurses5 libncurses5-dev
apt-get install openssl libssl-dev
apt-get install libsctp1 lksctp-tools libsctp-dev
apt-get install libpcap-dev libnet1 libnet1-dev
apt-get install gsl-bin libgsl0-dev libgsl0ldbl

编译安装

./configure --with-sctp --with-pcap --with-openssl
make
make install

SIPp使用

SIPp 自带用户代理工作流程

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

sipp -sd uac >> uac.xml

同一台机子进行测试

sipp -sn uas # 本机作为服务端
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

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] 来引用

1000;1050;[authentication username=1000 password=1234]
RANDOM
1000;1050;[authentication username=1000 password=1234]
SEQUENTIAL
1000;1050;[authentication username=1000 password=1234]
USERS
user000;password000
SEQUENTIAL,PRINTF=120,PRINTFMULTIPLE=1,PRINTFOFFSET=1,
1%04d;1%04d;[authentication username=1%04d password=1%04d];1%04d
# 10001~10120
# PRINTF:用户个数
# PRINTFMULTIPLE:步长
# 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 场景文件必须以如下语句开始:



以如下语句结束:


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

控制界面

按键 作用
+ 以 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 网络状态

netstat -lpn  |grep sipp

8888 is the port for SIPp control. Use the option -cp in the command line to change the base number.
5067 is the port for SIP signaling. Use the option -p in the command line to change it.
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
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

[88001]
username=88001
secret=88001
context=from-sip
type=friend
host=dynamic
disallow=all
allow=alaw
【应用软件】SIPp手册_第1张图片
sip_endpoints

2. Routing Rules

[from-sip]
exten => _X.,1,Answer()
exten => _X.,n,Playback(demo-instruct)
exten => _X.,n,Hangup()

; 抓取 DTMF 按键
[from-dtmf]
exten => _X.,1,Answer()
exten => _X.,n(background),BackGround(demo-instruct)
exten => _X.,n,Hangup()
exten => 0,1,Playback(digits/0)
exten => 0,n,Goto(from-1234,_X.,background)
exten => 1,1,Playback(digits/1)
exten => 1,n,Goto(from-1234,_X.,background)
exten => 2,1,Playback(digits/2)
exten => 2,n,Goto(from-1234,_X.,background)
exten => 3,1,Playback(digits/3)
exten => 3,n,Goto(from-1234,_X.,background)
exten => 4,1,Playback(digits/4)
exten => 4,n,Goto(from-1234,_X.,background)
exten => 5,1,Playback(digits/5)
exten => 5,n,Goto(from-1234,_X.,background)
exten => 6,1,Playback(digits/6)
exten => 6,n,Goto(from-1234,_X.,background)
exten => 7,1,Playback(digits/7)
exten => 7,n,Goto(from-1234,_X.,background)
exten => 8,1,Playback(digits/8)
exten => 8,n,Goto(from-1234,_X.,background)
exten => 9,1,Playback(digits/9)
exten => 9,n,Goto(from-1234,_X.,background)
exten => *,1,Playback(digits/*)
exten => *,n,Goto(from-1234,_X.,background)
exten => #,1,Playback(digits/#)
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)
【应用软件】SIPp手册_第2张图片
wireshark_rtp_stream

【应用软件】SIPp手册_第3张图片
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)

你可能感兴趣的:(【应用软件】SIPp手册)