SIP调试之SIPP测试工具

2024-03-15 21:04
文章标签 sip 调试 测试工具 sipp

本文主要是介绍SIP调试之SIPP测试工具,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

  SIPP是针对SIP协议的一个性能测试的命令行工具,可以动态显示测试的统计信息(如呼叫速率、延时、消息统计等)。用户可以通过XML场景配置文件,自定义模拟各种UAC/UAS测试场景的信令交互流程,可以被用来测试IP话机、SIP代理、SIP PBX等SIP设备。

一、参考资料

官方网站:https://sipp.sourceforge.net/
参考文档:https://sipp.sourceforge.net/doc/reference.pdf

二、安装

linux平台:

sudo apt install sip-tester

注:也可以下载源码编译安装

三、使用

3.1 查看用法

# sipp -h

Usage:sipp remote_host[:remote_port] [options]Example:Run SIPp with embedded server (uas) scenario:./sipp -sn uasOn the same host, run SIPp with embedded client (uac) scenario:./sipp -sn uac 127.0.0.1Available options:*** Scenario file options:-sd  : Dumps a default scenario (embedded in the SIPp executable)-sf  : Loads an alternate XML scenario file.  To learn more about XML scenariosyntax, use the -sd option to dump embedded scenarios.They contain all the necessary help.
.................................
..................................

3.2 常用参数说明

-v

作用:显示版本信息

-bg

作用:后台模式运行

-sd

作用:输出SIPP内嵌的默认场景

sipp -sd <uac/uas/uac_pcap>

部分参数说明:

  1. uac: uac场景
  2. uas: uas场景
  3. uac_pcap: uac带媒体场景

将场景内容重定向到文件

sipp -sd uas > uas.xml

-sf

作用:加载指定的场景文件

sipp -sf uas.xml

-sn <uac/uas>

作用:使用默认的内置场景文件

# sipp -sn uas
# sipp -sn uac

-t <u1/un/t1/tn>

作用:设置传输方式
部分参数说明:

  u1: 使用一个UDPun: 一个呼叫用一个UDPt1: 使用一个TCPtn: 一个呼叫使用一个TCP

-i

作用:设置本地的IP地址,如contact,via,from

sip -i 192.168.1.100

-p

作用:设置本地的端口

sip -p 5060

-bind_local

作用:绑定本地IP地址

-ci

作用:本地控制IP

-cp

作用:本地控制PORT

3.3 场景文件

  可以从在线参考文档(https://sipp.sourceforge.net/doc/reference.pdf) 中的链接获取一些内置的测试场景的xml模板,手动改变其中的一些参数或流程形成目标场景文件。

uac.xml:

<scenario name="Basic Sipstone UAC"><!-- In client mode (sipp placing calls), the Call-ID MUST be         --><!-- generated by sipp. To do so, use [call_id] keyword.                --><send retrans="500"><![CDATA[INVITE sip:[service]@[remote_ip]:[remote_port] SIP/2.0Via: SIP/2.0/[transport] [local_ip]:[local_port];branch=[branch]From: sipp <sip:sipp@[local_ip]:[local_port]>;tag=[pid]SIPpTag00[call_number]To: [service] <sip:[service]@[remote_ip]:[remote_port]>Call-ID: [call_id]CSeq: 1 INVITEContact: sip:sipp@[local_ip]:[local_port]Max-Forwards: 70Subject: Performance TestContent-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 0a=rtpmap:0 PCMU/8000]]></send><recv response="100"optional="true"></recv><recv response="180" optional="true"></recv><recv response="183" optional="true"></recv><!-- By adding rrs="true" (Record Route Sets), the route sets         --><!-- are saved and used for following messages sent. Useful to test   --><!-- against stateful SIP proxies/B2BUAs.                             --><recv response="200" rtd="true"></recv><!-- Packet lost can be simulated in any send/recv message by         --><!-- by adding the 'lost = "10"'. Value can be [1-100] percent.       --><send><![CDATA[ACK sip:[service]@[remote_ip]:[remote_port] SIP/2.0Via: SIP/2.0/[transport] [local_ip]:[local_port];branch=[branch]From: sipp <sip:sipp@[local_ip]:[local_port]>;tag=[pid]SIPpTag00[call_number]To: [service] <sip:[service]@[remote_ip]:[remote_port]>[peer_tag_param]Call-ID: [call_id]CSeq: 1 ACKContact: sip:sipp@[local_ip]:[local_port]Max-Forwards: 70Subject: Performance TestContent-Length: 0]]></send><!-- This delay can be customized by the -d command-line option       --><!-- or by adding a 'milliseconds = "value"' option here.             --><pause/><!-- The 'crlf' option inserts a blank line in the statistics report. --><send retrans="500"><![CDATA[BYE sip:[service]@[remote_ip]:[remote_port] SIP/2.0Via: SIP/2.0/[transport] [local_ip]:[local_port];branch=[branch]From: sipp <sip:sipp@[local_ip]:[local_port]>;tag=[pid]SIPpTag00[call_number]To: [service] <sip:[service]@[remote_ip]:[remote_port]>[peer_tag_param]Call-ID: [call_id]CSeq: 2 BYEContact: sip:sipp@[local_ip]:[local_port]Max-Forwards: 70Subject: Performance TestContent-Length: 0]]></send><recv response="200" crlf="true"></recv><!-- definition of the response time repartition table (unit is ms)   --><ResponseTimeRepartition value="10, 20, 30, 40, 50, 100, 150, 200"/><!-- definition of the call length repartition table (unit is ms)     --><CallLengthRepartition value="10, 50, 100, 500, 1000, 5000, 10000"/></scenario>

uas.xml:

<scenario name="Basic UAS responder"><!-- By adding rrs="true" (Record Route Sets), the route sets         --><!-- are saved and used for following messages sent. Useful to test   --><!-- against stateful SIP proxies/B2BUAs.                             --><!-- Adding ignoresdp="true" here would ignore the SDP data: that     --><!-- can be useful if you want to reject reINVITEs and keep the       --><!-- media stream flowing.                                            --><recv request="INVITE" crlf="true"></recv><!-- The '[last_*]' keyword is replaced automatically by the          --><!-- specified header if it was present in the last message received  --><!-- (except if it was a retransmission). If the header was not       --><!-- present or if no message has been received, the '[last_*]'       --><!-- keyword is discarded, and all bytes until the end of the line    --><!-- are also discarded.                                              --><!--                                                                  --><!-- If the specified header was present several times in the         --><!-- message, all occurrences are concatenated (CRLF separated)       --><!-- to be used in place of the '[last_*]' keyword.                   --><send><![CDATA[SIP/2.0 180 Ringing[last_Via:][last_From:][last_To:];tag=[pid]SIPpTag01[call_number][last_Call-ID:][last_CSeq:]Contact: <sip:[local_ip]:[local_port];transport=[transport]>Content-Length: 0]]></send><send retrans="500"><![CDATA[SIP/2.0 200 OK[last_Via:][last_From:][last_To:];tag=[pid]SIPpTag01[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 0a=rtpmap:0 PCMU/8000]]></send><recv request="ACK"optional="true"rtd="true"crlf="true"></recv><recv request="BYE"></recv><send><![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><!-- Keep the call open for a while in case the 200 is lost to be     --><!-- able to retransmit it if we receive the BYE again.               --><timewait milliseconds="4000"/><!-- definition of the response time repartition table (unit is ms)   --><ResponseTimeRepartition value="10, 20, 30, 40, 50, 100, 150, 200"/><!-- definition of the call length repartition table (unit is ms)     --><CallLengthRepartition value="10, 50, 100, 500, 1000, 5000, 10000"/></scenario>

3.4 示例

3.4.1 运行内置UAS/UAC

# sipp -sn uas
# sipp -sn uac

3.4.2 指定自定义场景文件

sipp  -sf my_uas.xml

3.4.3 指定本地IP/端口

sipp  -sf uas.xml -i 192.168.1.200 5060

3.5 测试

192.168.1.16终端呼叫192.168.1.200

测试结果:

# sipp -sn uas 192.168.1.200
Resolving remote host '192.168.1.200'... Done.
------------------------------ Scenario Screen -------- [1-9]: Change Screen --Port   Total-time  Total-calls  Transport5060      30.29 s            1  UDP0 new calls during 0.172 s period       1 ms scheduler resolution            0 calls                                 Peak was 1 calls, after 10 s0 Running, 3 Paused, 0 Woken up0 dead call msg (discarded)           3 open sockets                          0/0/0 UDP errors (send/recv/cong)0 Total RTP pckts sent                  0.000 last period RTP rate (kB/s)Messages  Retrans   Timeout   Unexpected-Msg----------> INVITE             1         0         0         0               <---------- 180                1         0                                   <---------- 200                1         0         0                         ----------> ACK         E-RTD1 1         0         0         0               ----------> BYE                1         0         0         0               <---------- 200                1         0                                   [   4000ms] Pause              1                             0        

点击ctrl+C结束sipp,打印结果:

------------------------------ Test Terminated --------------------------------
----------------------------- Statistics Screen ------- [1-9]: Change Screen --Start Time             | 2024-03-15	15:01:44.429203	1710486104.429203         Last Reset Time        | 2024-03-15	15:02:14.553107	1710486134.553107         Current Time           | 2024-03-15	15:02:14.731231	1710486134.731231         
-------------------------+---------------------------+--------------------------Counter Name           | Periodic value            | Cumulative value
-------------------------+---------------------------+--------------------------Elapsed Time           | 00:00:00:178000           | 00:00:00:178000          Call Rate              |    0.000 cps              |    0.033 cps             
-------------------------+---------------------------+--------------------------Incoming calls created |        0                  |        1                 Outgoing calls created |        0                  |        0                 Total Calls created    |                           |        1                 Current Calls          |        0                  |                          
-------------------------+---------------------------+--------------------------Successful call        |        0                  |        1                 Failed call            |        0                  |        0                 
-------------------------+---------------------------+--------------------------Response Time 1        | 00:00:00:000000           | 00:00:00:000000          Call Length            | 00:00:00:000000           | 00:00:00:000000          
------------------------------ Test Terminated --------------------------------

网络抓包:
在这里插入图片描述

四、关键说明

  1. 一般用于性能、压力、稳定性测试
  2. 可以模拟一些异常或客户现场的信令交互流程,用于复现分析问题
  3. 场景文件编写人员既要熟悉SIP协议,又要熟悉SIPP的相关参数应用,因此实际上很少使用SIPP作为日常测试手段

这篇关于SIP调试之SIPP测试工具的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/813256

相关文章

C++中实现调试日志输出

《C++中实现调试日志输出》在C++编程中,调试日志对于定位问题和优化代码至关重要,本文将介绍几种常用的调试日志输出方法,并教你如何在日志中添加时间戳,希望对大家有所帮助... 目录1. 使用 #ifdef _DEBUG 宏2. 加入时间戳:精确到毫秒3.Windows 和 MFC 中的调试日志方法MFC

ASIO网络调试助手之一:简介

多年前,写过几篇《Boost.Asio C++网络编程》的学习文章,一直没机会实践。最近项目中用到了Asio,于是抽空写了个网络调试助手。 开发环境: Win10 Qt5.12.6 + Asio(standalone) + spdlog 支持协议: UDP + TCP Client + TCP Server 独立的Asio(http://www.think-async.com)只包含了头文件,不依

如何在Visual Studio中调试.NET源码

今天偶然在看别人代码时,发现在他的代码里使用了Any判断List<T>是否为空。 我一般的做法是先判断是否为null,再判断Count。 看了一下Count的源码如下: 1 [__DynamicallyInvokable]2 public int Count3 {4 [__DynamicallyInvokable]5 get

计算机毕业设计 大学志愿填报系统 Java+SpringBoot+Vue 前后端分离 文档报告 代码讲解 安装调试

🍊作者:计算机编程-吉哥 🍊简介:专业从事JavaWeb程序开发,微信小程序开发,定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事,生活就是快乐的。 🍊心愿:点赞 👍 收藏 ⭐评论 📝 🍅 文末获取源码联系 👇🏻 精彩专栏推荐订阅 👇🏻 不然下次找不到哟~Java毕业设计项目~热门选题推荐《1000套》 目录 1.技术选型 2.开发工具 3.功能

vscode中文乱码问题,注释,终端,调试乱码一劳永逸版

忘记咋回事突然出现了乱码问题,很多方法都试了,注释乱码解决了,终端又乱码,调试窗口也乱码,最后经过本人不懈努力,终于全部解决了,现在分享给大家我的方法。 乱码的原因是各个地方用的编码格式不统一,所以把他们设成统一的utf8. 1.电脑的编码格式 开始-设置-时间和语言-语言和区域 管理语言设置-更改系统区域设置-勾选Bata版:使用utf8-确定-然后按指示重启 2.vscode

起点中文网防止网页调试的代码展示

起点中文网对爬虫非常敏感。如图,想在页面启用调试后会显示“已在调试程序中暂停”。 选择停用断点并继续运行后会造成cpu占用率升高电脑卡顿。 经简单分析网站使用了js代码用于防止调试并在强制继续运行后造成电脑卡顿,代码如下: function A(A, B) {if (null != B && "undefined" != typeof Symbol && B[Symbol.hasInstan

php 7之PhpStorm + Nginx + Xdebug运行调试

操作环境: windows PHP 7.1.10 PhpStorm-2017.2.4 Xdebug 2.5.4 Xdebug helper 1.6.1 nginx-1.12.2 注意查看端口占用情况 netstat -ano //查看所以端口netstat -aon|findstr "80" //查看指定端口占用情况 比如80端口查询情况 TCP 0.0.0.0:8

【2025】基于Python的空气质量综合分析系统的设计与实现(源码+文档+调试+答疑)

博主介绍:     ✌我是阿龙,一名专注于Java技术领域的程序员,全网拥有10W+粉丝。作为CSDN特邀作者、博客专家、新星计划导师,我在计算机毕业设计开发方面积累了丰富的经验。同时,我也是掘金、华为云、阿里云、InfoQ等平台的优质作者。通过长期分享和实战指导,我致力于帮助更多学生完成毕业项目和技术提升。 技术范围:     我熟悉的技术领域涵盖SpringBoot、Vue、SSM、HLMT

VS Code 调试go程序的相关配置说明

用 VS code 调试Go程序需要在.vscode/launch.json文件中增加如下配置:  // launch.json{// Use IntelliSense to learn about possible attributes.// Hover to view descriptions of existing attributes.// For more information,