网络流量分析——使用Wireshark进行分析

文章目录

Wireshark 是一款免费的开源网络流量分析器,与 tcpdump 非常相似,但拥有图形界面。Wireshark 支持多种平台,能够从多种接口类型(包括 WiFi、USB 和蓝牙)捕获实时数据,并将流量保存为多种格式。与其他工具相比,Wireshark 允许用户更深入地检查网络数据包。Wireshark 真正强大的地方在于其提供的分析功能,能够深入了解流量。

根据我们所使用的主机,我们可能并不总是拥有使用传统 Wireshark 的图形用户界面。幸运的是,有几种变体允许我们从命令行使用它。

使用要求

使用 Wireshark 需要满足以下条件:

Windows:

Linux:

定位Wireshark

bash 复制代码
Jackson310@htb[/htb]$ which wireshark

如果该包不存在,(通常可以在中找到/usr/sbin/wireshark)您可以使用以下命令安装它:

在 Linux 上安装 Wireshark

bash 复制代码
Jackson310@htb[/htb]$ sudo apt install wireshark 

TShark 与 Wireshark(终端与 GUI)

两种选择各有千秋。TShark 是一款基于 Wireshark 构建的专用终端工具。TShark 拥有许多与 Wireshark 相同的功能,甚至语法和选项也相同。

TShark 非常适合在桌面环境很少或没有桌面环境的机器上使用,并且可以轻松地通过命令行将捕获的信息传递给其他工具。 Wireshark 是一款功能丰富的 GUI 流量捕获和分析工具。如果您希望获得功能齐全的体验,并在具有桌面环境的机器上工作,Wireshark GUI 是您的最佳选择。

Basic TShark Switches

要查看您可以使用的开关的完整列表:

TShark 帮助

bash 复制代码
Jackson310@htb[/htb]$ tshark -h

TShark基本用法

TShark 可以使用协议过滤器、主机和端口等常见项目,甚至可以深入挖掘数据包并剖析数据包中的各个字段。

定位 TShark

bash 复制代码
Jackson310@htb[/htb]$ which tshark

Jackson310@htb[/htb]$ tshark -D

Jackson310@htb[/htb]$ tshark -i 1 -w /tmp/test.pcap

Capturing on 'Wi-Fi: en0'
484

利用上面命令行中的基本字符串,我们利用 TShark 在 en0 上进行捕获,并使用 -i 标志和 -w 选项将捕获内容保存到指定的输出文件。TShark 的使用方法与 TCPDump 非常相似,因为它们都使用过滤器和开关。这两个工具都使用 BPF 语法。要读取捕获内容,可以像 TCPDump 一样给 tshark 传递 -r 开关,或者传递 -P 开关,让 tshark 在写入文件的同时打印数据包摘要。下面是一个读取我们之前捕获的 PCAP 文件的示例。

选择接口并写入文件

bash 复制代码
Jackson310@htb[/htb]$ sudo tshark -i eth0 -w /tmp/test.pcap

应用过滤器

bash 复制代码
Jackson310@htb[/htb]$ sudo tshark -i eth0 -f "host 172.16.146.2"

Capturing on 'eth0'
    1 0.000000000 172.16.146.2 → 172.16.146.1 DNS 70 Standard query 0x0804 A github.com
    2 0.258861645 172.16.146.1 → 172.16.146.2 DNS 86 Standard query response 0x0804 A github.com A 140.82.113.4
    3 0.259866711 172.16.146.2 → 140.82.113.4 TCP 74 48256 → 443 [SYN] Seq=0 Win=64240 Len=0 MSS=1460 SACK_PERM=1 TSval=1321417850 TSecr=0 WS=128
    4 0.299681376 140.82.113.4 → 172.16.146.2 TCP 74 443 → 48256 [SYN, ACK] Seq=0 Ack=1 Win=65535 Len=0 MSS=1436 SACK_PERM=1 TSval=3885991869 TSecr=1321417850 WS=1024
    5 0.299771728 172.16.146.2 → 140.82.113.4 TCP 66 48256 → 443 [ACK] Seq=1 Ack=1 Win=64256 Len=0 TSval=1321417889 TSecr=3885991869
    6 0.306888828 172.16.146.2 → 140.82.113.4 TLSv1 579 Client Hello
    7 0.347570701 140.82.113.4 → 172.16.146.2 TLSv1.3 2785 Server Hello, Change Cipher Spec, Application Data, Application Data, Application Data, Application Data
    8 0.347653593 172.16.146.2 → 140.82.113.4 TCP 66 48256 → 443 [ACK] Seq=514 Ack=2720 Win=63488 Len=0 TSval=1321417937 TSecr=3885991916
    9 0.358887130 172.16.146.2 → 140.82.113.4 TLSv1.3 130 Change Cipher Spec, Application Data
   10 0.359781588 172.16.146.2 → 140.82.113.4 TLSv1.3 236 Application Data
   11 0.360037927 172.16.146.2 → 140.82.113.4 TLSv1.3 758 Application Data
   12 0.360482668 172.16.146.2 → 140.82.113.4 TLSv1.3 258 Application Data
   13 0.397331368 140.82.113.4 → 172.16.146.2 TLSv1.3 145 Application Data 

-f 允许我们对捕获的数据应用过滤器。在本例中,我们使用了 host,但您可以使用 Wireshark 识别的几乎任何过滤器。我们现在已经稍微了解了 TShark。让我们来看看一款名为 Termshark 的实用工具。

Termshark

Termshark 是一个基于文本的用户界面 (TUI) 应用程序,可在终端窗口中为用户提供类似 Wireshark 的界面。

您可以在 Termshark 找到它。您可以通过克隆代码库从源代码构建它,或者从 https://github.com/gcla/termshark/releases 下载一个当前的稳定版本,提取文件,然后即可开始使用。

如需此 TUI 的使用帮助,请参见下图。

Termshark Help

要启动 Termshark,请输入相同的字符串,就像 TShark 或 tcpdump 一样。我们可以从终端指定要捕获的接口、过滤器和其他设置。Termshark 窗口只有在其捕获过滤器检测到流量后才会打开。所以,如果没有任何反应,请稍等片刻。

Wireshark GUI 演练

既然我们已经学习了命令行抓包的技巧,现在来学习一下Wireshark。我们将花几分钟时间分析一下下面的输出结果。让我们来剖析一下Wireshark的图形用户界面(GUI)。

Wireshark 图形用户界面

三个主窗格:见上图

数据包列表:橙色

在此窗口中,我们可以看到每个数据包的摘要行,默认包含以下字段。我们可以添加或删除列来更改显示的信息。

  • Number - 数据包在 Wireshark 中的到达顺序
  • Time - Unix 时间格式
  • Source - 源 IP
  • Destination - 目标 IP
  • Protocol- 使用的协议(TCP、UDP、DNS 等)
  • Information- 有关数据包的信息。此字段会根据数据包中使用的协议类型而变化。例如,它会显示针对 DNS 数据包的查询类型。

数据包详细信息:蓝色

  • "数据包详细信息"窗口允许我们深入查看数据包,以更详细地检查协议。它会将数据包分解成我们期望的、符合典型 OSI 模型参考的块。数据包会被分解成不同的封装层进行检查。
  • 请记住,Wireshark 将以相反的顺序显示此封装,较低层的封装位于窗口顶部,较高层的封装位于底部。

数据包字节:绿色

  • "数据包字节"窗口允许我们以 ASCII 或十六进制输出形式查看数据包内容。当我们从上方的窗口中选择一个字段时,它将在"数据包字节"窗口中高亮显示,并显示该位或字节在整个数据包中的位置。
  • 这是一种验证"详细信息"窗格中显示内容是否准确以及 Wireshark 的解释是否与数据包输出相符的好方法。
  • 输出中的每一行都包含数据偏移量、16 个十六进制字节和 16 个 ASCII 字节。不可打印的字节在 ASCII 格式中将替换为句点。

其他显著特点

查看 Wireshark 界面时,我们会注意到几个不同的选项区域和圆形按钮。这些区域是控制点,我们可以在其中修改界面以及当前捕获数据包的视图。参见下图

Wireshark 菜单

在 Wireshark 中执行第一次捕获

使用 Wireshark 开始抓包非常简单。下面的动图展示了具体步骤。

请记住,每次我们更改捕获选项时,Wireshark 都会重新启动跟踪。与 TCPDump 类似,Wireshark 具有可用的捕获和显示过滤选项。

基础知识

工具栏

Wireshark 的工具栏是管理 Wireshark 众多功能的中心。在这里,我们可以启动和停止捕获、更改接口、打开和保存 .pcap 文件,以及应用不同的过滤器或分析插件。

如何保存捕获

捕获前和捕获后的处理和过滤

使用 Wireshark 捕获流量时,我们有几个关于如何以及何时过滤流量的选项。这可以通过使用捕获过滤器和显示过滤器来实现。前者在捕获开始之前启动,后者在捕获期间或之后启动 。虽然 Wireshark 拥有许多实用的内置功能,但值得一提的是,它在处理大量捕获数据时会遇到一些问题。捕获的数据包越多,Wireshark 运行显示或分析过滤器所需的时间就越长。即使能够完成,也可能需要几秒钟到几分钟的时间。如果我们处理的是大型 pcap 文件,最好先将其拆分成较小的块。

捕获过滤器

捕获过滤器 - 在开始捕获之前输入。这些过滤器使用 BPF 语法,例如 host 214.15.2.30,其格式与 TCPDump 类似。这样,过滤器选项会减少,并且捕获过滤器会丢弃所有未明确满足条件的流量。在排除连接故障(例如捕获两台主机之间的会话)时,这是一种减少写入磁盘数据量的好方法。

下表列出了常用且实用的捕获过滤器及其说明:

应用捕获过滤器

在应用捕获过滤器之前,我们先来了解一下内置的过滤器。操作方法:点击 Wireshark 窗口顶部的"捕获"图标 → 然后从下拉菜单中选择"捕获过滤器"。

在这里,我们可以修改现有的过滤器或添加我们自己的过滤器。

要将过滤器应用于捕获数据,我们将:点击 Wireshark 窗口顶部的捕获图标 → 然后从下拉菜单中选择"选项"→ 在新窗口中,选择"用于所选接口的捕获过滤器"下拉菜单,或输入我们想要使用的过滤器。如下图红色箭头所示。

显示过滤器

显示过滤器 - 在捕获运行期间和捕获停止后使用。显示过滤器是 Wireshark 专有的,它为几乎所有协议提供了许多不同的选项。

下表列出了常用且实用的显示过滤器及其说明:

请记住,使用显示过滤器时,流量会被处理以仅显示请求的内容,但捕获文件的其余部分不会被覆盖。应用显示过滤器和分析选项将导致 Wireshark 重新处理 pcap 数据以便应用。

应用显示过滤器

应用显示过滤器比捕获过滤器更简单。在 Wireshark 主捕获窗口中,我们只需:选择工具栏中的书签 → ,然后从下拉菜单中选择一个选项。或者,将光标放在文本框中 → ,然后输入我们要使用的过滤器。如果字段变为绿色,则表示过滤器正确。如下图所示。

使用捕获和显示过滤器时,请记住我们指定的是字面意思。例如,过滤端口 80 流量与过滤 HTTP 流量不同。端口和协议更像是指导方针,而不是严格的规则。端口可以绑定并用于与其最初预期用途不同的目的。例如,过滤 HTTP 流量会查找该协议使用的关键标记(例如 GET/POST 请求),并显示其结果。过滤端口 80 流量会显示通过该端口发送或接收的任何内容,无论传输协议是什么。

在下一节中,我们将使用 Wireshark 的一些更高级的功能。



之后我会持续更新,如果喜欢我的文章,请记得一键三连哦,点赞关注收藏,你的每一个赞每一份关注每一次收藏都将是我前进路上的无限动力 !!!↖(▔▽▔)↗感谢支持!

相关推荐
mit6.82410 小时前
[re_2] rpc|http|nginx|protobuf|
网络·c++
now_cn11 小时前
构建线上门户的核心三要素:域名、DNS与IP 全面解析
网络·网络协议·tcp/ip
无敌的牛12 小时前
网络通信IP细节
服务器·网络·tcp/ip
徐子元竟然被占了!!13 小时前
针对 “TCP 会话维持与身份验证” 的攻击
网络·网络协议·tcp/ip
007tg13 小时前
跨境电商账号风控核心:IP纯净度与浏览器指纹的防护策略
网络·网络协议·tcp/ip
智者知已应修善业13 小时前
【51单片机6位数码管显示矩阵键值至右向左自左向右】2022-11-29
c语言·经验分享·笔记·嵌入式硬件·51单片机
91刘仁德15 小时前
c++ 类和对象(上)
开发语言·c++·经验分享·笔记·算法
叁仟叁佰21 小时前
Shell脚本编程:函数、数组与正则表达式详解
运维·服务器·网络·chrome·正则表达式
何时出发?1 天前
TCP实现线程池竞争任务
网络·网络协议·tcp/ip