通过Wireshark抓包分析,体验HTTP请求的一次完整交互过程
目录
一、关于Wireshark
1.1、 什么是Wireshark
1.2、下载及安装
二、HTTP介绍
2.1、HTTP请求过程介绍
2.2 、TCP协议基础知识
2.2.1、概念介绍
2.2.2、TCP协议的工作原理
2.2.3、三次握手建立连接
2.3.4、四次挥手断开连接
2.3、Wireshark抓包分析过程
2.3.1、三次握手
2.3.2、发送请求
2.3.3、服务器响应
2.3.4、四次挥手
一、关于Wireshark
1.1、 什么是Wireshark
Wireshark(前身 Ethereal)是一个网络包分析工具。该工具主要是用来捕获网络数据包,并自动解析数据包,为用户显示数据包的详细信息,供用户对数据包进行分析。
它可以运行在 Windows 和 Linux 操作系统上。可以使用该工具捕获并分析各类协议数据包,本文将讲解该工具的安装及基本使用方法。
1.2、下载及安装
Kali Linux 系统自带 Wireshark 工具,而 Windows 系统中默认没有安装该工具。因此,本节讲解如何在 Windows 系统中安装 Wireshark 工具。
-
打开网址 http://www.wireshark.org,进入 Wireshark 官网,如图所示。
-
选择合适的平台进行下载
-
一直下一步安装即可,安装完打开Wireshark,如下:
二、HTTP介绍
HTTP(HyperText Transfer Protocol,超文本传输协议)是用于传输超文本信息的协议,它是互联网上应用最为广泛的一种网络协议。了解完整的HTTP请求过程有助于我们更深层次的去分析问题(尤其是网络安全问题),同时也更能清楚为什么现在网站很少再用HTTP了,而改为使用更为安全的HTTPS协议。
2.1、HTTP请求过程介绍
HTTP连接本质就是使用TCP协议建立起的可靠连接进行请求发送与请求响应。HTTP请求过程大致可以分为五个步骤(见上图),每个步骤细节如下:
- DNS解析:当客户端(如浏览器)尝试访问一个网站时,它首先会尝试从本地缓存中查找域名对应的IP地址。如果本地缓存中没有找到,客户端会发送DNS查询请求到本地的DNS服务器。
- 建立TCP连接:客户端(如浏览器)向服务器发起连接请求,通常使用TCP/IP协议建立一个到服务器的TCP连接。这个过程称为三次握手(Three-way handshake),确保连接的可靠性。
- 客户端发送请求:客户端向服务器发送HTTP请求消息。
- 服务端响应请求:服务器接收到请求后,会检查请求头和请求体,然后根据请求方法(如GET、POST)和资源路径来决定如何响应。
- 释放TCP连接:请求完成后,客户端和服务器可以关闭连接。
2.2 、TCP协议基础知识
2.2.1、概念介绍
TCP(Transmission Control Protocol,传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议。TCP是互联网核心协议之一,位于OSI模型的传输层,负责在互联网上的计算机之间提供可靠的数据传输服务。
2.2.2、TCP协议的工作原理
TCP连接的建立与断开,正常过程至少需要客户端与服务端来回发送7个包(请求)才能完成。其中客户端发送4个(1、3、4、7),服务端发送3个(2,5,6),具体原理参照下图。
传输控制依赖首部包含的6个标志:
- URG:紧急指针
- ACK:确认序号是否有效
- PSH:接收方应尽快将这个报文段交给应用层
- RST:重建连接
- SYN:同步序号用来发起一个连接
- FIN:发送端完成发送任务
2.2.3、三次握手建立连接
TCP建立连接的过程,包括客户端和服务器总共发送3个包,此过程称为三次握手:
-
第一次握手:客户端发送一个带有SYN标志的TCP段,请求与服务器建立连接。
-
第二次握手:服务器接收到SYN请求后,发送一个带有SYN和ACK标志的TCP段作为响应。
-
第三次握手:客户端接收到服务器的SYN+ACK响应后,发送一个带有ACK标志的TCP段,完成连接建立。
三次握手完成后便建立了TCP连接,便可进行数据传输,TCP负责将数据分割为多个段(Segment),并按顺序发送。
2.3.4、四次挥手断开连接
TCP断开连接的过程,包括客户端和服务器总共发送4个包,此过程称为四次挥手:
-
第一次挥手:客户端发送一个带有FIN标志的TCP段,请求断开连接;
-
第二次挥手:服务器接收到FIN请求后,发送一个带有ACK标志的TCP段作为响应;
-
第三次挥手:服务器发送一个带有FIN标志的TCP段,请求断开连接;
-
第四次挥手:客户端接收到服务器的FIN请求后,发送一个带有ACK标志的TCP段,完成连接断开。
2.3、Wireshark抓包分析过程
①打开Wireshark工具,选择以太网
因为此时捕获的是本地网络,所以会有很多信息,先不管
②打开cmd窗口,以此执行 ping www.baidu.com,然后执行curl www.baidu.com
到这里,我们执行的这两条命令,Wireshark也已经捕获到了,
为避免其他无用的数据包影响分析,可在显示过滤器(display filter)输入过滤条件ip.addr== ip.addr==157.0.148.3 (来自ping返回的百度ip)
,过滤与百度发生交互的数据包:
上半部分是ping命令的数据包,不管,下面的是curl命令的数据包,我们以此来分析TCP连接的三次握手和四次挥手。
2.3.1、三次握手
前三个包完成了三次握手,建立了连接。
-
第一个包是「第一次握手」:我(192.168.1.52)向百度(157.0.148.3)发送一个 SYN ,表示这是一个「建立连接的请求」;
-
第二个包是「第二次握手」:百度(157.0.148.3)响应我(192.168.1.52)一个 SYN+ACK ,表示这是一个「接受连接的应答」;
-
第三个包是「第三次握手」:我(192.168.1.52)向百度(157.0.148.3)发送一个 ACK ,表示这一个「确认请求」。
发送完确认请求后,我开启到百度的单向连接通道,百度收到我的确认请求后,就开启到我这边的单向连接通道,两边通道都开启以后,就可以通信了。
2.3.2、发送请求
第一个HTTP协议包(序号103)执行了HTTP 的GET请求。
客户端向服务器发送HTTP请求消息。请求消息通常包括以下部分:
-
请求行:包含请求方法(如GET、POST)、请求的资源路径、HTTP版本。
-
请求头:包含客户端信息、请求参数等,例如User-Agent、Accept、Cookie等。
-
请求体:对于某些请求方法(如POST),可能包含额外的数据,用于向服务器发送信息。
点开请求行,看里面的三个字段,下图所示:
-
Request Method:请求方法,这里的请求方法是GET;
-
Request URI:请求的URI,没指定默认是
/
,因为我们只请求了域名www.baidu.com,并没指定要获取的资源,所以是默认的/
; -
Request Version:请求的版本,因为用的是HTTP协议,所以这里显示HTTP协议的版本。
再看下面的几个请求头:
-
Host:目标主机;
-
User-Agent:用户代理,也就是浏览器的类型。由于我们没用浏览器,所以这里显示的是命令curl,版本为8.9.1;
-
Accept:浏览器可接受的MIME(Multipurpose Internet Mail Extensions)类型。
浏览器通常使用 MIME 类型(而不是文件扩展名)来确定如何处理URL,因此 We b服务器在响应头中添加正确的 MIME 类型非常重要。如果配置不正确,浏览器可能会无法解析文件内容,网站将无法正常工作,并且下载的文件也会被错误处理。
2.3.3、服务器响应
第二个HTTP协议包(序号106)执行了HTTP响应。
-
状态行:包含版本和响应状态码、状态信息;
-
响应头:包含响应的服务器的资源信息,一行一个响应头;
-
响应空行:用来间隔/区分响应头和响应体;
-
响应体:服务器响应的内容,通常是一个HTML页面的代码或者给客户端的数据,上图中可以看到本次响应的内容是一个文件数据(File Data)。
点开状态行,可以看到里面有三个字段:
-
Response Version:响应版本,因为使用的是HTTP协议,所以这里显示了HTTP的版本;
-
Status Code:响应状态码,这里的 200 表示请求成功;
-
Response Phrase:响应状态码的提示信息。
最后看下几个响应头:
-
Accept-Ranges: 告知客户端资源是否支持范围请求。当前取值
bytes
表明资源支持范围请求,可以使用Range头进行请求。 -
Cache-Control: 控制缓存行为,包括是否缓存、缓存的有效期、缓存策略等。
-
Connection: 服务器是否需要保持连接。
keep-alive表示服务器希望在发送响应后不立即关闭连接,而是保持连接状态以供后续请求复用。这种设置可以提高服务器的响应效率,减少TCP连接的建立和断开的开销,特别是在处理大量并发请求的场景下。
-
Content-Length: 响应内容的字节数,本例是2381字节。
-
Content-Type: 响应内容的类型和编码方式,text/html。
-
Date: 指示响应消息生成的时间。
-
Etag: 资源的实体标签(Entity Tag),用于缓存控制和验证。
-
Last-Modified: 资源的最后修改时间
-
Pragma: 历史遗留的HTTP头,它最初用于缓存控制,但现在已不推荐使用。取值
no-cache
表明不使用缓存。 -
Server: 服务器的名称或版本。
-
Set-Cookie: 用于设置客户端的Cookie
当打开响应体,会发现它的内容是明文的,对于机密通信来说HTTP通信很容易产生信息泄露。另外,以上介绍的整个交互过程中并不验证通信方的身份,第三方可以冒充他人身份参与通信。后续会发图文详解,带你搞清楚HTTPS协议的工作机制。
2.3.4、四次挥手
最后四个包通过四次挥手断开了连接。
-
第一个包是「第一次挥手」:我(192.168.1.52)向百度(157.0.148.3)发送一个「FIN+ACK」,表示这是一个「释放连接」的请求;
-
第二个包是「第二次挥手」:百度(157.0.148.3)向我(192.168.1.52)响应一个「ACK」,表示这是一个「确认请求」,我收到后,就会释放我到百度的单向连接;
-
第三个包是「第三次挥手」:百度(157.0.148.3)向我(192.168.1.52)发送一个「FIN+ACK」,表示这是一个「释放连接」的请求;
-
第四个包是「第四次挥手」:我(192.168.1.52)向百度(36.155.132.76)响应一个「ACK」,表示这是一个「确认请求」,百度收到后,就会释放到我这边的单向连接。
双向的连接都释放后,TCP连接就关闭了(对于本例来说就是百度响应结束),此次通信结束。
相关文章:

通过Wireshark抓包分析,体验HTTP请求的一次完整交互过程
目录 一、关于Wireshark 1.1、 什么是Wireshark 1.2、下载及安装 二、HTTP介绍 2.1、HTTP请求过程介绍 2.2 、TCP协议基础知识 2.2.1、概念介绍 2.2.2、TCP协议的工作原理 2.2.3、三次握手建立连接 2.3.4、四次挥手断开连接 2.3、Wireshark抓包分析过程 2.3.1、三次握…...

Requestium:Python中的Web自动化新贵
文章目录 Requestium:Python中的Web自动化新贵背景:为何选择Requestium?Requestium是什么?如何安装Requestium?简单的库函数使用方法场景应用常见Bug及解决方案总结 Requestium:Python中的Web自动化新贵 背…...

2024版红娘金媒10.3婚恋相亲系统源码小程序(亲测)
1. 红娘服务 红娘服务模块是该系统的一大特色。专业红娘会通过分析用户的个人资料和偏好, 为用户提供精准的配对建议和个性化服务。用户可以预约红娘服务,通过红娘的介入,提升配对成功率。 2. 相亲活动 相亲活动模块用于组织和管理线下或线…...

k8s-实战——ES集群部署
文章目录 yaml文件es-pvc.yamles-svc.yamles-cluster-sts.yaml创建elasticsearch集群yaml文件 es-pvc.yaml 通过nfs服务进行新增pv并通过labels关联pvc前置准备需要提前准备pv的服务器以及挂在路径--- apiVersion: v1 kind: PersistentVolume metadata:name: nfs-es-pv-data-...

无人机的就业前景怎么样?
无人机的就业前景在当前及未来一段时间内都非常广阔。随着低空经济的蓬勃发展,无人机在农业、公安、测绘、交通、应急救援、影视拍摄等多个领域得到了广泛应用,对无人机操控员和相关专业人才的需求也随之急剧增加。 一、无人机操控员的就业前景 1. 高需…...

【学习】软件测试中V模型、W模型、螺旋模型三者介绍
在软件工程的星辰大海之中,存在着三种独特的航路图:V模型、W模型以及螺旋模型。它们分别以各自的方式描绘了软件开发与测试的不同旅程。 首先映入眼帘的是V模型——一个以垂直线条贯穿始终的简洁图形。这个模型如同一座倒立的“V”字形山峰,…...

Kafka存储机制大揭秘:从日志结构到清理策略的全面解析
文章目录 一、前言二、日志存储结构1.日志文件结构2.topic3.partition4.segment索引文件5.message结构6.message查找过程 三、存储策略1.顺序写2.页缓存3.零拷贝4.缓存机制 四、日志格式演变1.V0 版本2.V1 版本3.V0/V1消息集合4.V2 版本消息格式5.V2版本消息集合 五、偏移量维护…...

显卡服务器和普通服务器之间的区别有哪些?
显卡服务器也被称之为GPU服务器,显卡服务器与普通的服务器之间有着很明显的区别,下面就让我们共同来了解一下吧! 普通服务器的主要处理器通常都是配备的中央处理器,可以用于执行大部分通用计算任务和操作系统的管理;而…...

国产科技里程碑:自主算力走向世界,“表格编程”横空出世
近日,中国高科技领域迎来里程碑式的进展。 据安徽省量子计算工程研究中心官方消息,本源量子计算科技(合肥)股份有限公司(简称“本源量子”)成功向海外销售了其第三代自主超导量子计算机“本源悟空”的机时。…...

人工智能如何改变未来生活:从医疗到日常的全面升级
人工智能如何改变未来生活:从医疗到日常的全面升级 随着人工智能(AI)技术的进步,我们正逐渐看到它为各行各业带来的巨大变革。从医疗、企业到日常生活,AI通过简化流程、提高效率,甚至改善生活质量…...

第112届全国糖酒会(3月成都)正式官宣!
作为食品饮料行业内备受瞩目的年度盛事,全国糖酒商品交易会(简称“糖酒会”)一直是各大厂商与经销商展现企业风采、寻觅合作伙伴及签署订单的关键舞台。2024年10月31日,第111届全国糖酒商品交易会(秋糖)在深…...

NFT Insider #154:The Sandbox Alpha 4 第四周开启,NBA Topshot NFT 销量激增至新高
市场数据 加密艺术及收藏品新闻 NBA 赛季开幕推动 Topshot NFT 销量激增至新高 随着波士顿凯尔特人队和纽约尼克斯队在 10 月 22 日开启 2024-2025 NBA 赛季的序幕,NBA Topshot 的 NFT 销售量达到了自上赛季季后赛以来的最高水平。截止到 10 月 27 日的这一周&…...

【Canal 中间件】Canal 实现 MySQL 增量数据的异步缓存更新
文章目录 一、安装 MySQL1.1 启动 mysql 服务器1.2 开启 Binlog 写入功能1.2.1创建 binlog 配置文件1.2.2 修改配置文件权限1.2.3 挂载配置文件1.2.4 检测 binlog 配置是否成功 1.3 创建账户并授权 二、安装 RocketMQ2.1 创建容器共享网络2.2 启动 NameServer2.3 启动 Broker2.…...

独立开发的个人品牌打造:个人IP与独立开发的结合
引言 个人品牌程序员也需要打造。在当今的创意经济中,个人IP与独立开发的结合成为了一种趋势,为个体带来了前所未有的机会和可能性。本文将探讨如何通过打造个人IP来增强独立开发的影响力,并探索这种结合为个人带来的潜在价值。 个人IP的重…...
每天一题:洛谷P2002 消息扩散
题目背景 本场比赛第一题,给个简单的吧,这 100 分先拿着。 题目描述 有 n 个城市,中间有单向道路连接,消息会沿着道路扩散,现在给出 n 个城市及其之间的道路,问至少需要在几个城市发布消息才能让这所有 …...

【深度学习】用LSTM写诗,生成式的方式写诗系列之一
Epoch 4: 100%|███████████████████████████████████████████████████████████| 63/63 [00:07<00:00, 8.85batch/s, acc18.5, loss5.8] [5] loss: 5.828, accuracy: 18.389 , lr:0.001000 Epoch 5: 100%|███…...

HomeAssistant自定义组件学习-【二】
#要说的话# 前面把中盛科技的控制器组件写完了。稍稍熟悉了一些HA,现在准备写窗帘控制组件,构想的东西会比较多,估计有些难度,过程会比较长,边写边记录吧! #设备和场景环境# 使用的是Novo的电机…...

如何看待AI技术的应用前景?
文章目录 如何看待AI技术的应用前景引言AI技术的现状1. AI的定义与分类2. 当前AI技术的应用领域 AI技术的应用前景1. 经济效益2. 社会影响3. 技术进步 AI技术应用面临的挑战1. 数据隐私与安全2. 可解释性与信任3. 技能短缺与就业影响 AI技术的未来发展方向1. 人工智能的伦理与法…...

Unity中的屏幕坐标系
获得视口宽高 拖动视口会改变屏幕宽高数值 MousePosition 屏幕坐标系的原点在左下角,MousePosition返回Z为0也就是纵深为0的Vector3 但是如果鼠标超出屏幕范围不会做限制,所以可能出现负数或者大于屏幕宽高的情况,做鼠标拖拽物体时需要注…...

标题点击可跳转网页
要实现点击标题跳转到网页的功能,你可以在Vue组件中使用<a>标签(锚点标签)并设置href属性为网页的URL。如果你希望使用uni-app的特性来控制页面跳转,可以使用uni.navigateTo方法(这适用于uni-app环境,…...

易语言模拟真人动态生成鼠标滑动路径
一.简介 鼠标轨迹算法是一种模拟人类鼠标操作的程序,它能够模拟出自然而真实的鼠标移动路径。 鼠标轨迹算法的底层实现采用C/C语言,原因在于C/C提供了高性能的执行能力和直接访问操作系统底层资源的能力。 鼠标轨迹算法具有以下优势: 模拟…...

Linux:生态与软件安装
文章目录 前言一、Linux下安装软件的方案二、包管理器是什么?三、生态问题相关的理解1. 什么操作系统是好的操作系统?2. 什么是生态?3. 软件包是谁写的?这些工程师为什么要写?钱的问题怎么解决? 四、我的服务器怎么知…...

R 语言与其他编程语言的区别
R 语言与其他编程语言的区别 R 语言作为一种专门用于统计计算和图形的编程语言,与其他编程语言相比有一些独特的特点和区别。本文将详细介绍这些区别,帮助你更好地理解 R 语言的优势和适用场景。 1. 专为统计和数据分析设计 统计功能 内置统计函数&…...

RC低通滤波器Bode图分析(传递函数零极点)
RC低通滤波器 我们使得R1K,C1uF;电容C的阻抗为Xc; 传递函数 H ( s ) u o u i X C X C R 1 s C 1 s C R 1 1 s R C (其中 s j ω ) H(s)\frac{u_{o} }{u_{i} } \frac{X_{C} }{X_{C}R} \frac{\frac{1}{sC} }{\…...

基于深度学习的网络入侵检测
基于深度学习的网络入侵检测是一种利用深度学习技术对网络流量进行实时监测与分析的方法,旨在识别并防范网络攻击和恶意活动。随着网络环境日益复杂,传统的入侵检测系统(IDS)在面对不断变化的攻击模式时,往往难以保持高…...

《构建一个具备从后端数据库获取数据并再前端显示的内容页面:前后端实现解析》
一、前端页面:布局与功能 1. 页面结构 我们先来看前端页面的 HTML 结构,它主要由以下几个部分组成: <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewp…...

Rust 力扣 - 59. 螺旋矩阵 II
文章目录 题目描述题解思路题解代码题目链接 题目描述 题解思路 使用一个全局变量current记录当前遍历到的元素的值 我们只需要一圈一圈的从外向内遍历矩阵,每一圈遍历顺序为上边、右边、下边、左边,每遍历完一个元素后current 我们需要注意的是如果上…...

2.4w字 —TS入门教程
目录 1. 什么是TS 2. TS基本使用 3 TS基础语法 3.1 基础类型约束 3.11 string,number,boolean, null和undefined 3.12 any 3.13 unknown 3.14 void 3.15 数组 3.16 对象 3.2 函数的约束 3.21 普通写法 3.22 函数表达式 3.22 可选…...

java: 未结束的字符文字 报错及解决:将编码全部改为UTF-8或者GBK
报错: 解决: 将编码都改成UTF-8或者GBK:...

Android平台RTSP转RTMP推送之采集麦克风音频转发
技术背景 RTSP转RTMP推送,好多开发者第一想到的是采用ffmpeg命令行的形式,如果对ffmpeg比较熟,而且产品不要额外的定制和更高阶的要求,未尝不可,如果对产品稳定性、时延、断网重连等有更高的技术诉求,比较…...