美文网首页
【应用软件】SIPp手册

【应用软件】SIPp手册

作者: _阿龙_ | 来源:发表于2017-08-08 20:54 被阅读0次

    我的个人博客


    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)

    相关文章

      网友评论

          本文标题:【应用软件】SIPp手册

          本文链接:https://www.haomeiwen.com/subject/geexrxtx.html