基于VOIP的SIP协议分析

时间:2022-09-17 10:18:10

转载地址:http://blog.renren.com/blog/250046791/466595416

1.实验目的

1.1 学习VOIP软件X-Lite的使用;

1.2 学习SIP协议的工作流程;

1.3 了解VOXALOT的工作机制;

1.4 练习使用wireshark抓包软件;

1.5 利用wireshark抓包软件分析SIP协议的通信过程

2.实验环境

2.1硬件环境

PC win7

CPU Intel Core2  

内存:2G

主频:2.0GHz

2.2软件环境

wireshark: v 1.2.6

VOIP软件 :X-Lite Version 3.0 build 56125

3.实验预备知识

3.1概念简述:

.SIP:会话发起协议(Session Initiation Protocol)是一个应用层的信令控制协议。用于创建、修改和释放一个或多个参与者的会话。这些会话可以好似Internet多媒体会议、IP电话或多媒体分发。会话的参与者可以通过组播(multicast)、网状单播(unicast)或两者的混合体进行通信。

SDP:会话描述协议(Session Description Protocol或简写SDP)描述的是流媒体的初始化参数。此协议由IETF发表为 RFC 2327

 

RFCRequest For Comments (RFC),是一系列以编号排定的文件。文件收集了有关因特网相关资讯,以及UNIX和因特网社群的软件文件。目前RFC文件是由Internet SocietyISOC)所赞助发行。基本的因特网通讯协定都有在RFC文件内详细说明。RFC文件还额外加入许多的论题在标准内,例如对于因特网新开发的协定及发展中所有的记录。因此几乎所有的因特网标准都有收录在RFC文件之中。RFC(Request For Comments)-意即“请求评议”,包含了关于Internet的几乎所有重要的文字资料。

 

.RTP:实时传送协议(Real-time Transport Protocol或简写RTP)。RTP协议详细说明了在互联网上传递音频和视频的标准数据包格式。它一开始被设计为一个多播协议,但后来被用在很多单播应用中。RTP协议常用于流媒体系统(配合RTSP协议),视频会议和一键通(Push to Talk)系统(配合H.323SIP),使它成为IP电话产业的技术基础。RTP协议和RTP控制协议RTCP一起使用,而且它是建立在用户数据报协议上的。

 

.RTCP:实时传输控制协议(Real-time Transport Control ProtocolRTP Control Protocol或简写RTCP)是[[实时传输协议|实时传输协议(RTP]]的一个姐妹协议。RTCPRFC 3550定义(取代作废的RFC 1889)。RTCPRTP媒体流提供信道外(out-of-band)控制。RTCP本身并不传输数据,但和RTP一起协作将多媒体数据打包和发送。RTCP定期在流多媒体会话参加者之间传输控制数据。RTCP的主要功能是为RTP所提供的服务质量(Quality of Service)提供反馈。

3.2 SIP协议简介

ASIP通信概述:

正常的SIP通话过程包含三个过程:会话连接、通话过程和会话结束过程。通话流程图如下图(3)所示:

B.SIP客户端注册过程

刚启动X-Lite的时候,X-Lite会将本地号码注册到相应的域名服务器上。注册过程如下图所示:

 

发送注册request

验证成功

Y

N

C.SIP会话发起

我们假设AliceBob发起会话请求,则过程如下图所示:

(4)会话发起过程

a) Alice首先发起一个INVITE数据包到其代理服务器,如上图中INVITE F1;每个INVITE数据包包头含有如下数据域:

(5)INVITE数据包包含域

l ViaAlice用来接收响应包的终端地址。因为,在SIP协议中,是允许主叫方重定位此次通话的。也即是,可以允许主叫方用A手机拨打C的号码,但是却通知C将信息传到B手机。该域中还包括一个branch,用来标识此次交互。

l Max-Forwards:该域表示包被允许传送的最大通信距离

l To:被叫方的ID

l From:主叫方ID

l Call-ID:基于”To””From”的会话ID。和前两者共同标识一个唯一的会话

l CSeq:标识在一次会话中request发送的个数

l Contact:标识数据包发起者

l Content-Type:标识数据包内容的类型

l Content-Length:标识数据包内容的长度

b) Alice的代理端收到Alice的请求之后,会要求Alice对自己的身份进行认证。

这个认证过程如下图所示:

 

 

 

 

 

 

 

代理端向Alice发送认证请求包407

Alice出示证件

Y

N

 

 

 

 

 

 

 

 

 

 

 

 

 


c) Alice的代理端将INVITE路由到Bob的代理端,并返回一个100 Trying数据包

代理端通过INVITE数据包中的To域,获取到INVITE的下一个目的地址,即Bob的代理端。然后将该数据包转发出去。而后,再向自己的上一跳返回一个100 Trying数据包,通知Alice,连接正在建立中。

 

d) Bob的代理端将INVITE转发给Bob,并返回100 Trying数据包

Bob的代理端在收到INVITE后,通过本地数据库查找到Bob,然后将该INVITE数据包发给Bob。同时返回一个100 Trying数据包给上一跳。

 

e) Bob接受Alice的呼叫,并返回180 Ring200 OK数据包到Alice

Bob收到从自己的代理端来的INVITE并开始响铃。同时,将响铃信号发送给代理端,代理端。之后,该Ringing包将沿着INVITE的逆向路径到达Alice。如果,Bob在接到响铃后,接听电话,那么Bob的客户端将发送一个200 OK包,该包到达Alice的路径和上面的Ringing数据包的路径一样。此时连接其实已经建立起来。

 

f) Alice返回ACK确认,从而建立起连接

Alice收到相应的200 OK包之后,将向Bob返回一个ACK包进行确认。到此,该连接正式建立起来。

 

D.SIP通话过程

在建立起会话之后,通信双方通过各自的代理服务器进行通信。通信的内容则采用一种称作RTP的协议来传输。通信的内容:可以包括语音、视频和电子邮件。

E.SIP会话结束

会话结束动作可以由通信双方中的任何一端发起。会话结束动作由数据包BYE标识。一旦某个用户收到BYE包,那么就会返回一个ACK数据包,从而彻底中断连接

 

4.实验内容

实验内容

实验结果

搭建实验平台,获得sip账号

成功

通过美国的远程服务器实现点到点通话

成功

局域网内注册成为sip Server并分配分机

成功

登录局域网内的sip server成功注册本分机

成功

局域网内作为分机与另一分机通话

成功

 

5.实验步骤

5.1搭建实验平台,获得sip账号:

A.安装wireshark软件

a)去官网下载wiresharp软件

http://www.wireshark.org/download.html

b)运行安装程序,即可完成安装

B.安装X-Lite通话软件

a) 去官方网站下载X-Lite

http://www.counterpath.com/x-lite.html

b) 运行下载好的安装程序,即可完成安装。

C.注册VOXALOT账号

为了使得我们能够顺利利用X-Lite进行免费通话,我们需要到VOXALOT去注册账号。该账号的作用类似于我们的手机号码。

注册VOXALOT的网站:http://www.voxalot.com/

本次实验中,我注册的账号为:198772服务器为:us.voxalot.com

       Display Name: 本地显示用户名

       User Name: 申请的账号名

       Password: 账号对应的口令

       Authorization user name: 采用默认(空白)

       Domain: 服务器端域名

       proxy: 代理端域名

       Dialing plan: 采用默认设置

 

5.2通过美国的远程服务器实现点到点通话

u 运行wireshark,启动wireshark,设置正确的抓包规则,开始抓包.

u 拨打对方电话,进行通话

获取对方的号码之后,按照正常拨打电话的流程即可完成电话的拨打。

   

u 结束通话,分析数据包

在结束通话之后,停止wireshark抓包动作。在Filter域中输入”sip”

 

 


5.3局域网内注册成为sip Server并分配分机

启动minisipserver,自动将服务器ip配置为当前主机ip,并分配四个分机100101102103

 

 

 

 

5.4分机登录局域网内的sip server(我的主机)并注册

   用户100101注册成功,miniSipServerMySql数据库中自动记录用户100101ip地址,便于在以后的通信中查找102用户的地址。

 

用户注册过程中抓包如下:

5.5局域网内作为分机与另一注册过的分机通话

在结束通话之后,停止wireshark抓包动作。在Filter域中输入”sip”

6.试验数据分析

6.1客户端向服务器端注册

 

从上图中可以看出,客户端在启动的时候,会主动向服务器端注册。注册过程如下:

  a) 客户端向服务器端发送Request REGISTER数据包,请求注册,该包的SIP头如下:

  

  b) 服务器端需要客户端出示证明,因此针对上面的注册包,返回一个401包;

  c) 客户端再次向服务器端发起Request REGISTER数据包,请求认证,其SIP头如下:

 

   从上面两幅图中可以看出,第二次申请认证的数据包中,明显多了一个Authorization域。

 

 d)  针对上面的申请,服务器端返回一个Status 200 OK包,表示通过认证。

 e)  注册成功后,客户端向服务器端查询当前的连接状况,因此发送Request SUBSCRIBE

    

f) 同样服务器端要求客户端再次出示“证件”,于是发送了Status: 407 Proxy Authentication Required

g) 客户端再次发起查询数据包,并在其中添加相应的认证,如下图所示:

 

 

 

6.2 客户端之间建立连接

 

从上面的数据可以看出通信流程:

   a) 客户端向服务器端发送Request INVITE数据包,请求和198771建立连接

b)服务器端转发相应的INVITE数据包(上图中没反映出来),并且向客户端返回一个100 Trying数据包

c)当被呼叫端发出Ring信后号,代理端再返回相应的Ring数据包

d)当被呼叫端接受呼叫后,发出Status 200 OK数据包,并被代理端转发到客户端

6.3 客户端之间通信

当经过上述步骤,建立连接之后,就开始双方的通信过程。通信过程中使用RTP协议进行通信数据的传送。

   上图中所示即为双方通信过程。其中111.186.57.199为主叫服务器IP111.186.57.3为被呼叫客户端IP

   通过和上面连接建立时的图片相比较,可以发现,当经过代理端建立连接之后的通话数据包将不再通过代理端传输,而是直接在通话双方之间传输。这个是非常合理的,因为双方经过连接建立过程已经相互得知对方的IP地址,因此就没有必要再通过服务器端来传送数据包。这样使得通话的实时性更加可靠。

由于使用miniserversip协议过程与上述过程大致相似,本论文中不进行详细分析。

6.4通话音频还原


WireShark自身就集成有语音播放器,可以播放通话中的语音信息。(之前的VoIP界面点击Player进入,解码后如下图所示)

12.WireShark Player

此外,通过WireShark强大的功能与相关格式转换工具Cool Edit,我们能够成功地将储存在RTP报文中的语音信息还原。

具体为选取通话中的RTP报文,进入Telephony->RTP->Stream Analysis


13.Stream Analysis工具

然后将之通过Save payload转化为.raw格式的音频文件,最终通过Cool Edit软件进行格式转换,转换成wav格式。

 

7.实验中的问题

7.1录音不能播放

在试验过程中,我发现通过wireshark自带的Telephony功能,只能够将抓获的通话数据包还原,但是不能播放还原之后的数据包中的声音,只有当X-lite开启record功能时,才能正确截取数据包中的声音。然而当我做完实验,与别人交流时,却发现有些同学在做实验时,X-lite没有开启record功能也能正确截取数据包中的声音,该问题是我大为困惑。后来仔细比对之后,才明白是软件问题。虽然X-lite3CX PhoneServer-Client软件都能成功地进行VOIP电话,然而WireShark进行报文截取及报文分析过程中,虽然能够识别SIP协议的相关报文,并能作出流程图,但却无法识别具体通话中所使用的RTP。在WireShark中显示“Unknown RTP version”,可能是X-Lite使用的RTP版本与WireShark不兼容。导致WireShark无法根据RTP报文还原出语音。

 

8.实验总结

通过此次实验,我学到了如下东西:

a) Wireshark软件的使用

b) X-Lite电话的使用

C)SIP协议有了一个比较深入的认识

d)VOIP的通话过程和工作原理也有了比较侧地的认识。

由于是大二学生,以前并没有接触过wireshark软件,导致本实验开始时困难重重。但是在学长们的帮助下,还是顺利完成了实验,并且收获不小。

注:由于本次实验进行了多次,而且每次地点不同,导致IP地址也各不相同。而且由于对wirreshark软件的深入了解,声音提取实验是在之后的实验中进行的。所以原始报文比较多,不好意思……

9.附录

附录1SIP常见数据包类型和作用

数据包

作用

备注

Request: Invite

邀请对方参与会话

数据包头中各域的解释:

via: 记录SIP的版本/使用传输协议,以及会话发起者。

branch:记录此次会话

Max-Forwards:最大传输跳数

Contact:本机的IP地址以及正在使用的传输协议

To: 呼叫的目的方

From:呼叫的发起方

Call-ID:标识此次通话的ID

它和ToFrom唯一标识一个会话

CSeq:每次发起request,该域就增加1;同时后面标识使用的method,该包的作用

Content-Type:描述数据包的内容

Content-Length:内容message body长度。以8进制计数,单位为byte

 

 

Status 407

代理端要求客户端认证

RequestACK

针对上面407的回复

Status100 Trying

通知上一跳节点正在为之转发数据包

Status477

下一条出错

RequestSUBSCRIBE

查询当前的服务否可用

Status200 OK

标识对请求的肯定回答

RequestNOTIFY

subscribe查询过程中,如果会话状态发生改变,则发出的通知包,收到这个数据包的节点会返回一个Status 200

RequestREGISTER

客户端向代理端发起注册请求

Status 401

代理端不接受发客户端注册请求包中的证书信息。之后,客户端可以通过回复Status 200,来“强制”代理端查看相应的信息

RequestCANCEL

用于结束一次呼叫请求request

Status 603

被叫端拒绝连接

Status BYE

作用同CANCEL,但是不需要OK进行确认