SIP 是VOIP目前非常流行的一种协议。有关协议的详细原理参照相关文档。
本文通过wireshark抓包分析SIP user agent(用户代理客户机,uac)与SIPserve之间的交互过程,在拨打SIP电话之前,先需要搭建相应的环境:
根据SIP协议原理,SIP终端,也就是本文中的数字家庭产品,实现了UAC(User Agent Client)和UAS(UserAgent Server)的功能。SIPserver(本文选用Asterisk)实现了代理服务器、重定向服务器、注册服务器的功能。
1 .搭建SIP服务器(实现注册、重定向服务器等功能)
本文选用Asterisk作为SIP server。
配置/etc/asterisk/sip.conf,主要参数如下:
[general]
port=5060 ; Port to bind to
context=from-sip ; Default context for incoming calls
sendrpid=yes
trustrpid=yes
canreinvite=no
nat=no
dtmfmode=auto
disallow=all
allow=g722
allow=ulaw
allow=alaw
allow=g723.1
;allow=g729
subscribecontext=from-sip
notifyringing=yes
#配置一个sip帐号,username为:2223,也可以是字母,如:yuna
[2223]
type=friend
host=dynamic
mailbox=2223
username=2223
secret=2223
callgroup=1
pickupgroup=1
call-limit=2
还有配置/etc/adterisk/extension.conf,配置dial plan。
2. 配置UAC
UAC是公司生产的数字终端产品,产品初期,在拨打SIP电话时需要进行简单的配置,如:username,即拨号的SIP号码(可以是数字、字母组合);password(即在server中配置的sercret参数值);Proxy(SIP服务器的IP地址,如本文:192.168.10.52)
SIP电话需要网络支持,本身是基于IP的产品,所有有一个IP地址,本文UAC的IP为:192.168.10.227
3. 打开wireshark等待抓包
设置过滤条件,只catch从UAC(ip addr==192.168.10.53)发出或接收的数据包。
1)首先UAC向SIPserver(192.168.10.52)发出REGISTER信息
SIP电话的格式是:
sip:2223@192.168.10.227 或 sip:2223@yuna(配置了DNS服务器)
2) 若sipserver 无响应 ,发送100 TRYING消息
3)sip server响应,发送200 OK信息
4) UAC向sipserver注册成功,server发送NOTIFY通知信息
1 .搭建SIP服务器(实现注册、重定向服务器等功能)
[general]
port=5060
context=from-sip
sendrpid=yes
trustrpid=yes
canreinvite=no
nat=no
dtmfmode=auto
disallow=all
allow=g722
allow=ulaw
allow=alaw
allow=g723.1
;allow=g729
subscribecontext=from-sip
notifyringing=yes
#配置一个sip帐号,username为:2223,也可以是字母,如:yuna
[2223]
type=friend
host=dynamic
mailbox=2223
username=2223
secret=2223
callgroup=1
pickupgroup=1
call-limit=2
2. 配置UAC
3. 打开wireshark等待抓包
SIP电话的格式是:
-
sip:username@UAC_IP -
sip:username@UAC_IP_DNS (如果网络中有DNS服务器,并配置了UAC_IP对应的域名UAC_IP_DNS)
sip:2223@192.168.10.227