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

WiresharkWiresharkBeginner
立即练习

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

介绍

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

在本实验(lab)结束时,你将能够捕获和分析系统上的网络数据包,从而获得使用这个重要工具的实践经验。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL wireshark(("Wireshark")) -.-> wireshark/WiresharkGroup(["Wireshark"]) wireshark/WiresharkGroup -.-> wireshark/installation("Installation and Setup") wireshark/WiresharkGroup -.-> wireshark/interface("Interface Overview") wireshark/WiresharkGroup -.-> wireshark/packet_capture("Packet Capture") wireshark/WiresharkGroup -.-> wireshark/packet_analysis("Packet Analysis") wireshark/WiresharkGroup -.-> wireshark/commandline_usage("Command Line Usage") subgraph Lab Skills wireshark/installation -.-> lab-415947{{"使用 Wireshark 安装、配置和分析网络流量"}} wireshark/interface -.-> lab-415947{{"使用 Wireshark 安装、配置和分析网络流量"}} wireshark/packet_capture -.-> lab-415947{{"使用 Wireshark 安装、配置和分析网络流量"}} wireshark/packet_analysis -.-> lab-415947{{"使用 Wireshark 安装、配置和分析网络流量"}} wireshark/commandline_usage -.-> lab-415947{{"使用 Wireshark 安装、配置和分析网络流量"}} end

安装 Wireshark

在这一步中,我们将在我们的 Ubuntu 系统上安装 Wireshark。Wireshark 是一个强大的网络协议分析器,允许你捕获和分析网络流量。对于任何对网络安全和流量分析感兴趣的人来说,它都是一个至关重要的工具。好消息是 Wireshark 在 Ubuntu 软件仓库中可用,这意味着我们可以使用 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),然后按 Enter 键确认你的选择。

Wireshark Configuration Dialog

注意: 如果你错过了此提示或以后需要更改此设置,则可以使用以下命令重新配置 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 组。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 位(设置用户 ID 位)。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

为了使这些更改生效,你需要注销并重新登录,或重新启动系统。但是,对于这个实验(lab),我们可以使用一种更简单的方法,即启动一个具有更新的组成员身份的新 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 VM 的桌面环境中。当你处于正确的位置时,你将看到一个桌面,其中包含图标和一个任务栏,该任务栏位于屏幕的顶部或底部。这是我们将开始使用 Wireshark 的起点。

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

  1. 单击“Applications”菜单,该菜单通常位于屏幕的左上角。然后,浏览菜单以找到“Internet”或“Network”类别。进入相应的类别后,查找并选择“Wireshark”。这是使用图形界面启动程序的简单方法。

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

    wireshark
    Wireshark in Terminal

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

Wireshark Start Screen

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

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

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

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

  • 菜单栏(Menu bar):窗口顶部的此栏使你可以访问 Wireshark 提供的所有功能。你可以使用它来执行各种任务,例如保存捕获文件、更改设置和访问帮助。
  • 工具栏(Toolbar):工具栏提供对常用功能的快速访问。例如,你可以通过单击一下来启动和停止数据包捕获、应用过滤器和保存文件。
  • 接口列表(Interface list):此列表显示系统上所有可用的网络接口。你将使用此列表选择要从中捕获数据包的接口。
  • 显示过滤器栏(Display filter bar):此栏允许你过滤主窗口中显示的数据包。你可以使用各种条件(例如 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

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

-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

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

检查数据包详细信息

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

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

总结

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

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