Wireshark数据抓包分析之HTTP协议
在合天王安实验环境中,通过模拟局域网的两台机器之间的数据传输,来抓取和分析HTTP数据,用到HFS软件
1. 配置HFS软件
在局域网环境中,使用一个小工具来实现HTTP服务器。先在服务器上配置HFS,获取HTTP的GET数据和POST数据
右键以管理员身份运行hfs,打开界面如下:
配置端口8080
在虚拟文件系统区域,右键,选择“从磁盘添加目录”,选择一个真实存在的目录(此处注意务必是真实存在的),弹出的选择目录类型中选择”真实目录”,添加后的目录显示为红色。
右键目录,点击设置”用户名及密码”,在弹出的对话框中输入用户名和密码(demo/demo),点击确定。
在右键目录,点击”属性”,选择”上传”sheet页,选中任何人。点击确定,如下
这样我们就配置好了HFS工具,可以在客户端通过浏览器访问了。
2. 获取HTTP的GET数据和POST数据
下面我们在测试者机器上,打开Wireshark抓包工具,过滤条件输入ip.addr == 10.1.1.33,然后输入服务器中HFS给出的网址,等待服务器响应。成功之后,可以在测试者机器的浏览器上看到页面,如下:
这时候,我们已经获取到了HTTP的GET方法。我们将Wireshark获取的数据包保存为HTTP-Get。
点击页面的登录,在对话框中输入用户名密码(demo/demo),确定之后等待服务器响应。成功如下
点击hfs2_3b287文件后可看到如下界面:
如上图,会在左侧看到按钮,点击”上传”按钮,选择文件,这里我们选择桌面上的“http-post.txt”,点击上传。等待服务器响应。提示上传成功,如下
我们保存抓包文件,名字为HTTP-Post
3.分析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网页。
2. HTTP的头域
在HTTP的请求消息和应答消息中,都包含头域。头域分为4种,其中请求头域和应答头域分别只在请求消息和应答消息中出现,通用头域和实体头域在两种消息中都可以出现,但实体头域只有当消息中包含了实体数据时才会出现。下面分别介绍这4种头域中的域名城和功能。
HTTP请求头域
应答头域只在应答消息中出现,是Web服务器向浏览器提供的一些状态和要求。如下
HTTP 应答头域
通用头域既可以用在请求消息中,也可以用在应答消息。
HTTP通用头域
只有在请求和应答消息中包含实体数据时,才需要实体头域。请求消息中的实体数据是一些由浏览器向web服务器提交的数据,如在浏览器中采用POST方式提交表单时,浏览器就要把表单中的数据封装在请求消息的实体数据部分。应答消息中的实体数据是web服务器发给浏览器的媒体数据,如网页,图片和文档等。实体头域说明了实体数据的一些属性。如下表
HTTP实体头域
4.分析GET方法的HTTP数据包
我们以HTTP-Get数据包为例,分析GET方法的HTTP请求和响应数据包。
4.1.分析HTTP请求包
前三个是TCP的三次握手,第四个数据包则是客户端向服务器发送的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个字节。
下面来看HTTP的具体部分
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响应报文格式
Wireshark数据抓包分析之HTTP协议相关推荐
- 实验十四:Wireshark数据抓包分析之ARP协议
实验十四:Wireshark数据抓包分析之ARP协议 目录 一.实验目的及要求 二.实验原理 1.什么是ARP 2.ARP工作流程 3.ARP缓存表 三.实验环境 四.实验步骤及内容 实验步骤一 1. ...
- Wireshark数据抓包分析之域名系统协议
目录 预备知识 什么是DNS DNS的系统结构 DNS系统解析过程 DNS问题类型 实验目的 实验环境 实验步骤一 实验步骤二 预备知识 什么是DNS DNS是域名系统(Domain Name Sys ...
- Wireshark数据抓包分析之UDP协议
目录 预备知识 1.UDP协议概述 2.什么是UDP协议 3.UDP协议的特点 实验目的 实验环境 实验步骤一 1.配置TCP&UDP测试工具 2.配置服务器端 3.配置客户端 4.获取UDP ...
- Wireshark数据抓包分析(网络协议篇)1.2安装Wireshark
Wireshark数据抓包分析(网络协议篇)1.2安装Wireshark Wireshark(前称Ethereal)是一个网络包分析工具.该工具主要是用来捕获网络包,并显示包的详细情况.本节将分别介绍 ...
- Wireshark数据抓包分析(网络协议篇)第1章网络协议抓包概述
Wireshark数据抓包分析(网络协议篇)第1章网络协议抓包概述 网络协议是用于不同计算机之间进行网络通信的.网络协议是网络上所有设备(如网络服务器.计算机.交换机.路由器等)之间通信规则的集合,它 ...
- Wireshark数据抓包分析——网络协议篇
Wireshark数据抓包分析--网络协议篇 Wireshark是目前最受欢迎的抓包工具.它可以运行在Windows.Linux及MAC OS X操作系统中,并提供了友好的图形界面.同时,Wiresh ...
- 【愚公系列】2022年02月 wireshark系列-数据抓包分析之DNS协议
文章目录 一.题目一 二.题目二 一.题目一 根据实验环境,本实验的步骤如下: 1.测试环境中获取DNS数据包. 2.分析DNS数据包. 任务描述:获取两种类型的DNS数据包 (1)通过浏览器访问域名 ...
- 【愚公系列】2023年04月 wireshark系列-数据抓包分析之ARP协议
文章目录 前言 一.使用Netsh和ARP命令来绑定IP和MAC地址 二.使用Wireshark抓取ARP数据包 前言 ARP协议属于TCP/IP协议族中的底层协议,与常见的应用层协议不同,其了解程度 ...
- 【愚公系列】2022年02月 wireshark系列-数据抓包分析之IP协议
文章目录 一.题目一 二.题目二 一.题目一 任务描述:使用Wireshark抓取IP数据包以及IP分片数据包 1.使用Wireshark抓取IP数据包 启动Wireshark,Filter选择IP协 ...
最新文章
- python读取excel数据并饼图_python生成excel表格以及饼图 示例源码
- XML在JAVA项目中的作用
- 美国进入“非结构化”数据分析新时代
- FI功能增强业务说明书
- linux——管理系统存储之设备的识别、发现、挂载
- 工业级以太网交换机跟普通商用网络交换机有啥区别?
- 作业 输出演练 1751
- 从0开始架构一个IOS程序 ——04— UITabBarController和自定义TabBar 搭建主页面
- GC原理---对象可达判断
- 优化的意义,不仅在于业绩的提升
- select选择框在谷歌火狐和IE样式的不同
- 100阶乘c语言如何实现,求10000的阶乘(c语言代码实现)
- ML--HMM(隐马尔可夫模型及python的实现2)
- OpenGauss数据库的安装与运行
- ZFS的ashift参数解读
- ​软考高项论文写作这些雷区,千万要避开
- 什么是照度 照度的标准值介绍
- 玩转基因组浏览器之初识IGV
- 分享一个自用的zsh主题
- NOJ ACM-ICPC Scoring
热门文章
- Wireshark 抓包理解 FTP 传输过程
- 基于WEB的HTML5购物网站、H5电商购物平台网上商城网站毕业设计(2)商城分类
- 基于轨迹优化的自动驾驶汽车跟随自行车模型动力学控制(Matlab代码实现)
- Block 1:什么是Blocks
- onos在公有云应用
- pyqt5实现桌面便签及提醒——逐步更新
- python opencv车道线检测
- mysql 修改表字段裂隙_1、在考生文件夹下,samp1.accdb数据库文件中已建立表对象tStud。试按以下操作要求,完成表的编辑修改:...
- 区块链软件:谈溯源问题
- pc端android端 倒数日,倒数日电脑版下载-倒数日电脑版下载 v4.5.2--PC6电脑版