wireshark抓包分析HTTP协议,HTTP协议执行流程,
「作者主页」:士别三日wyx
「作者简介」:CSDN top100、阿里云博客专家、华为云享专家、网络安全领域优质创作者
「推荐专栏」:对网络安全感兴趣的小伙伴可以关注专栏《网络安全入门到精通》
使用WireShark工具抓取「HTTP协议」的数据包,分析HTTP协议「执行流程」,分析HTTP请求响应「报文」中各个字段的作用。
- 第一步:访问百度
- 第二步:过滤HTTP协议的数据包
- 第三步:分析HTTP协议执行流程
- 第四步:分析HTTP协议报文
- 第五步:查看HTTP追踪流
第一步:访问百度
1)打开wireshark开启「抓包」,在cmd中执行 curl -I baidu.com,也就是访问百度,触发HTTP协议。

2)ping baidu.com 拿到百度的IP地址

第二步:过滤HTTP协议的数据包
1)「显示过滤器」输入 ip.addr == 39.156.66.10,过滤我和百度之间的数据包

第三步:分析HTTP协议执行流程
HTTP是简单的「请求-响应协议」,「建立TCP链接」后,客户端向服务端发送「请求」,服务端根据请求做出「响应」,然后「关闭TCP链接」。

1)先看前三个包,HTTP是基于TCP的,需要先通过「三次握手」建立连接

- 第一个包是「第一次握手」:我(192.168.2.121)向百度(39.156.66.10)发送一个 SYN ,表示这是一个「建立连接的请求」
- 第二个包是「第二次握手」:百度(39.156.66.10)响应我(192.168.2.121)一个 SYN+ACK ,表示这是一个「接受连接的应答」
- 第三个包是「第三次握手」,我(192.168.2.121)向百度(39.156.66.10)发送一个 ACK ,表示这一个「确认请求」
- 发送完确认请求后,我开启到百度的「单向连接通道」;百度收到我的确认请求后,就开启到我这边的单向连接通道;「两边通道」都开启以后,就可以通信了。
2)再看中间三个包,TCP连接建立以后,开始「HTTP的请求和响应」

- 第一个包是,我(192.168.2.121)向百度(39.156.66.10)发送了一个「HTTP请求」,请求类型是HEAD
- 第三个包是,百度(39.156.66.10)向我(192.168.2.121)发送了一个「HTTP响应」,响应状态码是 200 OK
3)再看最后四个包,请求响应结束后,「TCP四次挥手」断开连接。

- 第一个包是第一次挥手,我(192.168.2.121)向百度(39.156.66.10)发送一个FIN+ACK,表示这是一个释放连接的请求
- 第二个包是第二次挥手,百度(39.156.66.10)向我(192.168.2.121)响应一个ACK,表示这是一个确认请求;我收到后,就会释放我到百度的单向连接
- 第三个包是第三次挥手,百度(39.156.66.10)向我(192.168.2.121)发送一个FIN+ACK,表示这是一个释放连接的请求
- 第四个包是第四次挥手,我(192.168.2.121)向百度(39.156.66.10)响应一个ACK,表示这是一个确认请求;百度收到后,就会释放到我这边的单向连接
- 双向的连接都释放后,TCP连接就关闭了,此次通信结束
第四步:分析HTTP协议报文
HTTP协议请求、响应报文如下图:

- 请求报文分为三个部分:请求行、请求头、请求体
- 响应报文分为四个部分:状态行、响应头、响应空行、响应体
1)先来看HTTP请求包,找到HyperText Transfer Protocol这一栏,就是HTTP的报文了

主要看我圈中的地方,上面是请求行,中间是请求头
- 请求行:包含请求方法、请求URL、HTTP版本
- 请求头:包含请求的客户端的信息,一行一个请求头
- 请求体:POST等类型的请求才有请求体,这里没有
点开请求行,看里面的三个字段:

- Request Method:请求方法,这里的请求方法是HEAD,用来获取报文首部
- Request URI:请求的URL,因为我们没指定,所以默认是/
- Request Version:请求的版本,因为用的是HTTP协议,所以这里显示HTTP协议的版本
再看下面的几个请求头:

- Host:目标主机
- User-Agent:代理,也就是浏览器的类型。我们用的不是浏览器,所以这里显示的是命令curl
- Accept:浏览器可接受的MIME类型
2)再看HTTP响应包,找到HyperText Transfer Protocol这一栏,也就是HTTP的报文

注意看我圈中的地方,上面是状态行,下面是响应头。
- 状态行:包含版本和响应状态码、状态信息
- 响应头:包含响应的服务器的资源信息,一行一个响应头
- 响应空行:用来间隔/区分响应头和响应体
- 响应体:服务器响应的内容,通常是一个HTML页面的代码或者给客户端的数据。
响应报文跟我们命令执行的返回结果其实是一样的。因为请求方式是 HEAD,只是获取头部信息,所有这里没有响应体,但能明显看到最后多了一行空格,也就是响应空行。

点开状态行,可以看到里面有三个字段:

- Response Version:响应版本,因为使用的是HTTP协议,所以这里显示了HTTP的版本
- Status Code:响应状态码,这里的 200 表示请求成功。
- Response Phrase:响应状态码的提示信息
再看下面的这些响应头:

- Date:服务端发送响应报文的时间
- Server:服务器和相对应的版本
- Last-Modified:请求的对象创建或者最后修改的时间
- ETag:对象的标志值,如果对象修改了,这个值也会变,用来判断对象是否改变
- Accept-Ranges:支持的范围单位
- Content-Length:内容长度
- Cache-Control:缓存控制
- Expires:这个时间前,可以直接访问缓存副本
- Connection:连接类型,Keep-Alive表示这是一个长链接,可以继续用这个连接通信
- Content-Type:资源文件类型
第五步:查看HTTP追踪流
选中HTTP协议的数据包 - 右键 - 【追踪流】-【HTTP追踪流】可以看到请求跟响应的报文
或者使用快捷键 ctrl + alt + shift + h

相关文章:
wireshark抓包分析HTTP协议,HTTP协议执行流程,
「作者主页」:士别三日wyx 「作者简介」:CSDN top100、阿里云博客专家、华为云享专家、网络安全领域优质创作者 「推荐专栏」:对网络安全感兴趣的小伙伴可以关注专栏《网络安全入门到精通》 使用WireShark工具抓取「HTTP协议」的数据包&#…...
Linux第13步_安装“vim编辑器”及应用介绍
学习“磁盘重新分区”后,嵌入式Linux系统环境搭建进入安装“vim编辑器”这个环节。vim编辑器可以用来修改文件,在后期使用中,会经常用到。 1、安装“vim编辑器” 输入“sudo apt-get install vim回车”,就可以执行安装“vim编辑…...
Yapi安装配置(CentOs)
环境要求 nodejs(7.6) mongodb(2.6) git 准备工作 清除yum命令缓存 sudo yum clean all卸载低版本nodejs yum remove nodejs npm -y安装nodejs,获取资源,安装高版本nodejs curl -sL https://rpm.nodesource.com/setup_8.x | bash - #安装 s…...
HCIA-Datacom题库(自己整理分类的)_08_FTP协议【8道题】
一、单选 1.在使用FTP协议升级路由器软件时,传输模式应该选用___ 二进制模式 字节模式 文字模式 流字节模式 解析:二进制模式:在数据连接中传输,不对数据进行任何处理,不需要转换或格式化就可以传输字符。 2.以…...
【开源GPT项目 - 在问】让知识无界,智能触手可及
Chatanywhere: chatAnywhere 在问 | 让知识无界,智能触手可及 项目简介 这是一个免费的在线聊天工具,旨在让用户更方便地享受科技带来的便利。用户可以使用我们的工具来获取答案、寻求建议、进行翻译和计算等等。这是由一位个人开发者创建的ÿ…...
【2023 CCF 大数据与计算智能大赛】基于TPU平台实现超分辨率重建模型部署 基于Real-ESRGAN的TPU超分模型部署
2023 CCF 大数据与计算智能大赛 《基于TPU平台实现超分辨率重建模型部署》 洋洋很棒 李鹏飞 算法工程师 中国-烟台 2155477673qq.com 团队简介 本人从事工业、互联网场景传统图像算法及深度学习算法开发、部署工作。其中端侧算法开发及部署工作5年时间。 摘要 本文是…...
Vue中的组件通信方式及应用场景
在Vue中,组件通信有以下几种方式: Props / $emit:父组件通过给子组件传递props属性,子组件通过$emit事件将数据传递给父组件。适用于父组件向子组件传递数据。 自定义事件:父组件通过$on监听子组件触发的事件…...
RA8900CE汽车用c总线接口实时时钟模块
汽车用c总线接口实时时钟模块内置调频32.768 kHz晶体单元和DTCXO,高稳定性和电源切换。 接口类型我 2C-Bus接口(400kHz)界面电压范围2.5V ~ 5.5V温度补偿电压范围2.0V至5.5V计时电压范围1.6V ~ 5.5V可选时钟输出(32.768 kHz, 1024 Hz, 1 Hz)各种功能齐全的日历、报…...
屏幕截图--Snagit
Snagit是一款优秀的屏幕、文本和视频捕获、编辑与转换软件。它不仅可以捕获静止的图像,还能获得动态的图像和声音。软件界面干净清爽,功能板块一目了然,为用户提供专业的屏幕录制方案。可以根据自己的需求调整录制视频的分辨率、帧数、输出格…...
PHP运行环境之宝塔Web站点部署
目录 Web站点部署流程(部署聚合支付后台) 项目文件 将上传的文件解压文件至根目录 修改站点关键信息 设置伪静态,选择:thinkphp,并保存 设置PHP,选择:70+版本即可。 安装网站 1设置运行目录...
使用高版本JDK编译低版本代码
背景 SonarQube运行于Java17,使用Sonar的Maven插件编译时,如果编译使用的JDK版本低于SonarQube使用的Java17,则会提示Java文件不匹配问题。 Error during SonarScanner execution java.lang.UnsupportedClassVersionError: org/sonar/batch/…...
Zuul相关问题及到案(2024)
1、什么是Zuul?它在微服务架构中有什么作用? Zuul是Netflix开源的一种提供API网关服务的应用程序,它在微服务架构中扮演着流量的前门角色。主要功能包括以下几点: 路由转发:Zuul网关将外部请求转发到具体的微服务实例…...
【CSS】讲一讲BFC、IFC、GFC、FFC
1. 前言 FC(Formatting Contexts),是CSS2.1的一个概念,是页面中的一块渲染区域,具有一套渲染规则,决定FC中子元素如何定位,以及和其他元素的关系和相互作用。在说FC之前说一下文档流。 1.1. 普…...
阶段十-分布式-任务调度
第一章 定时任务概述 在项目中开发定时任务应该一种比较常见的需求,在 Java 中开发定时任务主要有三种解决方案:一是使用JDK 自带的 Timer,二是使用 Spring Task,三是使用第三方组件 Quartz Timer 是 JDK 自带的定时任务工具,其…...
Godot4.2——爬虫小游戏简单制作
目录 一、项目 二、项目功能 怪物 人物 快捷键 分数 游戏说明 提示信息 三、学习视频 UI制作 游戏教程 四、总结 一、项目 视频演示:Godot4爬虫小游戏简单制作_哔哩哔哩bilibili 游戏教程:【小猫godot4入门教程 C#版 已完结】官方入门案例 第…...
对象的前世今生与和事佬(static)的故事
目录 1.对象村的秘密(对象在内存的实现) 1.1 内存的好兄弟“堆”与“栈” 1.1.1方法喜欢玩泰山压顶 1.1.2 stack的实现 1.2栈上的对象引用 1.2.1有关对象局部变量 1.2.2 如果局部变量生存在栈上,那么实例变量呢? 1.2.3创建…...
报错curl: (6) Could not resolve host: raw.githubusercontent...的解决办法
我起初想要在macOS系统安装pip包,首先在终端安装homebrew,敲了命令:/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent...)" 之后触发的报错,报错内容:curl: (6) Could not resolve host: raw.…...
【基础篇】十二、引用计数法 可达性分析算法
文章目录 1、Garbage Collection2、方法区的回收3、堆对象回收4、引用计数法5、可达性分析算法6、查看GC Root对象 1、Garbage Collection C/C,无自动回收机制,对象不用时需要手动释放,否则积累导致内存泄漏: Java、C#、Python、…...
C语言算法(二分查找、文件读写)
二分查找 前提条件:数据有序,随机访问 #include <stdio.h>int binary_search(int arr[],int n,int key);int main(void) {}int search(int arr[],int left,int right,int key) {//边界条件if(left > right) return -1;//int mid (left righ…...
流媒体学习之路(WebRTC)——Pacer与GCC(5)
流媒体学习之路(WebRTC)——Pacer与GCC(5) —— 我正在的github给大家开发一个用于做实验的项目 —— github.com/qw225967/Bifrost目标:可以让大家熟悉各类Qos能力、带宽估计能力,提供每个环节关键参数调节接口并实现一个json全…...
深入剖析AI大模型:大模型时代的 Prompt 工程全解析
今天聊的内容,我认为是AI开发里面非常重要的内容。它在AI开发里无处不在,当你对 AI 助手说 "用李白的风格写一首关于人工智能的诗",或者让翻译模型 "将这段合同翻译成商务日语" 时,输入的这句话就是 Prompt。…...
基于距离变化能量开销动态调整的WSN低功耗拓扑控制开销算法matlab仿真
目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.算法仿真参数 5.算法理论概述 6.参考文献 7.完整程序 1.程序功能描述 通过动态调整节点通信的能量开销,平衡网络负载,延长WSN生命周期。具体通过建立基于距离的能量消耗模型&am…...
练习(含atoi的模拟实现,自定义类型等练习)
一、结构体大小的计算及位段 (结构体大小计算及位段 详解请看:自定义类型:结构体进阶-CSDN博客) 1.在32位系统环境,编译选项为4字节对齐,那么sizeof(A)和sizeof(B)是多少? #pragma pack(4)st…...
智能在线客服平台:数字化时代企业连接用户的 AI 中枢
随着互联网技术的飞速发展,消费者期望能够随时随地与企业进行交流。在线客服平台作为连接企业与客户的重要桥梁,不仅优化了客户体验,还提升了企业的服务效率和市场竞争力。本文将探讨在线客服平台的重要性、技术进展、实际应用,并…...
ElasticSearch搜索引擎之倒排索引及其底层算法
文章目录 一、搜索引擎1、什么是搜索引擎?2、搜索引擎的分类3、常用的搜索引擎4、搜索引擎的特点二、倒排索引1、简介2、为什么倒排索引不用B+树1.创建时间长,文件大。2.其次,树深,IO次数可怕。3.索引可能会失效。4.精准度差。三. 倒排索引四、算法1、Term Index的算法2、 …...
技术栈RabbitMq的介绍和使用
目录 1. 什么是消息队列?2. 消息队列的优点3. RabbitMQ 消息队列概述4. RabbitMQ 安装5. Exchange 四种类型5.1 direct 精准匹配5.2 fanout 广播5.3 topic 正则匹配 6. RabbitMQ 队列模式6.1 简单队列模式6.2 工作队列模式6.3 发布/订阅模式6.4 路由模式6.5 主题模式…...
SiFli 52把Imagie图片,Font字体资源放在指定位置,编译成指定img.bin和font.bin的问题
分区配置 (ptab.json) img 属性介绍: img 属性指定分区存放的 image 名称,指定的 image 名称必须是当前工程生成的 binary 。 如果 binary 有多个文件,则以 proj_name:binary_name 格式指定文件名, proj_name 为工程 名&…...
人机融合智能 | “人智交互”跨学科新领域
本文系统地提出基于“以人为中心AI(HCAI)”理念的人-人工智能交互(人智交互)这一跨学科新领域及框架,定义人智交互领域的理念、基本理论和关键问题、方法、开发流程和参与团队等,阐述提出人智交互新领域的意义。然后,提出人智交互研究的三种新范式取向以及它们的意义。最后,总结…...
免费PDF转图片工具
免费PDF转图片工具 一款简单易用的PDF转图片工具,可以将PDF文件快速转换为高质量PNG图片。无需安装复杂的软件,也不需要在线上传文件,保护您的隐私。 工具截图 主要特点 🚀 快速转换:本地转换,无需等待上…...
C/C++ 中附加包含目录、附加库目录与附加依赖项详解
在 C/C 编程的编译和链接过程中,附加包含目录、附加库目录和附加依赖项是三个至关重要的设置,它们相互配合,确保程序能够正确引用外部资源并顺利构建。虽然在学习过程中,这些概念容易让人混淆,但深入理解它们的作用和联…...
