zoukankan      html  css  js  c++  java
  • 使用网络分析软件学习HTTP协议!

    给大家转一篇http协议的文章,对我等网络分析点新手还是很有帮助的。
    原帖地址http://www.csna.cn/viewthread.php?tid=371

    一、目的
    学习网络分析也有段时间了,到现在也算是逐渐入门了吧,想想自己以前刚接触时,不知道从何入手。学习网络分析,肯定要从协议入手,如果只看相关资料,这样 印象不深刻,而且也没什么实战的经验,速度和效率都慢了很多。后来有高人指点了我,用网络分析软件来学习协议比较好,从此我开始了另外一种方法的学习。呵 呵,自己作为一个初学者,想把自己学习的方法写出来,和大家交流交流,个人认为方法是最重要的。
    TCP/IP协议族里的协议太多了,这个还的靠时间的积累:)说了这么多废话,嘿嘿!
    其实应用层协议是我们经常用到的协议,比如HTTP,FTP等等,下面我们就来谈谈HTTP协议(不看网页不可能吧-.-#),学习其他协议时可以用类似的方法,灵活变通 。^o^

    二、试验环境
    我们这里试验的网络环境很简单,简单描述一下:
    1.   网络环境:本人电脑通过代理服务器ADSL拨号上网,本机IP=192.168.0.92;
    2.   操作系统:本人电脑使用Windows XP+SP2;
    3.   工具(关键哟):我接触过Sniffer,OmniPeek,ethereal,科来网络分析系统,个人相对这几种软件用的稍微熟悉的还是OmniPeek,这里我就以OmniPeek为学习工具。

    三、具体操作
    我试验过程也很简单,访问网页大家都很清楚吧?我这里只是用更加深入的方式来了解访问网页的种种过程及原理,具体操作如下:
    1. 打开OminPeek的设置,在Filers里面设置Address filer:192.168.0.92和protocl filter选择HTTP协议,如图1,


    (图1   过滤器设置)
    说明:通过设置图1的过滤器,我们就可以只捕获192.168.0.92使用HTTP协议的通讯了:)

    2.   开始捕获,使用主机192.168.0.92访问网页http://www.csna.cn,抓取数据包,如图2,


    (图2 抓取的数据包)
    说明:呵呵,准备就绪,开始捕获,我们访问http:\\www.csna.cn论坛,捕获到的数据包。

    四、原理知识
    使用网络分析软件进行对协议学习,并不是叫我们都抛开那些资料,那些理论原理,我这里所说的就是“结合”,了解协议的结构,工作原理,相关特征是很重要 的,这时我们在通过网络分析软件来操作,就会更加明确。我们还是先介绍一下HTTP协议的工作原理吧(不要怪我罗嗦哟)。

    1. TCP/IP分层结构
    TCP/IP的层次结构和工作原理,我们就不详细介绍了,这里就针对HTTP进行一下说明:简单的说HTTP协议是应用层协议,通过下层传输层的TCP进 行可靠连接,网络层IP选路,链路层Ethernet II,最后在物理上以位(Bit)进行传输。
    应用层 -------------HTTP
    传输层 -------------TCP
    网络层 -------------IP
    链路层 -------------Ethernet II

    2. HTTP协议工作方式
    由于HTTP协议是基于请求/响应模式的(相当于客户机/服务器)。一个客户机与服务器建立连接后,发送一个请求给服务器,请求方式的格式为:统一资源标 识符(URL)、协议版本号,后边是MIME信息包括请求修饰符、客户机信息和可能的内容。服务器接到请求后,给予相应的响应信息,其格式为一个状态行, 包括信息的协议版本号、一个成功或错误的代码,后边是MIME信息包括服务器信息、实体信息和可能的内容。
    这个过程就好像我们打电话订货一样,我们可以打电话给商家,告诉他我们需要什么规格的商品,然后商家再告诉我们什么商品有货,什么商品缺货。这些,我们是通过电话线用电话联系(HTTP是通过TCP/IP)。
    HTTP协议的内部操作过程:基于HTTP协议的客户/服务器模式的信息交换过程,它分四个过程:建立连接、发送请求信息、发送响应信息、关闭连接。这就好像上面的例子,我们电话订货的全过程。
    其实简单说就是任何服务器除了包括HTML文件以外,还有一个HTTP驻留程序,用于响应用户请求。你的浏览器是HTTP客户,向服务器发送请求,当浏览器中输入了 一个开始文件或点击了一个超级链接时,浏览器就向服务器发送了HTTP请求,此请求被送往由IP地址指定的URL。驻留程序接收到请求,在进行必要的操作 后回送所要求的文件。在这一过程中,在网络上发送和接收的数据已经被分成一个或多个数据包(packet),每个数据包包括:要传送的数据;控制信息,即 告诉网络怎样处理数据包。TCP/IP决定了每个数据包的格式。

    五、   数据包分析
    我们现在来分析刚刚抓取的数据包,看看HTTP协议怎样进行建立连接,发送请求信息,发送响应信息,关闭连接的过程。

    1. 建立连接
    第1.2.3个数据包是HTTP协议使用下层TCP协议通过三次握手原则建立连接的过程,如图3所示,


    (图3 建立连接)
    说明:图3中选中三个数据包描述的是TCP三次握手的过程。这样我们可以知道,HTTP通讯是发生在TCP协议之上,缺省端口是TCP的80端口,所以HTTP是一个可靠的协议。
    至于三次握手原理,看解码:

    上面三个图分别为前三个数据包中的TCP标记信息,反映了TCP的三次握手过程:客户端向Web服务器发送一个SYN同步连接请求,Web服务器收到请求 后向客户端发送一个SYN/ACK数据包,同意客户端的连接请并向客端发起同步,客户端收到该数据包后再次确认,从而成功建立TCP连接。

    2. 发送请求信息

    接下来我们再来观察第四个数据包,这个是主机192.168.0.92发起的HTTP请求包,如图4,
      


    (图4 发送请求信息)
    图4中,我们从数据包解码中看到HTTP协议发送请求信息的一些特征。打开一个连接后,客户机把请求消息送到服务器的停留端口上,完成提出请求动作。

    图4中的HTTP请求报文
            HTTP Command:    //方法字段,说明其使用的是GET方法
            URI: /                //URL字段,发送请求至保存该网站的服务器。
            HTTP Version:        //http协议版本字段,用是的http/1.1版本
            Accept:              //指示可被接受的请求回应的介质类型范围列表。
            Accept-Language: //限制了请求回应中首选的语言为简体中文,否则使用默认值。
            Accept-Encoding: //限制了回应中可接受的内容编码值,指示附加内容解码方式为gzip,deflate.
            User-Agent:    //定义用户代理,即发送请求的浏览器类型为Mozilla/4.0
            Host: www.csna.cn\r\n             //定义了目标所在的主机
            Connection: Keep-Alive\r\n             //告诉服务器使用持久连接

    3. 发送响应信息
    第6个数据包是服务器的响应包信息,从图4可以看出,

    (图5 响应报文)
    分析解码,我们可以知道这些内容:
    服务器在处理完客户的请求之后,要向客户机发送响应消息。

    图5中的HTTP回应报文
            HTTP Version: HTTP/1.1    //服务器用的是HTTP/1.1版本
            HTTP Status: 200    //请求成功,信息可以读取,包含在响应的报文中
            Date:    //指服务器从文件系统中检索到该对象,插入到响应报文,并发送该响应报文的时间
            Server: //表明刻报文是由一个Apache/2.0.52的服务器产生的
            X-Powered-By: //表明是使用PHP(版本)的动态网页
            Set- cookie:     //
            Vary:     //
            Content-Length: //表明实体的长度
            Connection:    //告诉客户机在报文发送完毕后仍然保持连接
            Content-Type: //表明实体中的对象是html文档
            Binary Data: //二进制数据
    说明:在服务器给的回应请求中,我们可以从状态码中看到访问的相关信息。

    状态码表示响应类型,常用的有:
    1××  保留
    2××  表示请求成功地接收
    3××  为完成请求客户需进一步细化请求
    4××  客户错误
    5××  服务器错误
    在我们抓到的数据包中,状态码是200,表明请求是成功接受请求。

    4. 关闭连接
    最后4个数据包(52.53.54.55)就是通讯的关闭过程,建立一个连接需要进行三次握手,而终止一个连接则需要经过4次握手。这是由于TCP连接是 全双工的,每个方向上都必须单独地进行关闭。4次握手实际上就是两个方向上单独关闭的过程。这里就不详细说明了,

    六、小结
    从上面的讲解,我想咱们对HTTP协议也了解了很多了吧,对照分析软件来学习是不是觉得有点不一样哇,我们在数据包解码中看到只是资料所说的有点出入。呵 呵,资料上说的是不是要复杂的多,这也说明,在具体实际情况下是不同的。在这里,我们只是说说学习的思路,TCP/IP协议是非常复杂的,一个好的学习方 法,使的咱们在学习其他协议的时候就能举一反三:)希望大家能谈谈自己的学习方法。大家互相交流

  • 相关阅读:
    BZOJ 2301 [HAOI2011]Problem b ——莫比乌斯反演
    VIJOS 1889 天真的因数分解 ——莫比乌斯函数
    BZOJ 2440 [中山市选2011]完全平方数 ——莫比乌斯函数
    BZOJ 3939 [Usaco2015 Feb]Cow Hopscotch ——线段树 CDQ分治
    UOJ 274 【清华集训2016】温暖会指引我们前行 ——Link-Cut Tree
    BZOJ 2246 [SDOI2011]迷宫探险 ——动态规划
    BZOJ 2037 [Sdoi2008]Sue的小球
    BZOJ 3227 [Sdoi2008]红黑树(tree) ——贪心 动态规划
    BZOJ 1974 [Sdoi2010]auction 代码拍卖会 ——动态规划
    sql注入
  • 原文地址:https://www.cnblogs.com/angestudy/p/2273744.html
Copyright © 2011-2022 走看看