【应用软件】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 场景文件必须以如下语句开始:

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

以如下语句结束:

</scenario>

根据不同的场景在中间加入不同的控制命令,若一个场景中很有多段,可以使用标号 label 来区分,标号的写法为:<label id="x"/>,其中,“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 网络状态

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
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)
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)
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,194评论 6 490
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,058评论 2 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 156,780评论 0 346
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,388评论 1 283
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,430评论 5 384
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,764评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,907评论 3 406
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,679评论 0 266
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,122评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,459评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,605评论 1 340
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,270评论 4 329
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,867评论 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,734评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,961评论 1 265
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,297评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,472评论 2 348

推荐阅读更多精彩内容

  • 3.1. 介绍 现在,您已经安装了Wireshark并有可能热衷于开始捕捉您的第一个数据包。在接下来的章节中,我们...
    wwyyzz阅读 1,379评论 0 1
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,628评论 18 139
  • 关键词: SIPLifesize华为对通 摘要: 在使用SIP协议与外厂商终端对通过程中遇到诸多问题,特在此总结。...
    johney_zhou阅读 1,482评论 0 1
  • Real-World Deployment Test The WaveQoE Real-World Deploym...
    faraway_com阅读 1,164评论 0 1
  • RTSP SDP RTP/RTCP 介绍应用层 RTSP、SDP; 传输层 RTP、TCP、UDP; 网络层 IP...
    Atom_Woo阅读 3,820评论 0 7