github地址:https://github.com/nils-ohlmeier/sipsak
- 编译安装
tar -zxf sipsak-0.9.8.1.tar.gz
cd sipsak-0.9.8.1
./configure
make & make install
一、常用方法
#模拟发送option探测
sipsak -H 本地ip -l 本地端口 -s sip:对端IP地址:对端信令端口 -v
#模拟发送invite请求,-f从文件加载sip消息,用 ! 分割文件中的变量和值(请根据文字描述自行替换变量值)
sipsak -f invite.txt -g '!CALLEE!被叫号码!CALL_ID!'$(uuidgen)'!CALLER!主叫号码!F_SPT!本地信令端口!F_MPT!本地媒体端口!F_IP!本地IP地址!T_IP!对端IP地址!T_SPT!对端信令端口!' -H 本地IP地址 -l 本地信令端口 -s sip:对端IP地址:对端信令端口 -v
#文件invite.txt内容模版如下:
INVITE sip:$CALLEE$@$T_IP$:$T_SPT$ SIP/2.0
Call-ID: $CALL_ID$
From: "$CALLER$"<sip:$CALLER$@$F_IP$;transport=udp;user=phone>
To: "$CALLEE$"<sip:$CALLEE$@$T_IP$;transport=udp;user=phone>
CSeq: 1 INVITE
Contact: <sip:$F_IP$:$F_SPT$>
Max-Forwards: 10
Content-Length: 154
Content-Type: application/sdp
v=0
o=alice 123456 789 IN IP4 $F_IP$
s=SBC call
c=IN IP4 $F_IP$
t=0 0
m=audio $F_MPT$ RTP/AVP 8 0
a=rtpmap:8 PCMA/8000
a=rtpmap:0 PCMU/8000
其中,$CALLEE$为被叫号码、$CALLER$为主叫号码、$CALL_ID$为会话标识
$F_SPT$为本地信令端口、$F_MPT$ 为本地媒体端口、$F_IP$ 为本地ip、$T_IP$ 为对端ip、$T_SPT$对端信令端口
注意:Content-Length的值为body的字符长度,计算方法如下:
sdp="v=0
o=alice 123456 789 IN IP4 192.168.7.51
s=SBC call
c=IN IP4 192.168.7.51
t=0 0
m=audio 18628 RTP/AVP 8 0
a=rtpmap:8 PCMA/8000
a=rtpmap:0 PCMU/8000"
echo "$sdp" | awk '{ bytes += length($0) + 2 } END { print bytes }'
二、sipsak模拟压测脚本
#!/bin/bah
while true;do
#暂停3~10秒
sleep $(shuf -i 3-10 -n 1)
initPort=$(shuf -i 40000-60000 -n 1)
#发起10个invite请求
for ((i = 0; i < 10; i++)); do
sPt=$((initPort + i * 2))
mPt=$((sPt + 1))
sipsak -f invite.txt -g '!CALLEE!567831!CALL_ID!'$(uuidgen)'!CALLER!+8617621!F_SPT!'$sPt'!F_MPT!'$mPt'!F_IP!172.23.33.3!T_IP!172.23.33.8!T_SPT!18627!' -H 172.23.33.3 -l $sPt -s sip:172.23.33.8:18627 -v
done
done
