wireshark抓包分析——TCP/IP协议

article/2025/10/7 6:13:20

本文来自网易云社区


当我们需要跟踪网络有关的信息时,经常会说“抓包”。这里抓包究竟是什么?抓到的包又能分析出什么?在本文中以TCP/IP协议为例,简单介绍TCP/IP协议以及如何通过wireshark抓包分析。

Wireshark 是最著名的网络通讯抓包分析工具。功能十分强大,可以截取各种网络封包,显示网络封包的详细信息。

Wireshark下载安装,略。注意,若在Windows系统安装Wireshark,安装成功后可能会出现Wireshark的两个图标,一个是Wireshark(中文版);另外一个是Wireshark Legacy (英文版)。下面的内容会以Wireshark Legacy为例介绍。

打开Wireshark,开始界面如下:

201808290919453f89cc82-9690-4099-addc-b44d84acb713.png  

Wireshark捕获的是网卡的网络包,当机器上有多块网卡的时候,需要先选择网卡。开始界面中的Interface List,即网卡列表,选择我们需要的监控的网卡。点击Capture Options,选择正确的网卡,然后点击"Start"按钮, 开始抓包。

2018082909200706917650-2573-4c03-bd01-0462e1c625b4.png  

我们打开浏览器输入任意http网址,连接再关闭,比如:http://blog.csdn.net。然后,我们回到Wireshark界面,点击左上角的停止按键。查看此时Wireshark的抓包信息。在看抓包信息之前,先简单介绍下Wireshark界面的含义。其中,封包列表的面板中显示编号、时间戳、源地址、目标地址、协议、长度,以及封包信息。

201808290920260f1a5e4b-8e4f-451d-8994-13764e426f10.png  



封包详细信息是用来查看协议中的每一个字段。各行信息分别对应TCP/IP协议的不同层级。以下图为例,分别表示:传输层、网络层、数据链路层、物理层,一共四层。如果有应用层数据会显示第五层,即一共会出现五层。

201808290920377bad3677-03bf-4151-97e7-5d6e09a89bc2.png  

每一层都有一个字段指向上一层,表明上一层是什么协议。这大概是因为发包的时候会在数据上依次加上应用层、传输层、网络层、链路层的头部,但是对方收到数据包后是从最底层(链路层)开始层层剥去头部解包的,所以在每层上有一个字段指向上层,表明上层的协议,对方就知道下一步该怎么解包了。以TCP/IP协议为例,下图中分别是:IPv4、TCP。由于建立TCP连接用不到应用层协议,所以传输层就没有相应的指明上层(应用层)的字段了。

2018082909205351047869-4d3c-45f7-b00b-00a7bce465f3.png

在了解Wireshark界面后,我们来分析TCP协议。这里有很多数据包,我们需要先过滤,添加对应的过滤条件。比如,我添加了目标的ip地址和端口号:tcp and ip.addr==47.95.47.253 and tcp.port==53992,此时获取到的封包列表如下。

2018082909210415dcc5c2-f999-4b48-a6eb-c02f09655d49.png  


在此之前,看下TCP/IP报文的格式。

20180829092121169ae1ab-761a-4861-8a9e-832f840ae973.png  

根据上述报文格式我们可以将wireshark捕获到的TCP包中的每个字段与之对应起来,更直观地感受一下TCP通信过程。先看三次握手,下图中的3条数据包就是一次TCP建立连接的过程。

20180829092130d0e2bd9e-7f6c-4a4a-8fad-d09fe445f6fb.png  

第一次握手,客户端发送一个TCP,标志位为SYN=1,序号seq为Sequence number=0, 53992 -> 80,代表客户端请求建立连接;

20180829092142452391a5-c140-4467-b2ce-ff0b84e74d44.png  

第二次握手,服务器向客户端返回一个数据包,SYN=1,ACK=1,80 -> 53992,将确认序号(Acknowledgement Number)设置为客户的序号seq(Sequence number)加1,即0+1=1;

201808290921493240a120-2f98-4ac0-864e-c5db11c990aa.png  

第三次握手,客户端收到服务器发来的包后检查确认序号(Acknowledgement Number)是否正确,即第一次发送的序号seq加1(X+1= 0+1=1)。以及标志位ACK是否为1。若正确,客户端会再向服务器端发送一个数据包,SYN=0,ACK=1,确认序号(Acknowledgement Number)=Y+1=0+1=1,并且把服务器发来ACK的序号seq(Sequence number)加1发送给对方,发送序号seq为X+1= 0+1=1。客户端收到后确认序号值与ACK=1,53992 -> 80,至此,一次TCP连接就此建立,可以传送数据了。


20180829092202fba5f063-758d-4963-b95e-dd50d5f821f5.png  

还可以通过直接看标志位查看三次握手的数据包,如下图所示,第一个数据包标志位【SYN】,这是第一次握手;第二个数据包标志位【SYN,ACK】,这是第二次握手;第三个数据包标志位【ACK】,这是第三次握手。

20180829092217b3c30db8-50f8-408c-8e5f-fb7f36fcd22c.png

在三次握手的三个数据包之后,第四个包才是HTTP的, 这说明HTTP的确是使用TCP建立连接的。

2018082909222318fe4621-6c39-4e2f-b06a-2bb77e0a609d.png  

再往下看其他数据包,会发现存在大量的TCP segment of a reassembled PDU,字面意思是要重组的协议数据单元(PDU:Protocol Data Unit)的TCP段,这是TCP层收到上层大块报文后分解成段后发出去。

201808290922459784ed3b-9f61-4188-b155-a0ab2d25d5f1.png  

      每个数据包的Protocol Length都是1502 Byte,这是因为以太网帧的封包格式为:Frame = Ethernet Header + IP Header + TCP Header + TCP Segment Data。即:

1、Ethernet Header = 14 Byte = Dst Physical Address(6 Byte)+ Src Physical Address(6 Byte)+ Type(2 Byte),以太网帧头以下称之为数据帧。

2、IP Header = 20 Byte(without options field),数据在IP层称为Datagram,分片称为Fragment。

3、TCP Header = 20 Byte(without options field),数据在TCP层称为Stream,分段称为Segment(UDP中称为Message)。

4、TCP Segment Data = 1448 Byte(从下图可见)。

所以,每个数据包的Protocol Length = 14 Byte + 20 Byte + 20 Byte + 1448 Byte = 1502 Byte。

201808290923017e9191f2-49c7-4fe0-8dc9-2f702434ace9.png  

      我们再来看四次挥手。TCP断开连接时,会有四次挥手过程,标志位是FIN,我们在封包列表中找到对应位置,理论上应该找到4个数据包,但我试了好几次,实际只抓到3个数据包。查了相关资料,说是因为服务器端在给客户端传回的过程中,将两个连续发送的包进行了合并。因此下面会按照合并后的三次挥手解释,若有错误之处请指出。

20180829092314c82f2801-d5ad-4ae3-9620-e7c470e08cb3.png  

第一次挥手:客户端给服务器发送TCP包,用来关闭客户端到服务器的数据传送。将标志位FIN和ACK置为1,序号seq=X=2242,确认序号ack=Z=17602,53992 -> 80;

201808290923262ac1ab41-dbb6-4f55-bb7e-671194b52cb7.png  

第二次挥手:服务器收到FIN后,服务器关闭与客户端的连接,发回一个FIN和ACK(标志位FIN=1,ACK=1),确认序号ack为收到的序号加1,即X=X+1=2243。序号seq为收到的确认序号=Z=17602,80 -> 53992;

201808290923395482c33b-c1bc-4442-81be-5c5826f572c5.png  

第三次挥手:客户端收到服务器发送的FIN之后,发回ACK确认(标志位ACK=1),确认序号为收到的序号加1,即Y+1=17603。序号为收到的确认序号X=2243,53992 -> 80。

201808290923559759f633-e235-47b1-990f-3d42d41a2246.png  

      至此,整个TCP通信过程已经介绍完毕。

      附:TCP通信过程:

20180829092404d235a095-0627-42c0-8812-62a4d3e4a8c3.jpg



原文:wireshark抓包分析——TCP/IP协议

网易云新用户大礼包:https://www.163yun.com/gift

本文来自网易云社区,经作者李莉授权发布。

 


相关文章:
【推荐】 nej+regular环境使用es6的低成本方案


http://chatgpt.dhexx.cn/article/fE2DCige.shtml

相关文章

使用wireshark抓包分析实战

今天继续给大家介绍渗透测试相关知识,本文主要内容是使用wireshark抓包分析实战。 免责声明: 本文所介绍的内容仅做学习交流使用,严禁利用文中技术进行非法行为,否则造成一切严重后果自负! 一、wireshark分析ARP协议 …

Wireshark抓包及分析——HTTP

1、首先我们打开 Wireshark,可以看到有很多的网络,选择自己正在使用的网络,比如我现在就是使用 WLAN,双击点开就可以了。 2、然后开始抓包分析,在浏览器中输入网址 3、可以看到 Wireshark 已经抓到很多数据包&…

Http实战之Wireshark抓包分析

Http相关的文章网上一搜一大把,所以笔者这一系列的文章不会只陈述一些概念,更多的是通过实战(抓包代码实现)的方式来跟大家讨论Http协议中的各种细节,帮助大家理解那些反反复复记不住的的概念! 搭建测试项目…

Wireshark抓包详细分析

wireshark抓包介绍 这里选了wifi网卡,开始抓包 上方的文本框可以输入一些规则,对抓到的包进行过滤。 过滤策略: 只看 TCP 协议的包,可以输入 tcp 然后回车;如果想看使用 UDP 协议的某个端口,输入 udp.p…

TCP 实战抓包分析

提纲 正文 显形“不可见”的网络包 网络世界中的数据包交互我们肉眼是看不见的,它们就好像隐形了一样,我们对着课本学习计算机网络的时候就会觉得非常的抽象,加大了学习的难度。 还别说,我自己在大学的时候,也是如…

计算机网络【wireshark抓包分析】

一个完整的三次握手就是:请求(SYN) — 应答(SYNACK) — 再次确认(SYN)。完成三次握手,客户端与服务器开始传送数据。 实验流程: 1、首先我们打开wireshark软件的主界面&a…

wireshark抓包分析(ARP,IP,ICMP)

ARP 介绍: 地址解析协议,即ARP(Address Resolution Protocol),是根据IP地址获取物理地址的一个TCP/IP协议。主机发送信息时将包含目标IP地址的ARP请求广播到局域网络上的所有主机,并接收返回消息&#xf…

HTTP协议抓包分析

文章目录 HTTP请求报文和响应报文的结构示意图请求报文分析响应报文分析参考资料 本次使用的测试的网站是:http://www.people.com.cn 15 Agu 2019记下:最好是就使用http的网站来分析。因为现在很多网站都是支持的https协议。但是因为我现在也是一个小白&…

html将字符串转为数值,JavaScript字符串转数字的5种方法及其陷阱

JavaScript 是一个神奇的语言,字符串转数字有 5 种方法,各有各的坑法!下面本篇文章就来介绍一下JavaScript字符串转数字的5种方法及其陷阱,希望对大家有所帮助。 String 转换为 Number 有很多种方式,我可以想到的有 5 种!parseInt(num); // 默认方式 (没有基数) parseInt…

CenterNet代码解析

CenterNet代码解析 CenterNet网络 代码解析 代码网址:https://github.com/xingyizhou/CenterNet

【计算机视觉】PnP算法简介与代码解析-柴政(solvepnp理论篇)

PnP算法简介与代码解析-柴政 PnP求解算法是指通过多对3D与2D匹配点,在已知或者未知相机内参的情况下,利用最小化重投影误差来求解相机外参的算法。PnP求解算法是SLAM前端位姿跟踪部分中常用的算法之一,本次公开课,将详细讲述P3P、…

Polygon zkEVM节点代码解析

1. 引言 前序博客: Polygon zkEVM网络节点 相关代码: https://github.com/0xPolygonHermez/zkevm-node(Go语言) Polygon zkEVM节点提供的主要服务模块有: 1)JSON-RPC服务2)Sequencer服务3&…

ICCV2017跟踪算法BACF原理及代码解析

文章和代码下载地址: Galoogahi H K, Fagg A, Lucey S. Learning Background-Aware Correlation Filters for Visual Tracking. 代码下载地址:http://www.hamedkiani.com/bacf.html BACF就是将MCCF多通道特征应用到CFLB上,然后通过ADMM求解…

【深度学习2】基于Pytorch的WGAN理论和代码解析

目录 1 原始GAN存在问题 2 WGAN原理 3 代码理解 GitHub源码 参考文章:令人拍案叫绝的Wasserstein GAN - 知乎 (zhihu.com) 1 原始GAN存在问题 实际训练中,GAN存在着训练困难、生成器和判别器的loss无法指示训练进程、生成样本缺乏多样性等问题。这…

YOLOv3:Darknet代码解析(四)结构更改与训练

背景:我们需要降低YOLOv2-tiny的参数量和存储量,以便硬件实现。 目的:更改YOLO结构,去掉后面的两层卷积层,降低参数量和运算量。 相关文章: YOLOv3:Darknet代码解析(一&#xff0…

StrongSORT(deepsort强化版)浅实战+代码解析

1.实战部分 1.1 具体操作 其实和之前的deepsort没差 到github上下载Yolov5_StrongSORT_OSNet下载对应的yolov5去替代原文件中yolov5下载yolov5权重(可以自动下载)和ReID权重(可能要科学上网)放到weight里面 ReID权重有点神秘&a…

对比学习 ——simsiam 代码解析。:

目录 1 : 事先准备 。 2 : 代码阅读。 2.1: 数据读取 2.2: 模型载入 3 训练过程: 4 测试过程: 5 :线性验证 6 : 用自己数据集进行对比学习。 第一: 改数据集 &#x…

AutoWare 代码解析

Auto Ware 代码解析系列(1) Auto Ware 是日本名古屋大学的开源无人车项目,下图为ros仿真环境下的各个节点的关系图: 代码库地址为:https://github.com/CPFL/Autoware 上面有较为详细的仿真环境配置信息,建…

FAST-LIO2代码解析(六)

0. 简介 上一节我们将while内部的IKD-Tree部分全部讲完,下面将是最后一部分,关于后端优化更新的部分。 1. 迭代更新 最后一块主要做的就是,拿当前帧与IKD-Tree建立的地图算出的残差,然后去计算更新自己的位置,并将更…

DeblurGAN-V2源代码解析

DeblurGAN-V2源代码解析(pytorch) DeblurGAN-V2是DeblurGAN的改进版,主要解决的是去图像运动模糊的问题,相比于DeblurGAN而言有速度更快,效果更好的优点。 论文:https://arxiv.org/pdf/1908.03826.pdf 代码…