sipp脚本撰写(二)

本文详细介绍了SIPp测试工具的脚本撰写,包括创建UAC和UAS,脚本中的动作如recv和send,以及如何处理CSeq、RAck、CANCEL和ACK的特殊性。还讲解了如何从外部CSV文件引入变量,用于模拟不同呼叫场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.1脚本撰写

进行脚本撰写之前需要熟悉一些默认的参数关键字:

关键词 默认值 说明
【service】 service 由参数-s传递,一般用来指定单个主被叫
[remote_ip] 远端设备地址
[remote_port] 远端设备端口。可以在脚本中使用偏移量,如[remote_port+3]
[local_ip] 本地ip 可以由参数-i指定
[local_ip_type] ip版本 远端设备地址
[local_port] 系统随机分配 可由-p指定,可以在脚本中使用偏移量,如[local_port+3]
[len] sdp长度,用于”Content-Length”头域,由sipp自动生成或者手动指定,可以添加偏移量,如[len+3]
[call_number] 呼叫索引,从1开始,每增加一个呼叫递增1
[cseq] 初始值为1,可以使用参数 -base_cseq手动指定初始值。
[media_ip] 本地媒体流ip,可以由-mi参数指定
[media_ip_type] 本地媒体流ip版本
[media_port] 本地媒体流端口,可由-mp指定,可以设置偏移量[media_port+3]
[last_*] 此关键词用于从接收的上一个sip消息中提取指定头域(如果存在)的值。比如[last_to]则表示从接收的上一个sip消息中提取To域的消息保存到[last_to]中并应用。
[branch] 生成一个由(z9hG4bK) + call number + message索引组成的branch id到脚本中。
[field0-n file=<filename> line=<number>] 从外部文件csv加载值,file表示选择从命令行中指定的csv文件的一个文件作为外部文件,line定义选择的外部文件的起始行,field选择字段。

脚本参数化:
1、需要sipp命令赋值的参数-p、-i、-s:[local_ip]、[local_port]、[remote_ip]、[remote_port]、[service]
2、sipp自动检测生成的参数:[call_number]、[call_id]、[cseq]、[len]、[branch]

创建uac

<send retrans="500">
<![CDATA[
INVITE sip:[service]@[remote_ip]:[remote_port] SIP/2.0
Via: SIP/2.0/[transport] [local_ip]:[local_port]
From: sipp <sip:sipp@[local_ip]:[local_port]>;tag=[call_number]
To: sut <sip:[service]@[remote_ip]:[remote_port]>
Call-ID: [call_id]
Cseq: 1 INVITE
Contact: sip:sipp@[local_ip]:[local_port]
Max-Forwards: 70
Content-Type: application/sdp
Content-Length: [len]

v=0
o=user1 53655765 2353687637 IN IP[local_ip_type] [local_ip]
s=-
t=0 0
c=IN IP[media_ip_type] [media_ip]
m=audio [media_port] RTP/AVP 0
a=rtpmap:0 PCMU/8000
]]>
</send>

在send命令内部,必须将待发送的sip消息括入"<![CDATA" 和 "]]>"中间,在这中间的所有内容将会被发送到远端系统。同时,在这个示例中包含一些特殊的关键词,比如:[service],[remote_ip],这些关键词可以通过sipp命令参数来进行赋值,具体可见上表。另外:加入retrans参数,可在没收到响应的情况下,在设定的时间之后重传,此例中为500毫秒。
注意:在测试业务时,通过在头域中添加<Route:被叫侧地址>以保证呼叫会从业务路由到被叫,否则路由会通过Request URI确定下一跳地址。
SIPp脚本中可以使用”recv”命令等待接收消息。如下:

<recv response="100" optional="true">
</recv>

<recv response="180" optional="true">
</recv>

<recv response="200">
</recv>

其中,100和180消息是可选接收的(optional),但200是强制接收的,在一序列”recv”命令中,必须至少有一个消息是强制接收的。

发送请求的时候不需要也不可能重新填写所有字段(比如说From字段不需要,因为一个dialog里的From字段都是相同的;而To字段是没办法自己填写,必需从上一个响应中引入,因为To-tag是远端加上的,本地并不知道),所以可以用[last_字段名]的方式从上一个消息中取得。通常From,To,Call-ID字段从上一个消息中取得,例如:

 <send 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值