在 Wireshark 中过滤流量

Beginner
立即练习

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

简介

在本次实验中,你将学习如何使用 Wireshark 过滤网络流量,Wireshark 是进行网络分析和网络安全调查的重要工具。你将练习捕获实时数据包、应用显示过滤器来隔离特定流量,并导出过滤后的结果以进行进一步检查。

本次实验将让你亲身体验 Wireshark 的核心功能,从接口选择到流量分析。这些技能将帮助你识别网络模式、解决连接问题,并检测网络通信中潜在的安全威胁。


Skills Graph

安装 Wireshark

在这一步中,你将安装 Wireshark,它是一款强大的网络协议分析器,可让你实时检查网络流量。你可以把它想象成网络通信的显微镜——它能捕获通过你网络传输的数据包,并以可读的格式显示出来。

在开始之前,了解 Wireshark 需要特殊权限才能捕获网络数据这一点很重要。这就是为什么我们要仔细配置它,使其能在你的 LabEx 虚拟机(VM)上正常工作。

  1. 首先,我们需要更新软件包列表。这能确保你的系统了解最新可用的软件版本:

    sudo apt update
  2. 现在使用以下命令安装 Wireshark。-y 标志会自动确认安装:

    sudo apt install -y wireshark
  3. 在安装过程中,Wireshark 会询问关于非超级用户访问的问题。我们使用 debconf(Debian 配置系统)提前进行配置,以允许普通用户捕获数据包:

    echo "wireshark-common wireshark-common/install-setuid boolean true" | sudo debconf-set-selections
  4. 接下来,我们将你的用户添加到 'wireshark' 组。这样无需 root 访问权限就能授予必要的权限:

    sudo usermod -aG wireshark $USER
  5. 让我们通过检查版本来验证安装是否成功。这可以确认 Wireshark 已正确安装:

    wireshark --version

    你应该会看到类似以下的输出:

    Wireshark 3.6.8 (Git v3.6.8 packaged as 3.6.8-1~ubuntu20.04.0)
  6. 组权限的更改需要新的登录会话才能生效。在常规系统中,你需要注销并重新登录,但在 LabEx 中,只需打开一个新的终端标签页,更改就会生效。

请记住,这些配置步骤至关重要,因为像 Wireshark 这样的网络监控工具需要特殊权限才能访问网络接口,但我们希望在不总是需要 root 访问权限的情况下安全地使用它们。

选择网络接口

在这一步中,你将学习如何在 Wireshark 中识别并选择用于数据包捕获的网络接口。网络接口是计算机与网络之间的连接点。你可以将它们想象成网络流量进出计算机的“门”。每个接口都有唯一的名称和特性,这些决定了它能够捕获哪种类型的流量。

  1. 首先,让我们使用 Wireshark 的内置命令列出系统上所有可用的网络接口。这能帮助你在选择之前查看所有可能的捕获点:

    wireshark -D

    你应该会看到类似以下的输出:

    1. eth0
    2. any (Pseudo-device that captures on all interfaces)
    3. lo (Loopback)

    输出显示了带有编号的接口名称。'eth0' 通常是你的物理以太网端口,而 'lo' 用于内部回环流量。

  2. 若要获取更详细的接口信息,我们可以使用 Linux 的 ip 命令。它不仅会显示接口名称,还会显示它们当前的运行状态:

    ip link show

    这将显示所有网络接口及其当前状态(UP/DOWN)。接口必须处于 UP 状态才能捕获流量。

  3. 在我们的实验环境中,我们将使用 eth0 接口,它通常是 Linux 系统中的主要以太网接口。在使用之前,让我们验证其状态以确保它处于活动状态:

    ip link show eth0

    在输出中查找 "state UP" 以确认接口处于活动状态。如果显示为 DOWN,你需要在继续操作之前排查连接问题。

  4. 现在,让我们使用 Wireshark 的终端版本(tshark)测试在该接口上捕获数据包。这个快速测试有助于在使用完整的图形用户界面(GUI)之前验证一切是否正常工作:

    sudo tshark -i eth0 -c 5

    此命令从 eth0 接口捕获 5 个数据包(-i 指定接口,-c 设置数据包数量),并在终端中显示它们。需要使用 sudo,因为数据包捕获需要 root 权限。

  5. 要以 GUI 模式启动 Wireshark(我们将在后续步骤中使用它进行更高级的过滤):

    wireshark &

    在 Wireshark 的 GUI 中,你会在主窗口中看到可用接口的列表。符号 & 会让 Wireshark 在后台运行,这样你就可以继续使用终端。

捕获实时流量

在这一步中,你将学习如何使用 Wireshark 捕获实时网络流量。数据包捕获是拦截并记录网络流量的过程,它能让你实时分析网络通信情况。这对于网络故障排查和安全分析至关重要。

  1. 首先,从终端以图形用户界面(GUI)模式启动 Wireshark。& 符号会让命令在后台运行,这样你就可以继续使用终端:

    wireshark &
  2. 当 Wireshark 打开后,你会看到一个可用网络接口的列表。这些接口代表了你机器上的物理和虚拟网络连接。通过双击选择 eth0(我们在上一步中确定的接口),它通常是你的主要以太网接口。

  3. Wireshark 会立即开始捕获该接口上的所有网络流量。主窗口将数据包分为三个部分显示:数据包列表(摘要)、数据包详细信息(协议解析)和数据包字节(十六进制原始数据)。数据包在被捕获时会实时显示。

  4. 为了生成一些用于捕获的测试流量,打开一个新的终端并运行一个简单的 ping 命令。这会向谷歌的 DNS 服务器(8.8.8.8)发送 ICMP 回显请求:

    ping -c 4 8.8.8.8
  5. 在 Wireshark 中,你现在应该能看到捕获到的 ICMP 数据包。这些数据包代表了你的 ping 请求和响应。每一行数据包都显示了重要的元数据:

    • 数据包编号(捕获顺序)
    • 时间戳(捕获时间)
    • 源 IP 地址和目标 IP 地址
    • 协议(在这种情况下是 ICMP)
    • 数据包长度(以字节为单位)
    • 关于数据包内容的简要信息
  6. 当你完成捕获后,点击工具栏中的红色方形“停止”按钮。这会冻结显示内容,以便你检查捕获到的数据包。

  7. 若要保存捕获的内容以便后续分析:

    • 点击“文件”→“另存为”
    • 将文件命名为 ping_capture.pcapng(.pcapng 是 Wireshark 的捕获文件格式)
    • 将其保存到你的 ~/project 目录中,以便于访问
  8. 对于命令行捕获(适用于自动化操作或远程系统),你可以使用 Wireshark 的命令行版本 tshark。以下命令从 eth0 接口精确捕获 10 个数据包并保存它们:

    sudo tshark -i eth0 -w ~/project/cli_capture.pcap -c 10

    -w 标志指定输出文件,-c 限制捕获的数据包数量。

应用显示过滤器

在这一步中,你将学习如何使用 Wireshark 的显示过滤器来聚焦特定的网络流量。显示过滤器通过仅显示符合你指定条件的数据包,帮助你分析捕获的数据包。你可以将它们想象成搜索词,让你在数千个数据包中快速找到你感兴趣的特定网络会话。

  1. 首先,在 Wireshark 中打开你之前保存的捕获文件:

    wireshark ~/project/ping_capture.pcapng &

    此命令在后台(&)打开 Wireshark 并加载你保存的数据包捕获文件。.pcapng 文件包含了你之前记录的所有网络流量。

  2. 若要过滤出 ICMP 流量(ping 数据包),在顶部的过滤器栏中输入以下内容:

    icmp

    按下回车键,你将在显示窗口中仅看到 ICMP 数据包。ICMP 是 ping 命令使用的协议,因此这个过滤器可帮助你从其他流量中分离出与 ping 相关的网络活动。

  3. 若要过滤与特定 IP 地址(如 8.8.8.8)之间的流量:

    ip.addr == 8.8.8.8

    这个过滤器会显示所有源 IP 地址或目标 IP 地址为 8.8.8.8 的数据包。在 Wireshark 过滤器中,双等号(==)用于精确匹配。

  4. 使用逻辑运算符组合过滤器:

    icmp && ip.addr == 8.8.8.8

    这将仅显示涉及 8.8.8.8 的 ICMP 数据包。&& 运算符表示“与”,因此一个数据包必须同时满足这两个条件才会被显示出来。

  5. 其他一些有用的过滤器:

    • HTTP 流量:http(显示网页浏览活动)
    • DNS 查询:dns(显示域名查找)
    • 来自特定源的流量:ip.src == 192.168.1.1(显示源自该 IP 地址的数据包)
    • 发往特定目标的流量:ip.dst == 8.8.8.8(显示发往该 IP 地址的数据包)
  6. 若要保存过滤后的视图:

    • 点击“文件”→“导出指定数据包”
    • 选择“显示的”,并将其保存为 filtered_ping.pcapng,保存路径为 ~/project

    这将创建一个新的捕获文件,其中仅包含过滤后的数据包,这对于共享特定的流量模式或进行进一步分析非常有用。

  7. 若要进行命令行过滤(使用 tshark):

    tshark -r ~/project/ping_capture.pcapng -Y "icmp" -w ~/project/tshark_filtered.pcap

    这种替代方法使用 Wireshark 的命令行版本(tshark)来过滤和保存数据包,而无需打开图形界面。-Y 标志用于指定过滤表达式,类似于你在 Wireshark GUI 中使用的方式。

导出过滤后的数据

在这一步中,你将学习如何以不同格式从 Wireshark 导出过滤后的数据包数据,用于分析和报告。导出数据能让你与同事分享你的发现,或将数据导入其他分析工具。

  1. 首先,在 Wireshark 中打开你过滤后的捕获文件。这里假设你已经在前面的步骤中完成了数据包的捕获和过滤:

    wireshark ~/project/filtered_ping.pcapng &
  2. 若要以 Wireshark 的原生格式导出所有显示的数据包(应用过滤后):

    • 点击菜单栏中的“文件”→“导出指定数据包”
    • 确保选择“显示的”,以仅导出符合当前过滤器的数据包
    • 将其保存为 exported_packets.pcapng,保存路径为 ~/project,以便后续分析
  3. Wireshark 的命令行工具 tshark 可让你以各种格式导出数据。以下是常见的示例:

    • 若要导出为 CSV 格式(适用于电子表格分析):

      tshark -r ~/project/filtered_ping.pcapng -T fields -e frame.number -e ip.src -e ip.dst -E header=y -E separator=, > ~/project/packet_data.csv

      这将导出带有列标题的数据包编号、源 IP 地址和目标 IP 地址。

    • 若要导出为详细的纯文本输出:

      tshark -r ~/project/filtered_ping.pcapng -V > ~/project/packet_details.txt

      这将显示完整的数据包详细信息,类似于 Wireshark 界面中的显示。

  4. JSON 格式适用于编程分析。将所有数据包数据导出为 JSON 格式:

    tshark -r ~/project/filtered_ping.pcapng -T json > ~/project/packets.json
  5. 导出后,通过列出文件来验证所有文件是否正确创建:

    ls -lh ~/project/*.pcapng ~/project/*.csv ~/project/*.txt ~/project/*.json
  6. 若要快速检查导出到 PCAPNG 文件中的数据包数量:

    capinfos ~/project/exported_packets.pcapng | grep "Number of packets"

    这将通过显示数据包数量来确认你的过滤器是否按预期工作。

总结

在本次实验中,你通过实际操作学习了如何使用 Wireshark 过滤网络流量。关键步骤包括安装 Wireshark、配置用户权限、识别网络接口,以及在 eth0 接口上捕获实时流量。

你还练习了应用显示过滤器来分析特定数据包,并导出过滤后的数据。这些技能为你利用 Wireshark 强大的过滤功能进行高效的网络流量分析奠定了基础。