安装、配置并使用 Wireshark 分析网络流量

WiresharkBeginner
立即练习

简介

在本实验中,你将学习如何安装和配置 Wireshark,这是一款功能强大的网络协议分析器。它能够实时检查网络流量,这对于网络故障排查和安全调查至关重要。

通过本实验,你将掌握在系统上捕获和分析网络数据包的能力,并获得使用这一核心工具的实践经验。

安装 Wireshark

在这一步中,我们将在 Ubuntu 系统上安装 Wireshark。Wireshark 是一款功能强大的网络协议分析器,允许你捕获和分析网络流量。对于任何对网络安全和流量分析感兴趣的人来说,它都是一个至关重要的工具。好消息是,Ubuntu 软件仓库中提供了 Wireshark,这意味着我们可以使用 Ubuntu 提供的软件包管理系统轻松安装它。

首先,让我们更新软件包仓库信息。软件包仓库就像是你 Ubuntu 系统中所有可用软件的目录。通过更新它,我们可以确保能够获取到最新的软件版本。为此,我们需要打开终端。你可以通过点击任务栏中的终端图标或按下 Ctrl+Alt+T 来打开终端。终端打开后,输入以下命令:

sudo apt update

sudo 命令用于以管理员权限运行命令。apt 是 Ubuntu 中的软件包管理工具,update 是刷新软件包仓库信息的命令。运行此命令时,你应该会看到类似以下的输出:

Hit:1 http://archive.ubuntu.com/ubuntu jammy InRelease
Get:2 http://archive.ubuntu.com/ubuntu jammy-updates InRelease [119 kB]
Get:3 http://archive.ubuntu.com/ubuntu jammy-backports InRelease [108 kB]
Get:4 http://security.ubuntu.com/ubuntu jammy-security InRelease [110 kB]
Get:5 http://archive.ubuntu.com/ubuntu jammy-updates/main amd64 Packages [1,234 kB]
...
Reading package lists... Done

此输出表明系统正在从仓库中获取有关可用软件包的最新信息。

现在软件包仓库已更新,我们可以使用 apt 软件包管理器安装 Wireshark。在终端中运行以下命令:

sudo apt install wireshark -y

install 命令告诉 apt 安装指定的软件包,在本例中为 wireshark-y 选项用于在安装过程中自动对所有提示回答“yes”。

在安装过程中,会出现一个配置对话框,询问是否允许非超级用户捕获数据包。如果你希望在不总是使用管理员权限的情况下运行 Wireshark,允许非超级用户捕获数据包会很有用。使用箭头键选择「Yes」(或按 y),然后按回车键确认你的选择。

Wireshark 配置对话框

注意: 如果你错过了此提示或以后需要更改此设置,可以使用以下命令重新配置 Wireshark:

sudo dpkg-reconfigure wireshark-common

dpkg-reconfigure 命令用于重新配置已安装的软件包。

安装完成后,你应该会看到指示安装成功的输出。为了验证 Wireshark 是否安装正确,我们可以检查其版本。在终端中运行以下命令:

wireshark --version

此命令告诉 Wireshark 显示其版本信息。你应该会看到类似以下的输出:

Wireshark 3.6.2 (Git v3.6.2 packaged as 3.6.2-2)

Copyright 1998-2022 Gerald Combs <gerald@wireshark.org> and contributors.
License GPLv2+: GNU GPL version 2 or later <https://www.gnu.org/licenses/>
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

Compiled (64-bit) with Qt 5.15.3, with libpcap, with GLib 2.72.0, with zlib 1.2.11,
with SMI 0.4.8, with c-ares 1.18.1, with Lua 5.2.4, with GnuTLS 3.7.3 and PKCS #11
support, with Gcrypt 1.9.4, with MIT Kerberos, with MaxMind DB resolver,
with nghttp2 1.43.0, with brotli, with LZ4, with Zstandard, with Snappy,
with libxml2 2.9.13, with libssh 0.9.6, with NGHTTP3 0.7.0, with NGTCP2 0.8.0.

太棒了!Wireshark 现在已安装在你的系统上。

配置 Wireshark 捕获权限

在这一步中,我们将为 Wireshark 配置捕获网络数据包所需的权限。作为初学者,你可能想知道为什么要这样做。默认情况下,数据包捕获需要 root 权限。这是一种安全措施,因为捕获网络数据包可能会暴露敏感信息。然而,从安全角度来看,以 root 身份运行 Wireshark 并不是一个好主意。如果 Wireshark 存在漏洞,攻击者在它以 root 身份运行时可能会获得完整的系统访问权限。因此,我们将配置 Wireshark,允许你的普通用户账户安全地捕获数据包。

首先,我们需要检查系统上是否存在 wireshark 组。wireshark 组是一个特殊组,我们将使用它来管理数据包捕获的权限。要检查该组是否存在,我们将使用 getent 命令。getent 是一个从各种系统数据库(在本例中为组数据库)中检索条目的实用程序。在终端中运行以下命令:

getent group wireshark

如果没有输出,说明该组尚不存在,我们需要创建它。我们将使用 groupadd 命令来创建 wireshark 组。groupadd 命令用于在系统上创建新组。运行以下命令:

sudo groupadd wireshark

sudo 命令用于以管理员权限运行 groupadd 命令。如果你最近没有使用过 sudo,系统会提示你输入密码。

接下来,我们需要为数据包捕获二进制文件 (dumpcap) 提供正确的权限。dumpcap 是 Wireshark 实际捕获数据包的组件。我们将把 dumpcap 二进制文件的组所有权更改为 wireshark 组。这样,dumpcap 二进制文件将与 wireshark 组关联,我们可以通过该组管理其权限。运行以下命令:

sudo chgrp wireshark /usr/bin/dumpcap

chgrp 命令用于更改文件或目录的组所有权。在本例中,我们将 /usr/bin/dumpcap 二进制文件的组所有权更改为 wireshark 组。

更改组所有权后,我们将设置 dumpcap 二进制文件的必要权限。我们将使用 chmod 命令来设置权限。chmod 命令用于更改文件或目录的权限。运行以下命令:

sudo chmod 4755 /usr/bin/dumpcap

此命令在二进制文件上设置了 setuid 位。setuid 位允许二进制文件以所有者(root)的权限执行,无论运行它的人是谁。4755 权限可以分解如下:

  • 4 - 设置 setuid 位。这意味着当二进制文件被执行时,它将以所有者(root)的权限运行。
  • 7 - 所有者(root)拥有读、写和执行权限。这允许所有者读取、修改和运行该二进制文件。
  • 5 - 组拥有读和执行权限。这允许 wireshark 组的成员读取和运行该二进制文件。
  • 5 - 其他人拥有读和执行权限。这允许系统上的其他用户读取和运行该二进制文件。

最后,我们需要将当前用户添加到 wireshark 组。通过将我们的用户添加到 wireshark 组,我们的用户将拥有使用 dumpcap 二进制文件所需的权限。我们将使用 gpasswd 命令将用户添加到组中。gpasswd 命令用于管理 /etc/group 和 /etc/gshadow 文件。运行以下命令:

sudo gpasswd -a $USER wireshark

$USER 变量是一个 shell 变量,包含当前用户的用户名。你应该会看到指示用户已添加到组中的输出:

Adding user labex to group wireshark

为了使这些更改生效,你需要注销并重新登录,或者重启系统。但是,对于本实验,我们可以使用一种更简单的方法,即启动一个具有更新后组成员身份的新 shell。我们将使用 newgrp 命令启动一个激活了 wireshark 组的新 shell。newgrp 命令用于更改当前组 ID。运行以下命令:

newgrp wireshark

此命令启动了一个激活了 wireshark 组的新 shell,而无需完全注销。

让我们验证一下我们的用户现在是否属于 wireshark 组。我们将使用 groups 命令列出我们用户所属的所有组。运行以下命令:

groups

你应该会看到 wireshark 列在组中:

wireshark sudo ssl-cert labex public

现在我们的用户已成为 wireshark 组的一员,并且 dumpcap 二进制文件具有正确的权限,Wireshark 应该能够在不需要 root 权限的情况下捕获数据包了。

启动 Wireshark

在这一步中,我们将启动 Wireshark 并了解其初始界面。Wireshark 是一款功能强大的网络流量分析工具,并配有图形用户界面 (GUI)。我们将使用此 GUI 与软件进行交互并分析网络流量。

首先,你需要确保你处于 LabEx 虚拟机的桌面环境中。当你处于正确的位置时,你会看到一个带有图标的桌面,以及位于屏幕顶部或底部的任务栏。这是我们开始使用 Wireshark 的起点。

有两种启动 Wireshark 的方法。你可以选择最方便的方法:

  1. 点击“应用程序”菜单,它通常位于屏幕的左上角。然后,浏览菜单找到“互联网”或“网络”类别。进入相应的类别后,查找并选择“Wireshark”。这是使用图形界面启动程序的直接方法。

    应用程序菜单中的 Wireshark

  2. 或者,你可以使用终端。打开一个终端窗口,然后输入以下命令:

    wireshark
    

    终端中的 Wireshark

此命令告诉系统启动 Wireshark 应用程序。执行此命令后,Wireshark 将启动,其主窗口将出现在屏幕上。你首先看到的是“欢迎使用 Wireshark”屏幕。此屏幕显示了可用于捕获网络流量的可用网络接口列表。如果你以前使用过 Wireshark 并保存了一些文件,它还会显示一些最近打开的捕获文件。

Wireshark 启动屏幕

欢迎屏幕提供了几个重要的选项:

  1. 你可以从列表中选择一个网络接口。选择接口后,Wireshark 将立即开始从该网络捕获数据包。这就是你开始收集网络流量数据的方法。
  2. 如果你有以前保存的捕获文件,可以从该屏幕打开它。如果你想分析过去收集的数据,这很有用。
  3. 你还可以从该屏幕访问各种工具和设置。这些工具和设置将帮助你自定义 Wireshark 的使用体验并执行更高级的分析。

花点时间探索这个初始屏幕。你会注意到每个网络接口都有一些关于已检测到数据包的统计信息。这些统计信息让你快速了解哪些接口正在主动传输网络流量。

现在,让我们看看 Wireshark 的主要界面元素:

  • 菜单栏:窗口顶部的此栏让你能够访问 Wireshark 提供的所有功能。你可以使用它执行各种任务,例如保存捕获文件、更改设置和访问帮助。
  • 工具栏:工具栏提供了对常用功能的快速访问。例如,只需单击一下,即可开始和停止数据包捕获、应用过滤器以及保存文件。
  • 接口列表:此列表显示系统上所有可用的网络接口。你将使用此列表选择要从中捕获数据包的接口。
  • 显示过滤器栏:此栏允许你过滤主窗口中显示的数据包。你可以使用各种条件(如 IP 地址、协议或端口号)来缩小你感兴趣的数据包范围。我们将在下一步中探讨如何使用此过滤器。

现在,让 Wireshark 保持运行。在下一步中,我们将使用它来捕获和分析网络流量。

捕获和分析网络流量

在这一步中,我们将捕获一些网络流量并探索 Wireshark 界面。了解如何分析网络数据包对于任何对网络安全或故障排查感兴趣的人来说都至关重要。在本节结束时,你将知道如何开始捕获、理解 Wireshark 界面、生成流量、过滤数据包、检查数据包详细信息以及停止捕获。

开始捕获

当你打开 Wireshark 时,你会看到一个欢迎屏幕。在此屏幕上,你的目标是找到要从中捕获流量的网络接口。在大多数情况下,我们将使用 eth0 接口。如果 eth0 不可用,你可以选择另一个活动接口(例如 eth1wlan0)。

要开始捕获数据包,只需双击 eth0 接口。此操作将立即开始在该接口上捕获数据包,并将你带到 Wireshark 主捕获窗口。

或者,你可以先选择接口,然后点击工具栏中由蓝色鲨鱼鳍图标表示的“开始捕获数据包”按钮。开始捕获是分析网络流量的第一步,因为它允许 Wireshark 收集流经所选接口的数据。

理解 Wireshark 界面

数据包捕获开始后,你将看到 Wireshark 主界面。此界面分为三个主要窗格,每个窗格都有不同的用途。

Wireshark 主界面

  1. 数据包列表窗格(顶部):此窗格显示 Wireshark 已捕获的所有数据包列表。列表中的每个条目都提供有关数据包的基本信息,包括:

    • 数据包编号:捕获中每个数据包的唯一标识符。
    • 时间:捕获数据包的时间。
    • 源 IP 地址:发送数据包的设备的 IP 地址。
    • 目标 IP 地址:数据包旨在发送到的设备的 IP 地址。
    • 协议:数据包使用的网络协议,例如 TCP、UDP 或 ICMP。
    • 长度:数据包的大小(以字节为单位)。
    • 信息:数据包用途的简要说明,可以帮助你快速了解数据包正在执行的操作。
  2. 数据包详细信息窗格(中间):当你选择顶部窗格中的数据包时,此区域会以分层格式显示所选数据包的详细信息。你可以通过点击各部分旁边的箭头来展开它们,以查看有关数据包结构和内容的更深入详细信息。

  3. 数据包字节窗格(底部):此窗格以十六进制和 ASCII 格式显示原始数据包数据。当你选择“数据包详细信息”窗格中的不同字段时,相应的字节会在该窗格中突出显示。这使你可以查看数据包中正在传输的实际数据。

生成一些网络流量

为了有一些有意义的内容进行分析,我们需要生成一些网络流量。在 Wireshark 运行的同时,打开一个新的终端窗口。在终端中,我们将使用 ping 命令向 Google 的服务器发送一些 ICMP 回显请求数据包。

执行以下命令:

ping -c 5 google.com

注意:免费用户无法连接到互联网。升级到专业版以享受完整体验。

-c 5 选项告诉 ping 命令发送 5 个 ICMP 回显请求数据包。运行此命令后,你应该会看到类似以下的输出:

PING google.com (142.250.180.238) 56(84) bytes of data.
64 bytes from muc11s21-in-f14.1e100.net (142.250.180.238): icmp_seq=1 ttl=118 time=15.6 ms
64 bytes from muc11s21-in-f14.1e100.net (142.250.180.238): icmp_seq=2 ttl=118 time=16.5 ms
64 bytes from muc11s21-in-f14.1e100.net (142.250.180.238): icmp_seq=3 ttl=118 time=15.9 ms
64 bytes from muc11s21-in-f14.1e100.net (142.250.180.238): icmp_seq=4 ttl=118 time=16.2 ms
64 bytes from muc11s21-in-f14.1e100.net (142.250.180.238): icmp_seq=5 ttl=118 time=15.7 ms

--- google.com ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 4006ms
rtt min/avg/max/mdev = 15.629/15.986/16.520/0.324 ms

现在,回到 Wireshark。你应该会看到在执行 ping 命令期间捕获的 ICMP 数据包。这些数据包就是我们将用于进一步分析的内容。

停止捕获

当你完成对捕获数据包的分析后,需要停止捕获。为此,请点击工具栏中由红色方块表示的“停止捕获数据包”按钮。或者,你可以转到“捕获”菜单并选择“停止”。

你现在已经成功使用 Wireshark 捕获并分析了一些基本的网络流量!这是网络分析和安全领域的一项基本技能,你可以在此知识基础上分析更复杂的网络场景。

过滤数据包

Wireshark 会捕获所选接口上的所有流量,这很快就会产生大量数据,难以管理。过滤器是 Wireshark 中的一个强大工具,允许你专注于特定类型的流量。

Wireshark 过滤器栏

要过滤我们刚刚生成的 ICMP ping 数据包,请查看 Wireshark 窗口的顶部。有一个过滤器栏,你可以在其中输入过滤器表达式。在过滤器栏中输入以下内容:

icmp

输入过滤器表达式后,按回车键或点击过滤器字段旁边的“应用”按钮(右箭头图标)。数据包列表将更新,仅显示 ICMP 数据包。你应该会看到与我们之前运行的 ping 命令相对应的“Echo (ping) request”和“Echo (ping) reply”消息对。过滤有助于你隔离感兴趣的流量,并使分析过程更易于管理。

检查数据包详细信息

现在我们已经过滤了 ICMP 数据包,让我们仔细看看其中一个 ICMP 请求数据包。点击数据包列表中的一个 ICMP 请求数据包。在“数据包详细信息”窗格中,你可以通过点击每个部分旁边的箭头来展开不同的协议层。

Wireshark 数据包详细信息

  1. Frame(帧):此部分提供有关整个帧或数据包的信息,例如帧长度和帧校验序列。
  2. Ethernet(以太网):它包含第 2 层(数据链路层)信息,如源 MAC 地址和目标 MAC 地址。
  3. Internet Protocol Version 4(互联网协议第 4 版):这是第 3 层(网络层)信息。展开此部分可查看详细信息,例如:
    • 源 IP 地址:发送数据包的设备的 IP 地址。
    • 目标 IP 地址:数据包要发送到的设备的 IP 地址。
    • 生存时间 (TTL):限制数据包在网络中寿命的值。
    • 协议:IP 数据包内使用的协议,在本例中为 ICMP。
  4. Internet Control Message Protocol(互联网控制消息协议):此部分显示 ICMP 协议信息。展开它可查看 ICMP 消息特有的详细信息,例如:
    • 类型(8 为请求,0 为回复):指示数据包是请求还是回复。
    • 代码:提供有关 ICMP 消息的其他信息。
    • 校验和:用于验证 ICMP 消息的完整性。
    • 标识符:有助于匹配请求和回复。
    • 序列号:ICMP 数据包的顺序编号。

总结

在本实验中,你学习了如何安装和设置 Wireshark,这是一款功能强大的网络分析工具。你配置了非 root 用户安全捕获数据包的权限,启动了应用程序,并捕获了真实的网络流量。你还探索了界面,应用了针对特定流量类型的过滤器,并检查了跨不同协议层的数据包详细信息。

这些技能为网络分析和故障排查奠定了坚实的基础。使用 Wireshark,你现在可以检查网络通信、诊断连接问题、分析协议行为,并识别网络流量中的安全隐患。