使用 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 选项用于在安装过程中自动对所有提示回答「是」。

安装过程中,系统会显示一个配置对话框,询问是否允许非超级用户捕获数据包。如果你希望运行 Wireshark 时不必始终使用管理员权限,允许非超级用户抓包会很有用。使用方向键选择「Yes」(或按 y),然后按 Enter 确认。

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

更改组所有权后,将执行权限限制为文件所有者和 wireshark 组。运行以下命令:

sudo chmod 750 /usr/bin/dumpcap

750 权限表示:root 所有者拥有完整权限,wireshark 组拥有读取和执行权限,其他用户没有任何权限。同时,这也确保不会启用 setuid 位。

接下来,仅授予 dumpcap 捕获数据包所需的 Linux 能力:

sudo setcap cap_net_raw,cap_net_admin=eip /usr/bin/dumpcap

这些能力允许 dumpcap 打开原始数据包套接字并管理抓包接口,而不必让整个程序以 root 身份运行。结合文件权限后,只有 root 用户和 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

最后,确认受限权限和抓包能力:

stat -c '%A %U %G' /usr/bin/dumpcap
-rwxr-x--- root wireshark
getcap /usr/bin/dumpcap
/usr/bin/dumpcap cap_net_admin,cap_net_raw=eip

现在,你的用户已经属于 wireshark 组,并且 dumpcap 仅拥有必需的能力。Wireshark 无需以 root 身份运行,也不会向所有本地用户开放抓包权限,就可以捕获数据包。

启动 Wireshark

在此步骤中,我们将启动 Wireshark,并熟悉它的初始界面。Wireshark 是一款功能强大的网络流量分析工具,并提供图形用户界面(GUI)。我们将通过这个界面操作软件并分析网络流量。

首先,确保你位于 LabEx 虚拟机的桌面环境中。进入正确位置后,你会看到带有图标和任务栏的桌面,任务栏通常位于屏幕顶部或底部。这就是我们开始使用 Wireshark 的工作环境。

启动 Wireshark 有两种方式,你可以选择最方便的一种:

  • 点击「应用程序」菜单,该菜单通常位于屏幕左上角。然后在菜单中找到「Internet」或「Network」类别。在相应类别中找到并选择「Wireshark」。这是通过图形界面启动程序的直接方式。

    应用程序菜单中的 Wireshark

  • 你也可以使用终端。打开终端窗口,然后输入以下命令:

    wireshark
    

    终端中的 Wireshark

该命令会通知系统启动 Wireshark 应用程序。执行后,Wireshark 将启动,其主窗口会显示在屏幕上。首先看到的是「Welcome to Wireshark」界面。该界面会列出可用于捕获网络流量的网络接口。如果你之前使用过 Wireshark 并保存过抓包文件,这里还会显示最近打开过的抓包文件。

Wireshark 启动界面

欢迎界面提供了几个重要选项:

  • 你可以从列表中选择网络接口。选择接口后,Wireshark 会立即开始从该网络接口捕获数据包。这是开始收集网络流量数据的方式。
  • 如果你之前保存过抓包文件,可以直接从此界面打开。这对于分析过去收集的数据非常有用。
  • 你还可以从此界面访问各种工具和设置。这些工具和设置可以帮助你自定义 Wireshark 的使用体验,并进行更高级的分析。

花一点时间探索这个初始界面。你会发现,每个网络接口旁边都显示了一些已检测到的数据包统计信息。这些统计数据可以帮助你快速判断哪些接口正在活跃地传输网络流量。

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

  • 菜单栏:位于窗口顶部,可以访问 Wireshark 提供的所有功能。你可以使用它保存抓包文件、更改设置以及访问帮助等。
  • 工具栏:提供常用功能的快捷入口。例如,你可以通过单击按钮开始或停止抓包、应用过滤器以及保存文件。
  • 接口列表:显示系统中所有可用的网络接口。你将在这里选择要用于捕获数据包的接口。
  • 显示过滤器栏:用于筛选主窗口中显示的数据包。你可以按照 IP 地址、协议或端口号等条件进行过滤,从而缩小感兴趣的数据包范围。下一步将详细介绍该过滤器的使用方法。

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

捕获和分析网络流量

在此步骤中,我们将捕获一些网络流量,并探索 Wireshark 的界面。对于关注网络安全或故障排查的用户来说,掌握网络数据包分析方法至关重要。完成本节后,你将了解如何开始抓包、熟悉 Wireshark 界面、生成网络流量、过滤数据包、检查数据包详细信息,以及停止抓包。

开始抓包

打开 Wireshark 后,你会看到欢迎界面。在该界面中,需要找到要用于捕获流量的网络接口。大多数情况下,我们会使用 eth0 接口。如果没有 eth0,可以选择其他处于活动状态的接口,例如 eth1wlan0

要开始捕获数据包,只需双击 eth0 接口。此操作会立即开始在该接口上抓包,并进入 Wireshark 的主抓包窗口。

你也可以先选择接口,然后点击工具栏中的「Start capturing packets」按钮,该按钮由蓝色鲨鱼鳍图标表示。开始抓包是分析网络流量的第一步,因为 Wireshark 需要先收集通过所选接口传输的数据。

了解 Wireshark 界面

开始抓包后,你会看到 Wireshark 的主界面。该界面分为三个主要窗格,每个窗格负责不同的功能。

Wireshark 主界面

  • 数据包列表窗格(顶部):显示 Wireshark 捕获的所有数据包。列表中的每一项都会提供数据包的基本信息,包括:

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

  • 数据包字节窗格(底部):以十六进制和 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 数据包。这些数据包就是我们接下来要分析的对象。

停止抓包

完成捕获数据包的分析后,需要停止抓包。点击工具栏中的「Stop capturing packets」按钮即可停止,该按钮由红色方块图标表示。你也可以打开「Capture」菜单,然后选择「Stop」。

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

过滤数据包

Wireshark 会捕获所选接口上的全部流量,因此数据量可能很快变得庞大,难以管理。过滤器是 Wireshark 中非常强大的工具,可以帮助你专注于特定类型的流量。

Wireshark 过滤器栏

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

icmp

输入过滤表达式后,按 Enter,或者点击过滤字段旁边的「Apply」按钮(右箭头图标)。数据包列表会更新,只显示 ICMP 数据包。你应该会看到与之前执行的 ping 命令相对应的「Echo (ping) request」和「Echo (ping) reply」消息对。过滤功能可以帮助你隔离感兴趣的流量,让分析过程更加易于管理。

检查数据包详细信息

筛选出 ICMP 数据包后,让我们仔细查看其中一个 ICMP 请求数据包。点击数据包列表中的某个 ICMP 请求数据包。在数据包详细信息窗格中,点击各个部分旁边的箭头,可以展开不同的协议层。

Wireshark 数据包详细信息

  • Frame:提供整个帧或数据包的信息,例如帧长度和帧校验序列。
  • Ethernet:包含第 2 层(数据链路层)信息,例如源 MAC 地址和目标 MAC 地址。
  • Internet Protocol Version 4:这是第 3 层(网络层)信息。展开此部分可以查看以下详细信息:
    • 源 IP 地址:发送数据包的设备的 IP 地址。
    • 目标 IP 地址:数据包要发送到的设备的 IP 地址。
    • 生存时间(TTL):用于限制数据包在网络中的生命周期的值。
    • 协议:IP 数据包内部使用的协议,本例中为 ICMP。
  • Internet Control Message Protocol:此部分显示 ICMP 协议信息。展开后,可以查看 ICMP 消息的具体细节,例如:
    • 类型(请求为 8,应答为 0):表示数据包是请求还是应答。
    • 代码:提供有关 ICMP 消息的附加信息。
    • 校验和:用于验证 ICMP 消息的完整性。
    • 标识符:帮助匹配请求和应答。
    • 序列号:ICMP 数据包使用的连续编号。

总结

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

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