zoukankan      html  css  js  c++  java
  • SIP学习之旅【环境搭建篇】

    经过两天的资料收集对SIP有了初步的了解,在网络电话VOIP应用方案中很多都是采用Linux服务器部署电信级SIP Server软件或者使用专门的硬件服务器来提供SIP Server服务,客户端用SIP电话机或软电话,结构组成包括:SIP终端,代理服务器,重定向服务器,注册服务器器,鉴权服务器,SIP Server服务器等,很庞大、很复杂、很无奈(没有多余的电脑给我装Linux,更没有SIP硬件),所以我需要的是Windows下运行的SipServer和SoftPhone,以及一个抓包工具就可以了。

    SipServer:MiniSipServer ,下载地址  http://www.myvoipapp.com/download/index.html

    SoftPhone: X-Lite ,下载地址 http://www.counterpath.com/x-lite-4-for-windows-download.html

    抓包工具:MiniSniffer(这工具有个缺陷就是没有报文时间,不过用习惯了就是它了),点击下载

    SIP协议文档:SIP流程图带动画解释.pdf,点击下载

    组网结构图:

     

     

    部署:

    1. 安装并启动MiniSipServer,一路Next就行,通过开始菜单启动,默认监听 UDP 5060 端口;系统自带三个默认用户,密码和用户名一样,在下一步要用到。

     
     
     

        

    2. 安装并配置X-Lite

    X-Lite需要.NetFramework4.0和VC2010 SP1,安装时联网下载。

    完整的配置方法参考 Setup IP PBX for small business step by step,介绍比较全面

    配置“本机”上的X-Lite(userID:100 password:100 );“测试机”上的X-Lite(userID:101 password:101)

                   

     

    3.通过X-Lite让测试机和本机通话

       在本机和测试机上都运行X-Lite软件后,在MiniServerIP中点击“分机”查看用户在线状态,登陆的用户图标是绿色;在命令行下可以查看连接。如下图:

        

    4. 抓包并分析SIP协议

      a.关掉MiniSipServer和两个X-Lite,运行MiniSniffer抓包工具,并开始抓包。

         

    b.运行 MiniSipServer和测试机上的X-Lite,因为MiniSniffer好像抓不到本机端口之间的数据包也为了便于分析数据就运行测试机上的 X-Lite客户端。记住在运行之前打开MiniServerSip的报文跟踪功能。

    c.对比抓包和跟踪信息,经过对比分析抓包和MiniSipServer自身的报文跟踪信息是一致的,所以为了以后调试和学习Sip协议完全可以使用 MiniSniffer做为辅助工具。

    为了便于分析,保存Sniffer中的报文。 

    d.分析报文,根据 RFC3261 中文版 第22.3章的描述,注册流程分为4步:

    1)上行Register   

    REGISTER sip:192.168.1.132 SIP/2.0
    REGISTER sip:192.168.1.132 SIP/2.0
    Via: SIP/2.0/UDP 192.168.1.114:16938;branch=z9hG4bK-d8754z-c32c649d175a5310-1---d8754z-;rport
    Max-Forwards: 70
    Contact: <sip:101@192.168.1.114:16938;rinstance=82948d058fa12715>
    To: "101"<sip:101@192.168.1.132>
    From: "101"<sip:101@192.168.1.132>;tag=aafd535b
    Call-ID: MDhjYTg0NzVmODk0ZGNhYzI0YTMyYjE0ZTE1ZTZkODk.
    CSeq: 1 REGISTER
    Expires: 3600
    Allow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER, NOTIFY, MESSAGE, SUBSCRIBE, INFO
    User-Agent: X-Lite 4 release 4.1 stamp 63214
    Content-Length: 0

    2)下行认证要求407报文

    SIP/2.0 407 Proxy Authentication Required
    SIP/2.0 407 Proxy Authentication Required
    Via: SIP/2.0/UDP 192.168.1.114:16938;received=192.168.1.114;rport=16938;branch=z9hG4bK-d8754z-c32c649d175a5310-1---d8754z-
    From: "101"<sip:101@192.168.1.132>;tag=aafd535b
    To: "101"<sip:101@192.168.1.132>;tag=2a4824
    CSeq: 1 REGISTER
    Call-ID: MDhjYTg0NzVmODk0ZGNhYzI0YTMyYjE0ZTE1ZTZkODk.
    Allow: INVITE, OPTIONS, ACK, CANCEL, BYE, REFER, SUBSCRIBE, NOTIFY, MESSAGE
    User-Agent: miniSipServer V6.1.5 (20 clients) build Dec  1 2011
    Proxy-Authenticate: Digest realm="myvoipapp.com",algorithm=MD5,nonce="18bf67854ae23d6d2cd772af69535f91",stale=FALSE
    Content-Length: 0

    3)上行包含认证信息的Register

    REGISTER sip:192.168.1.132 SIP/2.0
    REGISTER sip:192.168.1.132 SIP/2.0
    Via: SIP/2.0/UDP 192.168.1.114:16938;branch=z9hG4bK-d8754z-5509a16f1ceae597-1---d8754z-;rport
    Max-Forwards: 70
    Contact: <sip:101@192.168.1.114:16938;rinstance=82948d058fa12715>
    To: "101"<sip:101@192.168.1.132>
    From: "101"<sip:101@192.168.1.132>;tag=aafd535b
    Call-ID: MDhjYTg0NzVmODk0ZGNhYzI0YTMyYjE0ZTE1ZTZkODk.
    CSeq: 2 REGISTER
    Expires: 3600
    Allow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER, NOTIFY, MESSAGE, SUBSCRIBE, INFO
    Proxy-Authorization: Digest username="101",realm="myvoipapp.com",nonce="18bf67854ae23d6d2cd772af69535f91",uri="sip:192.168.1.132",response="581842f465276cd5fa908061d7bf2f69",algorithm=MD5
    User-Agent: X-Lite 4 release 4.1 stamp 63214
    Content-Length: 0

    4)下行注册成功信息

    SIP/2.0 200 OK
    SIP/2.0 200 OK
    Via: SIP/2.0/UDP 192.168.1.114:16938;received=192.168.1.114;rport=16938;branch=z9hG4bK-d8754z-5509a16f1ceae597-1---d8754z-
    From: "101"<sip:101@192.168.1.132>;tag=aafd535b
    To: "101"<sip:101@192.168.1.132>;tag=4d074db8
    CSeq: 2 REGISTER
    Call-ID: MDhjYTg0NzVmODk0ZGNhYzI0YTMyYjE0ZTE1ZTZkODk.
    Allow: INVITE, OPTIONS, ACK, CANCEL, BYE, REFER, SUBSCRIBE, NOTIFY, MESSAGE
    User-Agent: miniSipServer V6.1.5 (20 clients) build Dec  1 2011
    Contact: <sip:101@192.168.1.114:16938>
    Expires: 120
    Content-Length: 0

     

    在第三步上传的报文中包含密码信息,但认证算法太麻烦,没能手工解析或构造出来,关于认证算法参考文章:http://blog.sina.com.cn/s/blog_4b839a1b01000bqq.html

     

    至此,对SIP协议及其流程有了个清晰的认识,为以后能够更好的理解协议栈找到了一个可行的方法。

    这篇学习记录前段时间写了一半,今天补齐为2011年画个句号,来年再找个合适的开源库写一个软电话的例子,到时对SIP协议栈的学习就可以告一段落了。争取在春节前完成。。。。。

    明天就是2012了,今天拿到了驾照。祝愿各位圆友 元旦快乐。

     

     

     

     

     

     

     

     

     

     

     

     

  • 相关阅读:
    Java类的三大特征
    java语句
    Python数据类型深入学习之数字
    Python基础学习篇章四
    Python基础学习篇章三
    Python基础学习篇章二
    python基础学习篇章一
    项目中调用天气预报接口
    CI框架传递数组到view层问题记录
    记录使用CI框架开发项目时遇到的问题
  • 原文地址:https://www.cnblogs.com/zhaobl/p/2282534.html
Copyright © 2011-2022 走看看