【愚公系列】2022年02月 wireshark系列-数据抓包分析之HTTP协议02

愚公搬代码 发表于 2022/02/28 22:11:26 2022/02/28
【摘要】 一、数据抓包分析之HTTP协议02分析HTTP数据包HTTP报文格式HTTP由请求和响应两部分组成,所以对应的也有两种报文格式。下面分别介绍HTTP请求报文格式和HTTP响应报文格式。HTTP请求报文格式以上表格中,第1行为“请求行”,第2、3、4行为“请求头部”,第5行为空行,第6行为“请求正文”。下面分别介绍这4部分:1.请求行:由3部分组成,分别为:请求方法、URL(见备注1)以及协...

一、数据抓包分析之HTTP协议02

分析HTTP数据包

  1. HTTP报文格式

    HTTP由请求和响应两部分组成,所以对应的也有两种报文格式。下面分别介绍HTTP请求报文格式和HTTP响应报文格式。

    HTTP请求报文格式在这里插入图片描述
    以上表格中,第1行为“请求行”,第2、3、4行为“请求头部”,第5行为空行,第6行为“请求正文”。下面分别介绍这4部分:

    1.请求行:由3部分组成,分别为:请求方法、URL(见备注1)以及协议版本,之间由空格分隔,请求方法包括GET、POST等。协议版本的格式为:HTTP/主版本号.次版本号,常用的有HTTP/1.0和HTTP/1.1。

    2.请求头部包含很多客户端环境以及请求正文的有用信息。请求头部由“关键字:值”对组成,每行一堆,关键字和值之间使用英文“:”分隔。

    3.空行,这一行非常重要,必不可少。表示请求头部结束,下面就是请求正文。

    4.请求正文:可选部分,比如GET请求就没有请求正文;POST比如以提交表单数据方式为请求正文。

HTTP响应报文格式
在这里插入图片描述
以上表格中,第1行为“状态行”,第2、3、4行为“响应头部”,第5行为空行,第6行为“响应正文”。下面分别介绍这4部分:

(1)状态行由由3部分组成,分别为:协议版本,状态码,状态码描述,之间由空格分隔。状态代码为3位数字,200~299的状态码表示成功,300~399的状态码指资源重定向,400~499的状态码指客户端请求出错,500~599的状态码指服务端出错(HTTP/1.1向协议中引入了信息性状态码,范围为100~199)。这里列举几个常见的:在这里插入图片描述

(2)响应头部与请求头部类似,也包含了很多有用的信息。

(3)空行,这一行非常重要,必不可少。表示响应头部结束

(4)响应正文,服务器返回的文档,最常见的为HTML网页。

  1. HTTP的头域

    在HTTP的请求消息和应答消息中,都包含头域。头域分为4种,其中请求头域和应答头域分别只在请求消息和应答消息中出现,通用头域和实体头域在两种消息中都可以出现,但实体头域只有当消息中包含了实体数据时才会出现。下面分别介绍这4种头域中的域名城和功能。在这里插入图片描述
    应答头域只在应答消息中出现,是Web服务器向浏览器提供的一些状态和要求。如下

    HTTP 应答头域在这里插入图片描述
    通用头域既可以用在请求消息中,也可以用在应答消息。

    HTTP通用头域在这里插入图片描述
    只有在请求和应答消息中包含实体数据时,才需要实体头域。请求消息中的实体数据是一些由浏览器向web服务器提交的数据,如在浏览器中采用POST方式提交表单时,浏览器就要把表单中的数据封装在请求消息的实体数据部分。应答消息中的实体数据是web服务器发给浏览器的媒体数据,如网页,图片和文档等。实体头域说明了实体数据的一些属性。如下表

    HTTP实体头域在这里插入图片描述
    3.分析GET方法的HTTP数据包

    我们以HTTP-Get数据包为例,分析GET方法的HTTP请求和响应数据包。

3.1.分析HTTP请求包在这里插入图片描述
前三个是TCP的三次握手,第四个数据包则是客户端向服务器发送的HTTP请求包,我们来学习分析下,在这里插入图片描述
HTTP之前的协议,本次我们不做讲解,不懂的同学可以看之前的实验,我们来看下HTTP协议。

Hypertext Transfer Protocol

             GET / HTTP/1.1\r\n                    #请求行信息

              Expert Info (Chat/Sequence): GET / HTTP/1.1\r\n    #专家信息

                     GET / HTTP/1.1\r\n

                     Severity level: Chat

                     Group: Sequence

              Request Method: GET                #请求方法为GET

              Request URI: /                       #请求的URI

              Request Version: HTTP/1.1       #请求的版本为HTTP/1.1

       Host: 10.1.1.33:8080\r\n               #请求的主机

       User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:37.0) Gecko/20100101 Firefox/37.0\r\n        #浏览器类型

      Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8\r\n  #请求的类型

      Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3\r\n  #请求语言

      Accept-Encoding: gzip, deflate\r\n     #请求的编码格式

      Connection: keep-alive\r\n                #使用持久连接

      \r\n                               #空行

      Full request URI: http://10.1.1.33:8080/         #请求的URI为10.1.1.33:8080

      HTTP request 1/8       

      Response in frame: 2770               #应答是第2770帧

      Next request in frame: 2775       #下一个请求是第2775帧

以上就是HTTP请求包的相关信息,可以看到客户端使用HTTP/1.1版本向服务器发送了GET请求,请求访问10.1.1.33的服务器。将以上信息填入到报文格式中,如下

GET方法的HTTP请求报文格式在这里插入图片描述
3.2. 分析HTTP响应包

根据请求包的信息,我们已经知道,响应包是第2770帧,下面我们来看下在这里插入图片描述
在HTTP之前,我们看到了下图显示的,TCP重组片段,这些片段共有2270个字节,由于超过了TCP数据包的最大数据分段(MSS),所以将数据在TCP层进行了分段。从下面的信息,可以看到分断后的数据包及包大小,如#2767(247),其中2767表示帧号,大小为247个字节。在这里插入图片描述

Hypertext Transfer Protocol

             HTTP/1.1 200 OK\r\n          #响应行信息

              Expert Info (Chat/Sequence): HTTP/1.1 200 OK\r\n    #专家信息

                     HTTP/1.1 200 OK\r\n          #HTTP响应信息,响应码为200

                     Severity level: Chat

                     Group: Sequence

              Request Version: HTTP/1.1     #请求版本

              Status Code: 200       #状态码

              Response Phrase: OK       #响应短语

       Content-Type: text/html\r\n         #响应的内容类型

       Content-Length: 2023\r\n     #包的长度

              Content length: 2023      

       Accept-Ranges: bytes\r\n       #服务器支持的请求:字节

       Server: HFS 2.3 beta\r\n    #服务器类型

       Set-Cookie: HFS_SID=0.248448607278988; path=/; \r\n   #设置Http Cookie

       Cache-Control: no-cache, no-store, must-revalidate, max-age=-1\r\n  #缓存控制

       Content-Encoding: gzip\r\n   #实体数据的压缩格式

       \r\n        #空行

       HTTP response 1/8                 #HTTP响应

       Time since request: 0.015248000 seconds #响应使用的时间

       Request in frame: 2763     #请求的帧号为2763

       Next request in frame: 2775   #下一个请求的帧号2775

       Next response in frame: 2778  #下一个响应的帧号是2778

       Content-encoded entity body (gzip): 2023 bytes -> 4375 bytes  #内容编码(gzip)

      Line-based text data: text/html   #基于行的文本数据

根据以上信息,可以知道服务器使用HTTP/1.1 200 OK响应了客户端的请求。将信息填入到报文格式中,如下

GET方法的HTTP响应报文格式在这里插入图片描述
4. 分析POST方法的HTTP数据包

4.1. 分析HTTP请求包

下面我们以HTTP-Post为例,分析POST方法的HTTP请求和响应。打开数据包,输入过滤条件ip.addr ==10.1.1.33,显示出的HTTP中,Info列中还有POST的即可,如下在这里插入图片描述

Hypertext Transfer Protocol        #HTTP协议

             POST /hfs2_3b287/ HTTP/1.1\r\n       #请求行

              Expert Info (Chat/Sequence): POST /hfs2_3b287/ HTTP/1.1\r\n   #专家信息

                     POST /hfs2_3b287/ HTTP/1.1\r\n

                     Severity level: Chat

                     Group: Sequence

              Request Method: POST                 #请求方法为POST

              Request URI: /hfs2_3b287/                # 请求的URI

              Request Version: HTTP/1.1               #请求的版本

      Host: 10.1.1.33:8080\r\n                        #使用的主机

      User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:37.0) Gecko/20100101 Firefox/37.0\r\n         #使用的浏览器类型

      Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8\r\n  #浏览器接受的类型

      Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3\r\n  #希望使用的语言

      Accept-Encoding: gzip, deflate\r\n   #可使用的编码格式,这里是gzip和deflate

      Referer: http://10.1.1.33:8080/hfs2_3b287/\r\n   #从包含的URL页面发起请求

      Cookie: HFS_SID=0.248448607278988\r\n           #Cookie信息

       Cookie pair: HFS_SID=0.248448607278988

      Authorization: Basic ZGVtbzpkZW1v\r\n  #授权证书信息

       Credentials: demo:demo        #登录的用户名密码

      Connection: keep-alive\r\n         #使用持久连接

      Content-Type:multipart/form-data;boundary=---------------------------54542580413055\r\n     #请求的内容类型

      Content-Length: 367\r\n   #包的长度

       Content length: 367

      \r\n     #空行

      Full request URI: http://10.1.1.33:8080/hfs2_3b287/   #请求的URI为http://10.1.1.33:8080/hfs2_3b287/

      HTTP request 1/6

      Response in frame: 3800   #响应的帧号

      Next request in frame: 3802   #下一个请求的帧号

以上就是使用POST方法的HTTP请求包,可以看到请求的连接及登录的用户名密码等。将上面的信息填入到报文格式中,如下
POST方法的HTTP请求报文格式在这里插入图片描述
另外,我们在HTTP的下面,看到了如下的内容在这里插入图片描述
类型的Multipart/form-data是上传文件的一种方式。Multipart/form-data其实就是浏览器用表单上传文件的方式。最常见的情境是:在写邮件时,向邮件后添加附件,附件通常使用表单添加,也就是用multipart/form-data格式上传到服务器。我们实验中向服务器上传了一个文件,所以就是此类型。

  再看Wireshark中的使用

  首先看wireshark中字段与Multipart/form-data的对应关系: MIME Multipart Media Encapsulation:代表整个Multipart/form-data上传文件中的数据。

      Encapsulated multipart part:代表表单中不同部分的数据。

      Boundary:用来隔开表单中不同部分的数据。

  其次,

  1) MIME Multipart Media Encapsulation, Type: multipart/form-data, Boundary: "---------------------------54542580413055"

  这行指出这个请求是multipart/form-data格式的,且boundary是“----------54542580413055”这个字符串。

  2)关于Boundary:  Boundary:用来隔开表单中不同部分的数据。实际上,每部分数据的开头都是由“--”+boundary开始的(这是MIME标准中讲述的标准内容)。

  3)  Encapsulated multipart part:紧跟着boundary的是该部分数据的描述:

      Content-Dispostion:form-data;name="Filename"\r\n

       每一个part至少一个name和一个content部分。     

  可以从上面的multipart/form-data中,看到我们上传的文本名字为http-post.txt,内容为“This is demo for HTTP POST”。

4.2. 分析HTTP响应包

根据Wireshark现实的响应包帧数,我们来看下第3800帧。在这里插入图片描述

 Hypertext Transfer Protocol     #HTTP协议

             HTTP/1.1 200 OK\r\n                 #响应行

              Expert Info (Chat/Sequence): HTTP/1.1 200 OK\r\n #专家信息

                     HTTP/1.1 200 OK\r\n       #响应信息

              Severity level: Chat

              Group: Sequence

       Request Version: HTTP/1.1      #请求版本

       Status Code: 200               #状态码

       Response Phrase: OK          #响应短语

      Content-Type: text/html\r\n         #响应包类似

      Content-Length: 570\r\n        #响应包长度

       Content length: 570

      Accept-Ranges: bytes\r\n        #服务器支持的请求:字节     

      Server: HFS 2.3 beta\r\n  #web服务器类型

      Content-Encoding: gzip\r\n    #实体数据的压缩格式

      \r\n     #空行

      HTTP response 1/6      #响应

      Time since request: 0.008774000 seconds    #响应请求的时间

      Request in frame: 3798        #请求的帧号

      Next request in frame: 3802           #下一个请求的帧号

      Next response in frame: 3804        #下一个响应的帧号

      Content-encoded entity body (gzip): 570 bytes -> 866 bytes  #内容编码(gzip)

      Line-based text data: text/html #文本内容

以上就是POST方法的HTTP响应包,可以看到服务器向客户端发送了HTTP/1.1 200 OK响应了HTTP请求包。服务器类型为HFS 2.3 beta,将数据填入到报文格式中

POST方法的HTTP响应报文格式在这里插入图片描述

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区),文章链接,文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件至:cloudbbs@huaweicloud.com进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容。
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。