1.工具简介
(1)定义
WireShark是一个网络封包分析软件。网络封包分析软件的功能是抓取网络封包,并尽可能显示出最为详细的网络封包资料。使用WinPACA作为接口,直接与网卡进行数据报文交换。
(2)嗅探器工作原理
收集:从网络线缆上收集原始二进制数据,一般通过选定网卡设置为混杂模式,然后抓取网段所有通信流量而不是发往它的数据包。
转换:将二进制转换成可读形式,以一种非常基础解析方法显示,而大部分分析工作留给用户。
分析:嗅探器以捕获网络数据作为输入,识别和验证它们的协议,然后开始分析每个协议的特定属性。
(3)使用技巧
①确定WireShark物理位置(在网络线路哪个节点上)。若没有正确位置,启动后会花很长时间捕获一些与自己无关的数据。
②选择捕获接口。一般是选择连接到Internet网络的接口,这样才可以捕获到与网络相关的数据。
③使用捕获过滤器。设置过滤器可以避免产生大量无关数据
④使用显示过滤器。进一步过滤分析。
⑤使用着色规则。通过使用显示过滤器过滤后的数据,都是有用的数据包。如果想更加突出的显示某个会话,可以使用着色规则高亮显示。
⑥构建图表。可视化分析
⑦重组数据。当传输较大文件时,需要将信息分布在多个数据包中。此时需要使用重组数据方法抓取完整数据。WireShark可以重组一个会话中不同数据包的信息,或者是重组一个完整的文件。
(4)使用场景——交换式环境
不同于集线器网络中广播传递,交换式网络捕获流量基本方法有:①端口镜像、②集线器接出(hubbing out)、③使用网络分流器、④ARP欺骗攻击。

2.功能使用
(1)混杂模式
①概述
接受所有经过网卡的数据包,包括不是发给本机的包,即不验证MAC地址。普通模式下网卡只接收发给本机的包(包括广播包)传递给上层程序,其他的包一律丢弃。
一般来说,混杂模式不会影响网卡的正常工作,多在网络监听工具上使用。
②开启和关闭

(2)过滤器应用
①筛选 TCP 的数据包

②筛选源地址是 192.168.1.53 或目的地址是 192.168.1.1

③查看源地址或目标地址均为192.168.1.53 → ip.addr==192.168.1.53
3.协议
(1)定义
又称网络语言,协议栈是一组协同工作的网络协议的逻辑组合。帮助我们定义如何路由数据包,如何发起连接,以及如何确认收到数据。协议共同问题:
发起连接:由客户端还是服务器发起?在真正通信前必须交换哪些信息?
协商连接参数:通信需要进行协议加密吗?加密密钥如何在通信双方之间传输?
数据格式:通信数据在数据包中如何排列?数据到达设备时以什么顺序处理?
错误检测与校正:当数据包花太长时间到达目的地如何处理?当客户端暂时无法和服务器建立通信连接,如何恢复?
连接终止:一台主机如何通知另一台主机通信结束?终止链接应该发送什么最终信息?
(2)ARP协议分析
定义:通过解析网络层IP地址来找寻数据链路层的MAC地址
①查看 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 地址

②ARP应答/第二个数据包内容
-
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 地址,目的地址和源地址做了替换

③ARP info内过程

192.168.1.53广播询问:谁有 192.168.1.1 的 MAC 地址?
192.168.1.1 单播应答:192.168.1.1 的 MAC 地址是 xxxxxxxxxxx
(3)ICMP协议分析
工作过程:
本机发送一个 ICMP Echo Request 的包
接受方返回一个 ICMP Echo Reply,包含了接受到数据拷贝和一些其他指令
①ICMP请求包

②ICMP响应包

(4)TCP协议分析——三次握手
①第一次握手,53209端口主动申请连接22端口(SYN)


②第二次握手,53209端口主动申请连接22端口(SYN+ACK)

SYN=1,ACK=1

表示回应第一个 SYN 数据包 134号帧。

③第三次握手,53209端口主动申请连接22端口(ACK)

ACK=1

表示回应第二个 SYN 数据包 135号帧

【可视化分析】
统计→流量图→过滤TCP类型

(5)TCP协议分析——四次挥手
过程解释:
第一次挥手:服务端发送一个[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 状态并关闭本端的会话接口,释放相应资源。

(6)HTTP协议分析(一次curl请求)
curl -I baidu.com

第一步:我们我们发送了一个HTTP 的 HEAD请求
第二步:服务器收到我们的请求返回了一个Seq/ACK进行确认
第三步:服务器将 HTTP 的头部信息返回给我们客户端 状态码为 200表示页面正常
第四步:客户端收到服务器返回的头部信息向服务器发送 Seq/ACK 进行确认
发送完成之后客户端就会发送 FIN/ACK 来进行关闭链接的请求。
(7)实战:WireShark 抓包解决服务器被黑上不了网
①场景:服务器被黑上不了网,可以 ping 通网关,但是不能上网
②模拟场景:修改主机 TTL 值为 1,下面的方式是我们临时修改内核参数。
root@xuegod53:~# echo "1" > /proc/sys/net/ipv4/ip_default_ttl
【TTL介绍】
TTL : 数据报文的生存周期。
默认 linux 操作系统值:64,每经过一个路由节点,TTL 值减 1。TTL 值为 0 时,说明目标地址不可达并返回:Time to live exceeded
作用:防止数据包,无限制在公网中转发。
ping 192.168.1.1 -c 1

ping xuegod.cn -c 1

我们判断和目标之间经过多少个网络设备是根据目标返回给我们的 TTL 值来判断的,因为我们发送的数据包是看不到的。
③数据包分析
开启抓包,过滤 icmp 协议:ping xuegod.cn -c 1

然后回到 WireShark 中查看数据包。我们可以看到第一个包是发送了一个 ping 请求包 ttl=1然后呢我们收到了 192.168.1.1 返回给我们的数据包告诉我们超过数据包生存时间,数据包被丢弃。
然后把 TTL 值修改成 2 观察效果:
echo "2" > /proc/sys/net/ipv4/ip_default_ttl
ping xuegod.cn -c 1
我们对比数据包发现返回我们数据包被丢弃的源地址变成了 112.103.140.1,这证明了数据包在网络中已经到达了下一个网络设备才被丢弃,由此我们还判断出我们的运营商网关地址为 112.103.140.1但是我们并没有到达目标主机。

现在恢复系统内核参数
echo "64" > /proc/sys/net/ipv4/ip_default_ttl
ping xuegod.cn -c 1
目标返回给我们的 TTL 值为 52,这表示我们的 TTL 值需要大于 64-52=12才可以访问 xuegod.cn

MTR 可以检测我们到达目标网络之间的所有网络设备的网络质量,首先安装MTR
apt install -y mtr
mtr xuegod.cn
检测到达 xuegod.cn 所有节点的通信质量,我们可以看到从我当前主机到目标主机之间经过 12 跳。

转载:https://blog.csdn.net/qq_35494772/article/details/128671450