欢迎各位彦祖与热巴畅游本人专栏与博客
你的三连是我最大的动力
以下图片仅代表专栏特色 [点击箭头指向的专栏名即可闪现]
专栏跑道一
➡️网络空间安全——全栈前沿技术持续深入学习
专栏跑道二
➡️ 24 Network Security -LJS
专栏跑道三
➡️ MYSQL REDIS Advance operation
专栏跑道四
➡️HCIP;H3C-SE;CCIP——LJS[华为、华三、思科高级网络]
专栏跑道五
➡️RHCE-LJS[Linux高端骚操作实战篇]
专栏跑道六
➡️数据结构与算法[考研+实际工作应用+C程序设计]
专栏跑道七
➡️RHCSA-LJS[Linux初级及进阶骚技能]
上节回顾 2.实战:使用 WireShark 对常用协议抓包并分析原理
- 协议分析的时候我们关闭混淆模式,避免一些干扰的数据包存在。
2.1常用协议分析-ARP 协议
- 地址解析协议(英语:Address Resolution Protocol,缩写:ARP)是一个通过解析网络层地址来找寻数据链路层地址的网络传输协议,它在 IPv4 中极其重要。
- ARP 是通过网络地址来定位 MAC 地址。
开始抓包---过滤 arp
编辑
使用 nmap 来基于 ARP 协议进行扫描
root@xuegod53:~# nmap -sn 192.168.1.1
- 编辑
看一下我们抓取到的数据包并分析第一个请求包
查看 Address Resolution Protocol (request) ARP 请求包内容:
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_ 96:67:52 (00:0c:29:8b:2b:b8) #源 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 地址
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 (a4:56:02:3b:4b:03) #源 MAC 地址 Sender IP address: 192.168.1.1 . #源 IP 地址 Target MAC address: 00:00:00_ 00: 00:00 (00:0c:29:8b:2b:b8) #目标 MAC 地址 Target IP address: 192.168.1.53 #目标 IP 地址
- 总结:
- 可以看到到应答包补全了自己的 MAC 地址,目的地址和源地址做了替换
- 我们再来看两个数据包的请求和过程
- 编辑
192.168.1.53 广播:谁有 192.168.1.1 的 MAC 地址? 192.168.1.1 应答:192.168.1.1 的 MAC 地址是 xxxxxxxxxxx
2.2常用协议分析-ICMP 协议
- 把之前的数据包清空掉然后筛选 ICMP 协议的数据包
打开一个终端
root@xuegod53:~# ping xuegod.cn -c 1
- 只发送一个 ping 包,方便我们分析发送完之后停止抓包即可。
先看请求包的内容我们可以看到这是个 4 层的协议包
下面开始分析 ICMP 协议包:
ICMP 协议分析请求包
ICMP 协议分析应答包
工作过程:
- 本机发送一个 ICMP Echo Request 的包
- 接受方返回一个 ICMP Echo Reply,包含了接受到数据拷贝和一些其他指令
2.3常用协议分析-TCP 协议
首先是清空数据包然后筛选 tcp 开始抓包
- 模拟一下 tcp 会话建立,那最简单的方式是什么呢?
- 我们通过 Xshell 远程连接 Kali Linux 就会捕获到完整的 TCP3 次握手的链接。
- 抓完数据包之后我们就停止抓包,接下来我们开始分析 TCP 的数据包
- TCP 协议最核心的概念无非就是 3 次握手 4 次断开,我们先讲 TCP 的 3 次握手
查看 TCP 协议:
- 先来看第一个数据包 SYN 数据包
打开标志位的详细信息
从以上信息就可以看出这是一个 SYN 数据包,SYN=1 表示发送一个链接请求。这时 Seq 和
ACK 都是 0
分析第二个数据包
Flags 位信息
- 可以看到服务端收到 SYN 连接请求返回的数据包 SYN=1,ACK=1 表示回应第一个 SYN 数据包。
分析第三个数据包
这里三次握手过程就结束了。
生成一个图表来观察数据交互的过程
编辑
全工程分析如下:
- 在终端输入 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 状态并关闭本端的会话接口,释放相应资源。
2.4常用协议分析-HTTP 协议
- 还是筛选 TCP 协议因为 HTTP 是 TCP 的上层协议,所以我们过滤 TCP 的数据会包含 HTTP 协议的数据包
编辑
打开一个终端输入下面命
root@xuegod53:~# curl -I baidu.com
cur介绍
- 是一个在命令行下工作的文件传输工具,我们这里用来发送 http 请求
- -I 大写的 i 表示仅返回头部信息。
- 可以看到我们抓到了 TCP 的 3 次握手 4 次断开
第 4 个和第 6 个是我们的 HTTP 数据包
完整过程分析:
- 第一步:我们我们发送了一个 HTTP 的 HEAD 请求
- 第二步:服务器收到我们的请求返回了一个 Seq/ACK 进行确认
- 第三步:服务器将 HTTP 的头部信息返回给我们客户端 状态码为 200 表示页面正常
- 第四步:客户端收到服务器返回的头部信息向服务器发送 Seq/ACK 进行确认
- 发送完成之后客户端就会发送 FIN/ACK 来进行关闭链接的请求。
3.实战:WireShark 抓包解决服务器被黑上不了网
场景:服务器被黑上不了网,可以 ping 通网关,但是不能上网。
模拟场景
修改主机 TTL 值为 1,下面的方式是我们临时修改内核参数。
root@xuegod53:~# echo "1" > /proc/sys/net/ipv4/ip_default_ttl
拓展补充:
- TTL : 数据报文的生存周期。
- 默认 linux 操作系统值:64,每经过一个路由节点,TTL 值减 1。TTL 值为 0 时,说明目标地址不可达并返回:Time to live exceeded
- 作用: 防止数据包,无限制在公网中转发。
进行测试
root@xuegod53:~# ping 192.168.1.1 -c 1
编辑
root@xuegod53:~# ping xuegod.cn -c 1
编辑
- 可以看到提示我们 Time to live exceeded 这表示超过生存时间,
- 我们判断和目标之间经过多少个网络设备是根据目标返回给我们的 TTL 值来判断的,因为我们发送的数据包是看不到的。
实战抓包分析数据包
编辑
开启抓包,过滤 icmp 协议
root@xuegod53:~# ping xuegod.cn -c 1
然后回到 WireShark 中查看数据包
编辑
编辑
- 可以看到第一个包是发送了一个 ping 请求包 ttl=1
- 然后呢我们收到了 192.168.1.1 返回给我们的数据包告诉我们超过数据包生存时间,数据包被丢
如果把 TTL 值修改成 2 会有什么效果呢?
root@xuegod53:~# echo "2" > /proc/sys/net/ipv4/ip_default_ttl root@xuegod53:~# ping xuegod.cn -c 1
编辑
- 对比数据包发现返回我们数据包被丢弃的源地址变成了 123.115.0.1,这证明了数据包在网络中已经到达了下一个网络设备才被丢弃
- 由此我们还判断出我们的运营商网关地址为 123.115.0.1 但是我们并没有到达目标主机。
恢复系统内核参数
root@xuegod53:~# echo "64" > /proc/sys/net/ipv4/ip_default_ttl root@xuegod53:~# ping xuegod.cn -c 1
编辑
- 目标返回给我们的 TTL 值为 52,这表示我们的 TTL 值需要大于 64-52=12 才可以访问 xuegod.cn
- MTR 可以检测我们到达目标网络之间的所有网络设备的网络质量,
默认系统是没有安装 MTR 工具的我们手动安装一下
root@xuegod53:~# apt install -y mtr
示例:检测到达 xuegod.cn 所有节点的通信质量
root@xuegod53:~# mtr xuegod.cn
编辑
可以看到从我当前主机到目标主机[xuegod.cn ]之间经过 12 跳。
2.实战:使用 WireShark 对常用协议抓包并分析原理
- 协议分析的时候我们关闭混淆模式,避免一些干扰的数据包存在。
2.1常用协议分析-ARP 协议
- 地址解析协议(英语:Address Resolution Protocol,缩写:ARP)是一个通过解析网络层地址来找寻数据链路层地址的网络传输协议,它在 IPv4 中极其重要。
- ARP 是通过网络地址来定位 MAC 地址。
开始抓包---过滤 arp
编辑
使用 nmap 来基于 ARP 协议进行扫描
root@xuegod53:~# nmap -sn 192.168.1.1
- 编辑
看一下我们抓取到的数据包并分析第一个请求包
- 编辑
查看 Address Resolution Protocol (request) ARP 请求包内容:
- 编辑
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_ 96:67:52 (00:0c:29:8b:2b:b8) #源 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 地址
- 编辑
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 (a4:56:02:3b:4b:03) #源 MAC 地址 Sender IP address: 192.168.1.1 . #源 IP 地址 Target MAC address: 00:00:00_ 00: 00:00 (00:0c:29:8b:2b:b8) #目标 MAC 地址 Target IP address: 192.168.1.53 #目标 IP 地址
- 总结:
- 可以看到到应答包补全了自己的 MAC 地址,目的地址和源地址做了替换
- 我们再来看两个数据包的请求和过程
- 编辑
192.168.1.53 广播:谁有 192.168.1.1 的 MAC 地址? 192.168.1.1 应答:192.168.1.1 的 MAC 地址是 xxxxxxxxxxx
2.2常用协议分析-ICMP 协议
- 把之前的数据包清空掉然后筛选 ICMP 协议的数据包
编辑
打开一个终端
root@xuegod53:~# ping xuegod.cn -c 1
- 只发送一个 ping 包,方便我们分析发送完之后停止抓包即可。
编辑
先看请求包的内容我们可以看到这是个 4 层的协议包
编辑
下面开始分析 ICMP 协议包:
ICMP 协议分析请求包
编辑
ICMP 协议分析应答包
工作过程:
- 本机发送一个 ICMP Echo Request 的包
- 接受方返回一个 ICMP Echo Reply,包含了接受到数据拷贝和一些其他指令
2.3常用协议分析-TCP 协议
首先是清空数据包然后筛选 tcp 开始抓包
- 模拟一下 tcp 会话建立,那最简单的方式是什么呢?
- 我们通过 Xshell 远程连接 Kali Linux 就会捕获到完整的 TCP3 次握手的链接。
- 抓完数据包之后我们就停止抓包,接下来我们开始分析 TCP 的数据包
- TCP 协议最核心的概念无非就是 3 次握手 4 次断开,我们先讲 TCP 的 3 次握手
查看 TCP 协议:
- 先来看第一个数据包 SYN 数据包
打开标志位的详细信息
从以上信息就可以看出这是一个 SYN 数据包,SYN=1 表示发送一个链接请求。这时 Seq 和
ACK 都是 0
分析第二个数据包
Flags 位信息
- 可以看到服务端收到 SYN 连接请求返回的数据包 SYN=1,ACK=1 表示回应第一个 SYN 数据包。
分析第三个数据包
这里三次握手过程就结束了。
生成一个图表来观察数据交互的过程
全工程分析如下:
- 在终端输入 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 状态并关闭本端的会话接口,释放相应资源。
2.4常用协议分析-HTTP 协议
- 还是筛选 TCP 协议因为 HTTP 是 TCP 的上层协议,所以我们过滤 TCP 的数据会包含 HTTP 协议的数据包
打开一个终端输入下面命
root@xuegod53:~# curl -I baidu.com
cur介绍
- 是一个在命令行下工作的文件传输工具,我们这里用来发送 http 请求
- -I 大写的 i 表示仅返回头部信息。
- 可以看到我们抓到了 TCP 的 3 次握手 4 次断开
第 4 个和第 6 个是我们的 HTTP 数据包
完整过程分析:
- 第一步:我们我们发送了一个 HTTP 的 HEAD 请求
- 第二步:服务器收到我们的请求返回了一个 Seq/ACK 进行确认
- 第三步:服务器将 HTTP 的头部信息返回给我们客户端 状态码为 200 表示页面正常
- 第四步:客户端收到服务器返回的头部信息向服务器发送 Seq/ACK 进行确认
- 发送完成之后客户端就会发送 FIN/ACK 来进行关闭链接的请求。
3.实战:WireShark 抓包解决服务器被黑上不了网
场景:服务器被黑上不了网,可以 ping 通网关,但是不能上网。
模拟场景
修改主机 TTL 值为 1,下面的方式是我们临时修改内核参数。
root@xuegod53:~# echo "1" > /proc/sys/net/ipv4/ip_default_ttl
拓展补充:
- TTL : 数据报文的生存周期。
- 默认 linux 操作系统值:64,每经过一个路由节点,TTL 值减 1。TTL 值为 0 时,说明目标地址不可达并返回:Time to live exceeded
- 作用: 防止数据包,无限制在公网中转发。
进行测试
root@xuegod53:~# ping 192.168.1.1 -c 1
编辑
root@xuegod53:~# ping xuegod.cn -c 1
编辑
- 可以看到提示我们 Time to live exceeded 这表示超过生存时间,
- 我们判断和目标之间经过多少个网络设备是根据目标返回给我们的 TTL 值来判断的,因为我们发送的数据包是看不到的。
实战抓包分析数据包
编辑
开启抓包,过滤 icmp 协议
root@xuegod53:~# ping xuegod.cn -c 1
然后回到 WireShark 中查看数据包
编辑
编辑
- 可以看到第一个包是发送了一个 ping 请求包 ttl=1
- 然后呢我们收到了 192.168.1.1 返回给我们的数据包告诉我们超过数据包生存时间,数据包被丢
如果把 TTL 值修改成 2 会有什么效果呢?
root@xuegod53:~# echo "2" > /proc/sys/net/ipv4/ip_default_ttl root@xuegod53:~# ping xuegod.cn -c 1
编辑
- 对比数据包发现返回我们数据包被丢弃的源地址变成了 123.115.0.1,这证明了数据包在网络中已经到达了下一个网络设备才被丢弃
- 由此我们还判断出我们的运营商网关地址为 123.115.0.1 但是我们并没有到达目标主机。
恢复系统内核参数
root@xuegod53:~# echo "64" > /proc/sys/net/ipv4/ip_default_ttl root@xuegod53:~# ping xuegod.cn -c 1
编辑
- 目标返回给我们的 TTL 值为 52,这表示我们的 TTL 值需要大于 64-52=12 才可以访问 xuegod.cn
- MTR 可以检测我们到达目标网络之间的所有网络设备的网络质量,
默认系统是没有安装 MTR 工具的我们手动安装一下
root@xuegod53:~# apt install -y mtr
示例:检测到达 xuegod.cn 所有节点的通信质量
root@xuegod53:~# mtr xuegod.cn
编辑
可以看到从我当前主机到目标主机[xuegod.cn ]之间经过 12 跳。
2.实战:使用 WireShark 对常用协议抓包并分析原理
- 协议分析的时候我们关闭混淆模式,避免一些干扰的数据包存在。
2.1常用协议分析-ARP 协议
- 地址解析协议(英语:Address Resolution Protocol,缩写:ARP)是一个通过解析网络层地址来找寻数据链路层地址的网络传输协议,它在 IPv4 中极其重要。
- ARP 是通过网络地址来定位 MAC 地址。
开始抓包---过滤 arp
编辑
使用 nmap 来基于 ARP 协议进行扫描
root@xuegod53:~# nmap -sn 192.168.1.1
- 编辑
看一下我们抓取到的数据包并分析第一个请求包
- 编辑
查看 Address Resolution Protocol (request) ARP 请求包内容:
- 编辑
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_ 96:67:52 (00:0c:29:8b:2b:b8) #源 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 地址
- 编辑
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 (a4:56:02:3b:4b:03) #源 MAC 地址 Sender IP address: 192.168.1.1 . #源 IP 地址 Target MAC address: 00:00:00_ 00: 00:00 (00:0c:29:8b:2b:b8) #目标 MAC 地址 Target IP address: 192.168.1.53 #目标 IP 地址
- 总结:
- 可以看到到应答包补全了自己的 MAC 地址,目的地址和源地址做了替换
- 我们再来看两个数据包的请求和过程
- 编辑
192.168.1.53 广播:谁有 192.168.1.1 的 MAC 地址? 192.168.1.1 应答:192.168.1.1 的 MAC 地址是 xxxxxxxxxxx
2.2常用协议分析-ICMP 协议
- 把之前的数据包清空掉然后筛选 ICMP 协议的数据包
编辑
打开一个终端
root@xuegod53:~# ping xuegod.cn -c 1
- 只发送一个 ping 包,方便我们分析发送完之后停止抓包即可。
编辑
先看请求包的内容我们可以看到这是个 4 层的协议包
编辑
下面开始分析 ICMP 协议包:
ICMP 协议分析请求包
编辑
ICMP 协议分析应答包
工作过程:
- 本机发送一个 ICMP Echo Request 的包
- 接受方返回一个 ICMP Echo Reply,包含了接受到数据拷贝和一些其他指令
2.3常用协议分析-TCP 协议
首先是清空数据包然后筛选 tcp 开始抓包
- 模拟一下 tcp 会话建立,那最简单的方式是什么呢?
- 我们通过 Xshell 远程连接 Kali Linux 就会捕获到完整的 TCP3 次握手的链接。
- 抓完数据包之后我们就停止抓包,接下来我们开始分析 TCP 的数据包
- TCP 协议最核心的概念无非就是 3 次握手 4 次断开,我们先讲 TCP 的 3 次握手
查看 TCP 协议:
- 先来看第一个数据包 SYN 数据包
打开标志位的详细信息
从以上信息就可以看出这是一个 SYN 数据包,SYN=1 表示发送一个链接请求。这时 Seq 和
ACK 都是 0
分析第二个数据包
Flags 位信息
- 可以看到服务端收到 SYN 连接请求返回的数据包 SYN=1,ACK=1 表示回应第一个 SYN 数据包。
分析第三个数据包 编辑
这里三次握手过程就结束了。
生成一个图表来观察数据交互的过程
编辑
全工程分析如下:
- 在终端输入 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 状态并关闭本端的会话接口,释放相应资源。
2.4常用协议分析-HTTP 协议
- 还是筛选 TCP 协议因为 HTTP 是 TCP 的上层协议,所以我们过滤 TCP 的数据会包含 HTTP 协议的数据包
编辑
打开一个终端输入下面命
root@xuegod53:~# curl -I baidu.com
cur介绍
- 是一个在命令行下工作的文件传输工具,我们这里用来发送 http 请求
- -I 大写的 i 表示仅返回头部信息。
- 可以看到我们抓到了 TCP 的 3 次握手 4 次断开
第 4 个和第 6 个是我们的 HTTP 数据包
完整过程分析:
- 第一步:我们我们发送了一个 HTTP 的 HEAD 请求
- 第二步:服务器收到我们的请求返回了一个 Seq/ACK 进行确认
- 第三步:服务器将 HTTP 的头部信息返回给我们客户端 状态码为 200 表示页面正常
- 第四步:客户端收到服务器返回的头部信息向服务器发送 Seq/ACK 进行确认
- 发送完成之后客户端就会发送 FIN/ACK 来进行关闭链接的请求。
3.实战:WireShark 抓包解决服务器被黑上不了网
场景:服务器被黑上不了网,可以 ping 通网关,但是不能上网。
模拟场景
修改主机 TTL 值为 1,下面的方式是我们临时修改内核参数。
root@xuegod53:~# echo "1" > /proc/sys/net/ipv4/ip_default_ttl
拓展补充:
- TTL : 数据报文的生存周期。
- 默认 linux 操作系统值:64,每经过一个路由节点,TTL 值减 1。TTL 值为 0 时,说明目标地址不可达并返回:Time to live exceeded
- 作用: 防止数据包,无限制在公网中转发。
进行测试
root@xuegod53:~# ping 192.168.1.1 -c 1
编辑
root@xuegod53:~# ping xuegod.cn -c 1
编辑
- 可以看到提示我们 Time to live exceeded 这表示超过生存时间,
- 我们判断和目标之间经过多少个网络设备是根据目标返回给我们的 TTL 值来判断的,因为我们发送的数据包是看不到的。
实战抓包分析数据包
编辑
开启抓包,过滤 icmp 协议
root@xuegod53:~# ping xuegod.cn -c 1
然后回到 WireShark 中查看数据包
编辑
编辑
- 可以看到第一个包是发送了一个 ping 请求包 ttl=1
- 然后呢我们收到了 192.168.1.1 返回给我们的数据包告诉我们超过数据包生存时间,数据包被丢
如果把 TTL 值修改成 2 会有什么效果呢?
root@xuegod53:~# echo "2" > /proc/sys/net/ipv4/ip_default_ttl root@xuegod53:~# ping xuegod.cn -c 1
编辑
- 对比数据包发现返回我们数据包被丢弃的源地址变成了 123.115.0.1,这证明了数据包在网络中已经到达了下一个网络设备才被丢弃
- 由此我们还判断出我们的运营商网关地址为 123.115.0.1 但是我们并没有到达目标主机。
恢复系统内核参数
root@xuegod53:~# echo "64" > /proc/sys/net/ipv4/ip_default_ttl root@xuegod53:~# ping xuegod.cn -c 1
编辑
- 目标返回给我们的 TTL 值为 52,这表示我们的 TTL 值需要大于 64-52=12 才可以访问 xuegod.cn
- MTR 可以检测我们到达目标网络之间的所有网络设备的网络质量,
默认系统是没有安装 MTR 工具的我们手动安装一下
root@xuegod53:~# apt install -y mtr
示例:检测到达 xuegod.cn 所有节点的通信质量
root@xuegod53:~# mtr xuegod.cn
编辑