wireshark使用

1、wireshark 与对应的 OSI 七层模型

1. 数据流包对应 OSI 中的信息

- 物理层: 主要的数据包中的帧信息,属于底层信息,这边有用的信息不多。主要有捕获时间、帧长度、序号;

  • 数据链路层: 这块主要是以太网的头部顿,我们比较关注的信息有目的 MAC 地址和网卡地址; 源 MAC 地址和网卡地址;
  • 网络层: 向传输层提供最基本的端到端的数据传送服务,主要包含源、目的 IP 信息,在这里我们关注的主要有源 IP 地址和目的 IP 地址;
  • 传输层: 传输层主要定义传输数据的协议端口号,以及流量控制和差错校验 (有 TCP 和 UDP 两种方式) 这边我们关注的有端口号。
    - 应用层: 主要用于规定各应用程序的数据格式,涉及到具体的应用信息,如 FTP 邮件等等信息都在这边的封包信息查找。

TCP 三次握手过程


SYN:建立连接
ACK:响应
PSH:表示有数据(data)的传输
RST:连接重置(一般出现在 FIN 后面)
FIN:关闭连接
一般当出现 FIN 包 RST 包时认为断开连接

过滤搜索

1. 过滤语法

过滤协议: tcp (过滤 TCP) udp (过滤 UDP) http (过滤 HTTP) ftp (过滤 FTP)
过滤 IP: ip, src == 地址 (源) ip. Dst == 地址 (目) ip. Addr == 地址 (双向)
过滤端口: cp. Srcport == 端口 (源) tcp. Dstport == 端口 (目) tcp. Port == 端口 (双向)
过滤 MAC: eth. Src == 网卡地址 (源) eth. Dst == 网卡地址 (目) eth. Addr == 网卡地址 (双向)
过滤包长: ip. Len == 值 tcp. Len == 值 frame. Len == 值 udp. Ength == 值
过滤 HTTP 请求: http. Request. Method== “GET” httprequest. Method== “POSThttp. Request. Uri== “/img/test. Gif"

2. 搜索功能

文件

1. 导出对象

1.1. 我要找图片选中 HTTP 格式


然后 save 保存

1.2. 上传小马(木马)文件


可以导出这种类型,. Php .jsp 等等

1.3. 导出邮件附件选择 IMF

统计功能

1. 捕获文件属性(经常考)



其中可以看到流量包文件的 md 5 值时间硬件操作系统应用等等


2. 协议分级



其中可以看到各种协议所以协议占比数量

3. Conversations (会话)


可以以 packets 数量排序

重点关注这几个 IP

4. HTTP


分组中可以看到 HTTP 响应数量以及各种响应代码数量

更改日期时间

Slow http 三种方式

HTTP慢速拒绝服务攻击(Slow HTTP Dos)_缓慢的http拒绝服务攻击-CSDN博客 (2023_10_13 21_44_29).html

1. Slow headers:

Web 应用在处理 HTTP 请求之前都要先接收完所有的 HTTP 头部,Web 服务器再没接收到2 个连续的\r\n 时,会认为客户端没有发送完头部,而持续的等等客户端发送数据,消耗服务器的连接和内存资源。

2. Slow body:

攻击者发送一个 HTTP POST 请求,该请求的Content-Length 头部值很大,使得 Web 服务器或代理认为客户端要发送很大的数据。服务器会保持连接准备接收数据,但攻击客户端每次只发送很少量的数据,使该连接一直保持存活,消耗服务器的连接和内存资源。

3. Slow read:

客户端与服务器建立连接并发送了一个 HTTP 请求,客户端发送完整的请求给服务器端,然后一直保持这个连接,以很低的速度读取 Response,比如很长一段时间客户端不读取任何数据,通过发送 Zero Window 到服务器,让服务器误以为客户端很忙,直到连接快超时前才读取一个字节,以消耗服务器的连接和内存资源。

例题

1. 统计协议数据包数量占比


直接过滤

2. 五、Wireshark 抓包示例

先介绍一个使用 wireshark 工具抓取 ping 命令操作的示例,可以上手操作感受一下抓包的具体过程。

1、打开 wireshark,主界面如下:

2、选择菜单栏上捕获 -> 选项,勾选 WLAN 网卡。这里需要根据各自电脑网卡使用情况选择,简单的办法可以看使用的 IP 对应的网卡。点击 Start,启动抓包。

3、wireshark 启动后,wireshark 处于抓包状态中。

4、执行需要抓包的操作,如在 cmd 窗口下执行 ping www.baidu.com。

5、操作完成后相关数据包就抓取到了,可以点击停止捕获分组按钮。

6、为避免其他无用的数据包影响分析,可以通过在过滤栏设置过滤条件进行数据包列表过滤,获取结果如下。说明:ip. Addr == 183.232.231.172 and icmp 表示只显示 ICPM 协议且主机 IP 为 183.232.231.172 的数据包。说明:协议名称 icmp 要小写。

7、wireshark 抓包完成,并把本次抓包或者分析的结果进行保存,就这么简单。关于 wireshark 显示过滤条件、抓包过滤条件、以及如何查看数据包中的详细内容在后面介绍。

3. 六、Wireshakr 抓包界面介绍

Wireshark 的主界面包含 6 个部分:

菜单栏:用于调试、配置

工具栏:常用功能的快捷方式

过滤栏:指定过滤条件,过滤数据包

数据包列表:核心区域,每一行就是一个数据包

数据包详情:数据包的详细数据

数据包字节:数据包对应的字节流,二进制

说明:数据包列表区中不同的协议使用了不同的颜色区分。协议颜色标识定位在菜单栏视图 --> 着色规则。如下所示

WireShark 主要分为这几个界面

3.1. Display Filter (显示过滤器)

用于设置过滤条件进行数据包列表过滤。菜单路径:分析 --> Display Filters。

3.2. Packet List Pane (数据包列表)

显示捕获到的数据包,每个数据包包含编号,时间戳,源地址,目标地址,协议,长度,以及数据包信息。不同协议的数据包使用了不同的颜色区分显示。

3.3. Packet Details Pane (数据包详细信息)

在数据包列表中选择指定数据包,在数据包详细信息中会显示数据包的所有详细信息内容。数据包详细信息面板是最重要的,用来查看协议中的每一个字段。各行信息分别为

(1)Frame:   物理层的数据帧概况

(2)Ethernet II: 数据链路层以太网帧头部信息

(3)Internet Protocol Version 4: 互联网层 IP 包头部信息

(4)Transmission Control Protocol:  传输层 T 的数据段头部信息,此处是 TCP

(5)Hypertext Transfer Protocol:  应用层的信息,此处是 HTTP 协议

TCP 包的具体内容

从下图可以看到 wireshark 捕获到的 TCP 包中的每个字段。

3.4. Dissector Pane (数据包字节区)

报文原始内容。

4. 七、Wireshark 过滤器设置

初学者使用 wireshark 时,将会得到大量的冗余数据包列表,以至于很难找到自己需要抓取的数据包部分。

Wireshark 工具中自带了两种类型的过滤器,学会使用这两种过滤器会帮助我们在大量的数据中迅速找到我们需要的信息。

4.1. 抓包过滤器

捕获过滤器的菜单栏路径为捕获 --> 捕获过滤器。用于在抓取数据包前设置。

如何使用呢?设置如下。

Ip host 183.232.231.172 表示只捕获主机 IP 为 183.232.231.172 的数据包。获取结果如下:

4.2. 显示过滤器

显示过滤器是用于在抓取数据包后设置过滤条件进行过滤数据包。

通常是在抓取数据包时设置条件相对宽泛或者没有设置导致抓取的数据包内容较多时使用显示过滤器设置条件过滤以方便分析。

同样上述场景,在捕获时未设置抓包过滤规则直接通过网卡进行抓取所有数据包。

观察上述获取的数据包列表,含有大量的无效数据。这时可以通过设置显示器过滤条件进行提取分析信息。Ip. Addr == 183.232.231.172,并进行过滤。

上述介绍了抓包过滤器和显示过滤器的基本使用方法。在组网不复杂或者流量不大情况下,使用显示器过滤器进行抓包后处理就可以满足我们使用。下面介绍一下两者间的语法以及它们的区别。

5. 八、wireshark 过滤器表达式的规则

5.1. 抓包过滤器语法和实例

抓包过滤器类型 Type(host、net、port)、方向 Dir(src、dst)、协议 Proto(ether、ip、tcp、udp、http、icmp、ftp 等)、逻辑运算符(&&与、|| 或、!非)
(1)协议过滤
比较简单,直接在抓包过滤框中直接输入协议名即可。
Tcp,只显示 TCP 协议的数据包列表
Http,只查看 HTTP 协议的数据包列表
Icmp,只显示 ICMP 协议的数据包列表
(2)IP 过滤
Host 192.168.1.104
Src host 192.168.1.104
Dst host 192.168.1.104
(3)端口过滤
Port 80
Src port 80
Dst port 80
(4)逻辑运算符&&与、|| 或、!非
Src host 192.168.1.104 &&dst port 80 抓取主机地址为 192.168.1.80、目的端口为 80 的数据包
Host 192.168.1.104 || host 192.168.1.102 抓取主机为 192.168.1.104 或者 192.168.1.102 的数据包
!broadcast 不抓取广播数据包

5.2. 显示过滤器语法和实例

(1)比较操作符
比较操作符有
== 等于、!= 不等于、> 大于、< 小于、>= 大于等于、<=小于等于
(2)协议过滤
比较简单,直接在 Filter 框中直接输入协议名即可。注意:协议名称需要输入小写。
Tcp,只显示 TCP 协议的数据包列表
Http,只查看 HTTP 协议的数据包列表
Icmp,只显示 ICMP 协议的数据包列表

(3) ip 过滤
Ip. Src == 112.53.42.42 显示源地址为 112.53.42.42 的数据包列表
Ip. Dst == 112.53.42.42, 显示目标地址为 112.53.42.42 的数据包列表
Ip. Addr == 112.53.42.42 显示源 IP 地址或目标 IP 地址为 112.53.42.42 的数据包列表

(4)端口过滤
Tcp. Port == 80,  显示源主机或者目的主机端口为 80 的数据包列表。
Tcp. Srcport == 80,  只显示 TCP 协议的源主机端口为 80 的数据包列表。
Tcp. Dstport == 80,只显示 TCP 协议的目的主机端口为 80 的数据包列表。

(5) http 模式过滤
Http. Request. Method == "GET",   只显示 HTTP GET 方法的。

(6)逻辑运算符为 and/or/not
过滤多个条件组合时,使用 and/or。比如获取 IP 地址为 192.168.0.104 的 ICMP 数据包表达式为 ip. Addr == 192.168.0.104 and icmp

(7)按照数据包内容过滤
假设我要以 ICMP 层中的内容进行过滤,可以单击选中界面中的码流,在下方进行选中数据。

右键单击选中后出现如下界面

选中后在过滤器中显示如下

后面条件表达式就需要自己填写。如下我想过滤出 data 数据包中包含"abcd"内容的数据流。关键词是 contains,完整条件表达式为 data contains "abcd"

看到这,基本上对 wireshak 有了初步了解。

5.3. 常见用显示过滤需求及其对应表达式

数据链路层:
筛选 mac 地址为 04:f9:38:ad:13:26的数据包
eth. Src == 04:f9:38:ad:13:26
筛选源 mac 地址为 04:f9:38:ad:13:26的数据包----
eth. Src == 04:f9:38:ad:13:26
网络层:
筛选 ip 地址为 192.168.1.1 的数据包
Ip. Addr == 192.168.1.1
Ip. Dst==
Ip. Src==
筛选 192.168.1.0 网段的数据
Ip contains "192.168.1"
传输层:
筛选端口为 80 的数据包
Tcp. Port == 80
筛选 12345 端口和 80 端口之间的数据包
Tcp. Port == 12345 &&tcp. Port == 80
筛选从 12345 端口到 80 端口的数据包
Tcp. Srcport == 12345 &&tcp. Dstport == 80
应用层:
特别说明: http 中 http. Request 表示请求头中的第一行(如 GET index. Jsp HTTP/1.1) http. Response 表示响应头中的第一行(如 HTTP/1.1 200 OK),其他头部都用 http. Header_name 形式。
筛选 url 中包含. Php 的 http 数据包
Http. Request. Uri contains ". Php"
筛选内容包含 username 的 http 数据包
Http contains "username"

6. 九、Wireshark 抓包分析 TCP 三次握手

6.1. TCP 三次握手连接建立过程

Step 1:客户端发送一个 SYN=1,ACK=0 标志的数据包给服务端,请求进行连接,这是第一次握手;

Step 2:服务端收到请求并且允许连接的话,就会发送一个 SYN=1,ACK=1 标志的数据包给发送端,告诉它,可以通讯了,并且让客户端发送一个确认数据包,这是第二次握手;

Step 3:服务端发送一个 SYN=0,ACK=1 的数据包给客户端端,告诉它连接已被确认,这就是第三次握手。TCP 连接建立,开始通讯。

6.2. Wireshark 抓包获取访问指定服务端数据包

Step 1:启动 wireshark 抓包,打开浏览器输入www.baidu.com。

Step 2:使用 ping www.baidu.com获取IP。

Step 3:输入过滤条件获取待分析数据包列表 ip. Addr == 183.232.231.172

图中可以看到 wireshark 截获到了三次握手的三个数据包。第四个包才是 HTTPS 的,这说明 HTTPS 的确是使用 TCP 建立连接的。

第一次握手数据包

客户端发送一个 TCP,标志位为 SYN,序列号为 0,代表客户端请求建立连接。

数据包的关键属性如下:

SYN :标志位,表示请求建立连接

Seq = 0 :初始建立连接值为 0,数据包的相对序列号从 0 开始,表示当前还没有发送数据

Ack =0:初始建立连接值为 0,已经收到包的数量,表示当前没有接收到数据

第二次握手的数据包

服务器发回确认包, 标志位为 SYN,ACK。将确认序号 (Acknowledgement Number) 字段+1,即 0+1=1。

数据包的关键属性如下:

[SYN + ACK]: 标志位,同意建立连接,并回送 SYN+ACK

Seq = 0 :初始建立值为 0,表示当前还没有发送数据

Ack = 1:表示当前端成功接收的数据位数,虽然客户端没有发送任何有效数据,确认号还是被加 1,因为包含 SYN 或 FIN 标志位。(并不会对有效数据的计数产生影响,因为含有 SYN 或 FIN 标志位的包并不携带有效数据)

第三次握手的数据包

客户端再次发送确认包 (ACK) SYN 标志位为 0,ACK 标志位为 1。并且把服务器发来 ACK 的序号字段+1,放在确定字段中发送给对方,并且在 Flag 段写 ACK 的+1:

数据包的关键属性如下:

ACK :标志位,表示已经收到记录

Seq = 1 :表示当前已经发送 1 个数据

Ack = 1 : 表示当前端成功接收的数据位数,虽然服务端没有发送任何有效数据,确认号还是被加 1,因为包含 SYN 或 FIN 标志位(并不会对有效数据的计数产生影响,因为含有 SYN 或 FIN 标志位的包并不携带有效数据)。

就这样通过了 TCP 三次握手,建立了连接。开始进行数据交互

7. 十、Wireshark 分析常用操作

调整数据包列表中时间戳显示格式。调整方法为视图 -->时间显示格式 --> 日期和时间。调整后格式如下:

一般 Wireshark 软件也可以与各主流厂家的模拟器一起使用,更适合于项目准确配置。