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 跳。