转载地址: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。

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

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

.RTCP:实时传输控制协议(Real-time Transport Control Protocol或RTP Control Protocol或简写RTCP)是[[实时传输协议|实时传输协议(RTP)]]的一个姐妹协议。RTCP由RFC 3550定义(取代作废的RFC 1889)。RTCP为RTP媒体流提供信道外(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会话发起

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

图(4) 会话发起过程

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

图(5)INVITE数据包包含域

l  Via:Alice用来接收响应包的终端地址。因为,在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 Ring和200 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,并分配四个分机100,101,102,103

 

 

 

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

    用户100和101注册成功,miniSipServer的MySql数据库中自动记录用户100和101的ip地址,便于在以后的通信中查找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为主叫服务器IP;111.186.57.3为被呼叫客户端IP。

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

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

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-lite和3CX Phone的Server-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. 附录

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

数据包

作用

备注

Request: Invite

邀请对方参与会话

数据包头中各域的解释:

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

branch: 记录此次会话

Max-Forwards:最大传输跳数

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

To: 呼叫的目的方

From:呼叫的发起方

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

它和To、From唯一标识一个会话

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

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

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

Status 407

代理端要求客户端认证

Request:ACK

针对上面407的回复

Status:100 Trying

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

Status:477

下一条出错

Request:SUBSCRIBE

查询当前的服务否可用

Status:200 OK

标识对请求的肯定回答

Request:NOTIFY

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

Request:REGISTER

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

Status: 401

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

Request:CANCEL

用于结束一次呼叫请求request

Status: 603

被叫端拒绝连接

Status: BYE

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

基于VOIP的SIP协议分析相关推荐

  1. 基于GBT28181:SIP协议组件开发-----------第四篇SIP注册流程eXosip2实现(一)

    原创文章,引用请保证原文完整性,尊重作者劳动,原文地址http://www.cnblogs.com/qq1269122125/p/3945294.html. 上章节讲解了利用自主开发的组件SIP组件l ...

  2. 基于GBT28181:SIP协议组件开发-----------第三篇SIP注册流程分析实现

    原创文章,引用请保证原文完整性,尊重作者劳动,原文地址http://www.cnblogs.com/qq1269122125/p/3941172.html,qq:1269122125. 上两章节简要的 ...

  3. 基于GBT28181:SIP协议组件开发-----------第五篇SIP注册流程eXosip2实现(二)

    原创文章,引用请保证原文完整性,尊重作者劳动,原文地址http://www.cnblogs.com/qq1269122125/p/3966794.html. 上章节讲解了讲解一个用eXosip2库实现 ...

  4. 基于HTTP的QQ协议分析

    1.研究说明 Tencent在tqq.tencent.com的8000有一个使用HTTP的QQ接口,通过这个接口,可以进行一些基本的操作,如:登陆.登出.改变登陆状态(上线.忙碌.离线.隐身).添加删 ...

  5. 基于freeSWITCH的sip协议利用WebRTC 实现实时视频聊天

    1.FreeSWITCH windows版安装 FreeSWITCH 是一个电话的软交换解决方案,包括一个软电话和软交换机用以提供语音和聊天的产品驱动.此经验主要介绍FreeSWITCH window ...

  6. 用yate2实现软VoIP语音通话(SIP协议)

    转载 用yate2实现软VoIP语音通话(SIP协议) 阳光男孩 发表于 2009-01-08 2009年1月7日,工业与信息化部发放了三张3G牌照,标志着中国进入了通信技术的新时代.3G的重要特性之 ...

  7. 国标28181:从打电话的过程,理解SIP协议

    传统电话是电磁波的通信,当电话技术发展到IP技术事件,SIP协议已经成为了电话通信标准协议,不仅可以通电话.还可以收发信息.视频.开会.放PPT.事实上,今天的通信业已全面采用SIP协议作为通信标准, ...

  8. 智能会议系统(35)---深入浅出sip协议

    深入浅出sip协议 传统电话是电磁波的通信,当电话技术发展到IP技术时代,SIP协议成为了电话通信标准协议,不仅可以通电话.还可以收发信息.视频.开会.放PPT.事实上,今天的通信业已全面采用SIP协 ...

  9. VoIP通话-基于SIP协议的Asterisk(一)-实现流程

    文章首发及后续更新:https://mwhls.top/4122.html,无图/无目录/格式错误/更多相关请至首发页查看. 新的更新内容请到mwhls.top查看. 欢迎提出任何疑问及批评,非常感谢 ...

最新文章

  1. 容器退出时我丢失了数据
  2. linux软中断优先级,Linux中软中断机制分析
  3. jsp 调用java_jsp中调用java代码小结
  4. android 闹钟服务,如果闹钟时间已经过去,android可以防止即时触发闹钟服务
  5. Java中List排序的3种方法!
  6. 【数据库】Mysql日期/时间相关函数汇总
  7. 【Python】 Python 基础
  8. uva-993-贪心
  9. python深拷贝和浅拷贝的区别_python 深拷贝与浅拷贝的区别
  10. linux给文件备份,Linux文件备份
  11. 数据结构队列算法——模拟病人在医院等待就诊过程
  12. JAVA使用POI导出设置列格式为文本格式
  13. 十八.国民技术MCU开发之UART模块LIN模式主从通信交互案例
  14. 基于SABR模型的期权波动率曲线套利策略
  15. 华科计算机组成原理 存储系统实验 汉字字库Logsim实验
  16. 八位二进制数能表示数的范围以及原码、反码和补码含义
  17. 如何用计算机弹出ink sans,Win10系统按“W”键弹出INK工作区的解决方法-电脑自学网...
  18. 解决 ffmpeg yasm not found, use --disable-yasm for a crippled build
  19. Golang从入门到精通(一):Golang介绍
  20. cad缩小了怎么还原_CAD无法进一步缩小怎么办?CAD不能进一步缩小的解决方法

热门文章

  1. __FILE__显示全路径的问题
  2. 创建视图簇SE54并SE93赋予事务代码
  3. MW6208U盘量产问题
  4. 基于Python的直播平台数据分析可视化系统
  5. 【PM必知】项目管理的“六大核心”内容详解
  6. 以后再也去不论坛灌水了
  7. netbean 偶尔无法设置断点问题
  8. 关于SurfaceView
  9. 2021年全球与中国汽车ABS和ESC行业市场规模及发展前景分析
  10. c#操作word图表(一)