sipp
1|0sip介绍
sip - dongye95 - 博客园 (cnblogs.com)
2|0sipp介绍
SIPp是一个测试SIP协议性能的工具软件,它包含了一些基本的SipStone用户代理工作流程(UAC和UAS),并可使用INVITE和BYE建立和释放多个呼叫。它也可以读XML的场景文件,即描述任何性能测试的配置文件。它能动态显示测试运行的统计数据(呼叫速率、信号来回的延迟,以及消息统计)
3|0sipp安装
3|1mac
一键安装
如果没有 brew 则 根据官网 https://brew.sh/index_zh-cn 教程安装下
注意,安装完 brew 之后,需要设置一下 PATH
3|2win
在win上面安装sipp就是在吃屎
3|3Linux
忽略(还没尝试)
3|4安装检测
4|0sipp使用
4|1官方文档
最重要,官方中文文档
4|2初体验
启动内置的uas场景
启动uas后,会在本机开1个端口5061,然后下面会一些SIP信令的实时统计,INVITE文字在“右方向箭头”右侧,表示当前收到的INVITE请求数,180左侧的“左方向箭头”表示回应的振铃消息数。现在只有被叫,并没有主叫来电,所以Messages这一栏全是0
启动内置的uac场景
注:最后的“ip:端口”,即为上一步uas启动的ip地址和端口号,必须匹配。
此时,再回到uas的界面,Messages栏,就不再全是0了
这样,主叫方(uac)打电话,被叫方(uas)接电话,基本的呼叫流程就通了。
4|3理解配置文件
直接输入sipp,会看到有很多参数说明,其中-sn 表示加载默认的场景,除了uas/uac,还有regexp/branchc/branchs...等其它场景,有兴趣的同学可以每种场景都试一下。
另外,还有一个很有用的-sd参数,可以把默认的场景配置,直接导出来,参考下面的命令:
这样,就把默认的uac/uas这2个场景,导出成xml文件,方便后续研究。打开这2个文件看一下:
uac.xml
看着貌似一大堆,有点吓人,但并不难理解:
- 5-29行,第一段send,发送INVITE信令,即:准备打电话
- 接下来的31-39行,表示期待收到被叫方回过来的100/180/183响应,注意这3小段,都是optional=true,表示预期的响应是可选的,即:对方可以发100/180/183,也可以不发。通俗点讲,打一通电话过去,对方可能振铃或不振铃(比如:对方已经在通话中,或者话机有问题)
- 41行,期待对方回200过来,这里没有optional=true,表示不是可选的,如果收不到,就无法继续。
- 46-61行,表示上一步收到200后,主叫方发送ACK确认
- 64行,pause暂停,但是并没有指定暂停多久,看注释,可以在启动uac时,传入“-d 暂停时间”指定,这一行相当于电话接起来,模拟双方在通话,让电话先不要断。
- 66-81行,表示uac发出bye挂断信令,结束通话,注 retrans="500",表示如果发送失败,500ms后,会重发。
uas.xml
- 6-7行,等待主叫方发送INVITE信令。
- 9-22行收到主叫方的INVITE请求后,先send 180响应,表示振铃。
- 24-46行,发送200 响应,表示被叫方已经ready.
- 48-52行,期待对应发过来ACK确认(注:optional=true,表示可选),至此,通话已经建立。
- 54-55行,等待被叫方发送挂断信令BYE
- 57-70行,发送200,通知主叫方挂断完成。
- 74行,等4秒,防止上一步的200响应由于网络原因丢失,留4秒余量,让对方重发BYE信令。
自定义scenario配置
除了内置的几种场景,我们也可以自定义xml配置文件,比如:我们把内置的uas.xml/uac.xml简化一下,让主叫方发起呼叫后,被叫方直接挂断(即:模拟被挂方拒接)
uac2.xml
uas2.xml
使用时,可以用参数-sf加载xml文件
4|4使用数据文件
简单数据文件
测试时,通常需要模拟不同的主被叫号码,前面的测试中,From/To是写死的用户sipp,需要动态替换用户名
创建一个uac_data.csv的文件,内容参考上面。第1行的SEQUENTIAL表示顺序读取,#行表示注释,第3行开始,定义数据行,每行2列,在uac.xml配置文件中,可以用[field0]、[field1]来占位替换,即:
重新跑一下uac场景,这次要新加参数 -inf uac_data.csv,同时为了方便验证SIP报文内容,加上-trace_msg
跑起来后,应该在当前目录生成类似uac_xxx_messages.log的日志文件,打开看看占位符[field0]/[field1]是否被替换了。
动态数据文件
如果模拟的主/被号很多,一行行手动写有点麻烦,可以用下面的方式自动生成
其中PRINTF=N,表示生成多少行,而下面的%03d为占位符,真正运行时,会生成
4|5抓包
tcpdump -D会列出本机所有网卡,然后用ifconfig看下各网卡的ip
4|6注册带鉴权
- 第一行SEQUENTIAL表示顺序读取
- 第二行中每一项使用";"分割,分割的每一项被用于xml文件中的field字段,field字段从0开始编码
- 第二项中field1表示的注册域名,不能使用ip地址代替
5|0具体细节
recv
暂停
send
正则
变量操作
变量测试
变量测试功能可以用来灵活控制脚本的运行。变量测试的动作命令为“test”,含有四个 参数:variable
,value
,assign_to
,compare
。variable
是 value
和 assig_to
比较后的结果,variable
是一个布尔值。test 的比较支持 6 种操作,分别为: equal, not_equal
, greater_than
, less_than
,greater_than_equal
, 或 less_than_equal
。
__EOF__

本文链接:https://www.cnblogs.com/dongye95/p/16894798.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
· SQL Server 2025 AI相关能力初探
· 为什么 退出登录 或 修改密码 无法使 token 失效