打开kali终端进入wireshark
进入到wireshark点击选项
勾选选项混杂模式开始抓包
进入终端打开火狐,打开百度进行抓包
上方的过滤器可以指定类型数据宝或者指定源地址目标地址等等,例如现在抓取arp协议的数据包
我们ping一个地址
我们可以用语法对源地址和目标地址进行过滤,ip.src_host代表源地址,ip.dst_host代表目标地址
地址解析协议 是一个解析网络层地址来找寻数据链路层地址的网络传输协议,ARP通过网络地址来定位MAC地址
开始过滤arp
回到wireshark中我们选择第一个抓到的arp协议数据包进行分析
1.Address Resolution Protocol (request) //ARP地址解析协议 request请求包
2.Harfware type:Ethernet (1) //硬件类型
3.Protocol type:IPv4 (0x0800) //协议类型
4.Hardware size:6 //硬件地址
5.Protocol size:4 //协议长度
6.Opcode:request (1) //操作码 1表示请求包
7.Sender MAC address:VMware_91:59:6a (00:0c:29:91:59:6a) //源MAC地址
8.Sender IP address:192.168.91.132 //源IP地址
9.Target MAC address:00:00:00_00:00:00 (00:00:00_00:00:00) //目标MAC地址
10.Target IP address:192.168.91.2 //目标IP地址
下面分析下一个ARP应答数据包
1.Address Resolution Protocol (reply) //ARP地址解析协议 reply回复包
2.Harfware type:Ethernet (1) //硬件类型
3.Protocol type:IPv4 (0x0800) //协议类型
4.Hardware size:6 //硬件地址
5.Protocol size:4 //协议长度
6.Opcode:request (2) //操作码 2表示回复包
7.Sender MAC address:VMware_ff:2a:74 (00:50:56:ff:2a:74) //源MAC地址
8.Sender IP address:192.168.91.2 //源IP地址
9.Target MAC address:VMware_91:59:6a (00:0c:29:91:59:6a) //目标MAC地址
10.Target IP address:192.168.91.132 //目标IP地址
通过图片很好理解,192.168.91.132发出广播发出arp请求,请求192.168.91.2的MAC地址,然后192.168.91.2收到请求后,回复给192.168.91.132自己的MAC地址
ping一个IP地址,然后过滤ICMP协议的数据包
1.Type:8
//协议类型8
2.Code:0
//代码0 表示回显请求(ping请求)
3.Checksum: 0xb151 [correct]
//检验和 用于检查错误数据
4.[Checksum Status: Good]
//检验状态 Good
5.Identifier (BE): 34896 (0x8850)
6.Identifier (LE): 20616 (0x5088)
//ID值 在应答包中返回该字段
7.Sequence Number (BE): 1 (0x0001)
8.Sequence Number (LE): 256 (0x0100)
//序列号依旧在应答包中返回该字段
9.Response frame:4
//响应帧的序列号:7
10.Data (48 bytes)
//填充数据 共48字节
模拟tcp会话建立,简单的方式就是利用Xshell远程连接kali,就会捕获到tcp的三次握手
下面我们分析TCP的数据包
TCP协议的核心概念无非就是三次握手四次挥手,我们先来看三次握手
1.Source Port: 49164
//源端口
2.Destination Port: 22
//目的端口
3.Sequence Number: 0 (relative sequence number)
//序列号
4.Sequence Number (raw): 328436414
[Next Sequence Number: 1 (relative sequence number)]
//确认序列号
5.1000 . . . . =Header Length: 32 bytes (8)
//头部长度
6.Flags: 0x002 (SYN)
//标志位SYN
7.Window: 64240
//windows窗口大小
8.Checksum: 0xddd4 [unverified]
[Checksum Status: unverified]
//校验和
打开标志位查看详细信息
从以上信息可以看出这是一个SYN数据包,SYN=1 表示发送一个链接请求,这时seq和ACK都为0
第二个数据包
标志位SYN/ACK 表示这是TCP三次握手的第二个数据包
服务端收到SYN连接请求返回数据包SYN=1,ACK=1 表示回应第一个包
下面看第三个数据包
ACK=1 确认序列号有效
这样三次握手的过程就结束了
我们可以生成一个图表来观察数据交互的过程
灰色的那三个就是三次握手
我们清空一下数据包看一下断开链接时什么样的过程
我们分析一下过程,我们在终端输入 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 状态并关闭本端的会话接口,释放相应资源。
直接过滤TCP协议,因为HTTP协议是TCP的上层协议
前面三个和后面四个是tcp的三次握手四次挥手,中间的4到7是http请求部分
第一步:我们我们发送了一个 HTTP 的 HEAD 请求
第二步:服务器收到我们的请求返回了一个 Seq/ACK 进行确认
第三步:服务器将 HTTP 的头部信息返回给我们客户端 状态码为 200 表示页面正常
第四步:客户端收到服务器返回的头部信息向服务器发送 Seq/ACK 进行确认
发送完成之后客户端就会发送 FIN/ACK 来进行关闭链接的请求