Kali Linux --《网络安全》-- 使用 WireShark 对常用协议抓包并分析原理


前言

作为一款高效免费的抓包工具,wireshark可以捕获并描述网络数据包,其最大的优势就是免费、开源以及多平台支持,在GNU通用公共许可证的保障范围下,用户可以免费获取软件和代码,并拥有对其源码修改和定制的权利,如今其已是全球最广泛的网络数据包分析软件之一。接下来我就带大家用WireShark 实战:使用 WireShark 对常用协议抓包并分析原理


常用协议分析-ARP 协议

地址解析协议(英语:Address Resolution Protocol,缩写:ARP)是一个通过解析网络层地址来找寻数据链路层地址的网络传输协议,它在 IPv4 中极其重要。ARP 是通过网络地址来定位 MAC 地址。

开始抓包—过滤 arp
Kali Linux --《网络安全》-- 使用 WireShark 对常用协议抓包并分析原理
我们使用 nmap 来基于 ARP 协议进行扫描

┌──(root xuegod53)-[~] └─# nmap -sn 192.168.1.1 
Kali Linux --《网络安全》-- 使用 WireShark 对常用协议抓包并分析原理
我们看一下我们抓取到的数据包
分析第一个请求包
Kali Linux --《网络安全》-- 使用 WireShark 对常用协议抓包并分析原理
查看 Address Resolution Protocol (request) ARP 请求包内容:
Kali Linux --《网络安全》-- 使用 WireShark 对常用协议抓包并分析原理
Address Resolution Protocol (request) #ARP 地址解析协议 request 表示请求包 Hardware type: Ethernet (1) #硬件类型 Protocol type: IPv4 ( 0x0800 ) #协议类型 Hardware size: 6 #硬件地址 Protocol size: 4 #协议长度 Opcode:_ request ( 1 ) #操作码,该值为 1 表示 ARP 请求包 Sender MAC address: VMware_f1:35:ee (00:0c:29:f1:35:ee) #源 MAC 地址 Sender IP address: 192.168.1.53 . #源 IP 地址 Target MAC address: 00:00:00_ 00: 00:00 (00: 00: 00 :00: 00:00) #目标 MAC 地址 Target IP address: 192.168.1.1 #目标 IP 地址 

我们来分析第二个数据包 ARP 的应答数据包
Kali Linux --《网络安全》-- 使用 WireShark 对常用协议抓包并分析原理
查看: Address Resolution Protocol (reply) ARP 地址解析协议
Kali Linux --《网络安全》-- 使用 WireShark 对常用协议抓包并分析原理

Address Resolution Protocol (reply) #ARP 地址解析协议 reply 表示回复包 Hardware type: Ethernet (1) #硬件类型 Protocol type: IPv4 ( 0x0800 ) #协议类型 Hardware size: 6 #硬件地址 Protocol size: 4 #协议长度 Opcode:_ reply ( 2 ) #操作码,该值为 2 表示 ARP 回复包 Sender MAC address: XXXXXXXXXXXX (9c:61:21:75:55:50) #源 MAC 地址 Sender IP address: 192.168.1.1 #源 IP 地址 Target MAC address: VMware_f1:35:ee (00:0c:29:f1:35:ee) #目标 MAC 地址 Target IP address: 192.168.1.53 #目标 IP 地址 

总结:我们可以看到到应答包补全了自己的 MAC 地址,目的地址和源地址做了替换我们再来看两个数据包的请求和过程
Kali Linux --《网络安全》-- 使用 WireShark 对常用协议抓包并分析原理
192.168.1.53 广播:谁有 192.168.1.1 的 MAC 地址?
192.168.1.1 应答:192.168.1.1 的 MAC 地址是 xxxxxxxxxxx
很有趣的一个过程不是吗?

常用协议分析-ICMP 协议

我们把之前的数据包清空掉然后筛选 ICMP 协议的数据包
Kali Linux --《网络安全》-- 使用 WireShark 对常用协议抓包并分析原理
打开一个终端

┌──(root xuegod53)-[~] └─# ping xuegod.cn -c 1 

我们只发送一个 ping 包,方便我们分析发送完之后停止抓包即可。
Kali Linux --《网络安全》-- 使用 WireShark 对常用协议抓包并分析原理
我们先看请求包的内容我们可以看到这是个 4 层的协议包
Kali Linux --《网络安全》-- 使用 WireShark 对常用协议抓包并分析原理
下面我们开始分析 ICMP 协议包:
ICMP 协议分析请求包
Kali Linux --《网络安全》-- 使用 WireShark 对常用协议抓包并分析原理
ICMP 协议分析应答包
Kali Linux --《网络安全》-- 使用 WireShark 对常用协议抓包并分析原理
工作过程:
本机发送一个 ICMP Echo Request 的包
接受方返回一个 ICMP Echo Reply,包含了接受到数据拷贝和一些其他指令

常用协议分析-Kali Linux --《网络安全》-- 使用 WireShark 对常用协议抓包并分析原理
我们模拟一下 tcp 会话建立,那最简单的方式是什么呢?
我们通过 Xshell 远程连接 Kali Linux 就会捕获到完整的 TCP3 次握手的链接。
Kali Linux --《网络安全》-- 使用 WireShark 对常用协议抓包并分析原理
Kali Linux --《网络安全》-- 使用 WireShark 对常用协议抓包并分析原理
抓完数据包之后我们就停止抓包,接下来我们开始分析 TCP 的数据包
TCP 协议最核心的概念无非就是 3 次握手 4 次断开,我们先讲 TCP 的 3 次握手
Kali Linux --《网络安全》-- 使用 WireShark 对常用协议抓包并分析原理
查看 TCP 协议:
我们先来看第一个数据包 Kali Linux --《网络安全》-- 使用 WireShark 对常用协议抓包并分析原理
下面这样图是打开标志位的详细Kali Linux --《网络安全》-- 使用 WireShark 对常用协议抓包并分析原理
我们从以上信息就可以看出这是一个 SYN 数据包,SYN=1 表示发送一个链接请求。这时 Seq 和
Kali Linux --《网络安全》-- 使用 WireShark 对常用协议抓包并分析原理
Flags 位信息
Kali Linux --《网络安全》-- 使用 WireShark 对常用协议抓包并分析原理
我们可以看到服务端收到 SYN 连接请求返回的数据包 SYN=1,ACK=1 表示回应第一个 SYN 数据
包。

我们看第三个数据包
Kali Linux --《网络安全》-- 使用 WireShark 对常用协议抓包并分析原理
到这里三次握手过程就结束了。
我们生成一个图表来观察数据交互的过程
Kali Linux --《网络安全》-- 使用 WireShark 对常用协议抓包并分析原理
点击显示过滤器
Kali Linux --《网络安全》-- 使用 WireShark 对常用协议抓包并分析原理
前面 3 个就是 TCP 建立链接的过程,后面的就是相互通信的过程了这个时候 seq 就会根据数据包的
大小改变。
Kali Linux --《网络安全》-- 使用 WireShark 对常用协议抓包并分析原理
我们清空一下数据包来看一下断开链接是一个什么样的过程.
Kali Linux --《网络安全》-- 使用 WireShark 对常用协议抓包并分析原理
我们在 Xshell 窗口中输入 exit 退出
Kali Linux --《网络安全》-- 使用 WireShark 对常用协议抓包并分析原理
我们重新到 WireShark 生成图标
Kali Linux --《网络安全》-- 使用 WireShark 对常用协议抓包并分析原理
们分析一下过程,我们在终端输入 EXIT 实际上是在我们 Kali 上执行的命令,表示我们 SSHD 的
Server 端向客户端发起关闭链接请求。

第一次挥手:服务端发送一个[FIN+ACK],表示自己没有数据要发送了,想断开连接,并进入
FIN_WAIT_1 状态

第二次挥手:客户端收到 FIN 后,知道不会再有数据从服务端传来,发送 ACK 进行确认,确认序号
为收到序号+1(与 SYN 相同,一个 FIN 占用一个序号),客户端进入 CLOSE_WAIT 状态。

第三次挥手:客户端发送 [FIN+ACK] 给对方,表示自己没有数据要发送了,客户端进入
LAST_ACK 状态,然后直接断开 TCP 会话的连接,释放相应的资源。

第四次挥手:服务户端收到了客户端的 FIN 信令后,进入 TIMED_WAIT 状态,并发送 ACK 确认消
息。

服务端在 TIMED_WAIT 状态下,等待一段时间,没有数据到来,就认为对面已经收到了自己发送的
ACK 并正确关闭了进入 CLOSE 状态,自己也断开了 TCP 连接,释放所有资源。当客户端收到服务端的ACK 回应后,会进入 CLOSE 状态并关闭本端的会话接口,释放相应资源。

常用协议分析-HTTP 协议

我们还是筛选 TCP 协议因为 HTTP 是 TCP 的上层协议,所以我们过滤 TCP 的数据会包含 HTTP 协
议的数据包
Kali Linux --《网络安全》-- 使用 WireShark 对常用协议抓包并分析原理
我们打开一个终端输入下面命令。

┌──(rootxuegod53)-[~] └─# curl -I baidu.com 

Kali Linux --《网络安全》-- 使用 WireShark 对常用协议抓包并分析原理
curl 是一个在命令行下工作的文件传输工具,我们这里用来发送 http 请求
-I 大写的 i 表示仅返回头部信息。
我们可以看到我们抓到了 TCP 的 3 次握手 4 次断开
Kali Linux --《网络安全》-- 使用 WireShark 对常用协议抓包并分析原理
第 4 个和第 6 个是我们的 HTTP 数据包
Kali Linux --《网络安全》-- 使用 WireShark 对常用协议抓包并分析原理
第一步:我们我们发送了一个 HTTP 的 HEAD 请求
第二步:服务器收到我们的请求返回了一个 Seq/ACK 进行确认
第三步:服务器将 HTTP 的头部信息返回给我们客户端 状态码为 200 表示页面正常
第四步:客户端收到服务器返回的头部信息向服务器发送 Seq/ACK 进行确认
发送完成之后客户端就会发送 FIN/ACK 来进行关闭链接的请求。

                                        各位亲爱的小哥哥小姐姐没文章到此就结束了                                              想要获取文章视频+源码和笔记的                                                   请添加我们的小姐姐 
Kali Linux --《网络安全》-- 使用 WireShark 对常用协议抓包并分析原理