应用 Wireshark 捕获过滤器进行网络流量分析

WiresharkWiresharkBeginner
立即练习

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

简介

在本次实验中,你将学习如何利用 Wireshark 捕获过滤器(Capture Filter)根据特定条件选择性地捕获网络流量。捕获过滤器是强大的工具,能让你专注于相关数据,排除无关流量,从而使分析工作更高效。

你将探索不同的捕获过滤器表达式,并将其应用于实际场景。这种实践经验将提升你在网络故障排除和安全分析方面的技能。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL wireshark(("Wireshark")) -.-> wireshark/WiresharkGroup(["Wireshark"]) wireshark/WiresharkGroup -.-> wireshark/packet_capture("Packet Capture") wireshark/WiresharkGroup -.-> wireshark/display_filters("Display Filters") wireshark/WiresharkGroup -.-> wireshark/capture_filters("Capture Filters") wireshark/WiresharkGroup -.-> wireshark/packet_analysis("Packet Analysis") wireshark/WiresharkGroup -.-> wireshark/commandline_usage("Command Line Usage") subgraph Lab Skills wireshark/packet_capture -.-> lab-415940{{"应用 Wireshark 捕获过滤器进行网络流量分析"}} wireshark/display_filters -.-> lab-415940{{"应用 Wireshark 捕获过滤器进行网络流量分析"}} wireshark/capture_filters -.-> lab-415940{{"应用 Wireshark 捕获过滤器进行网络流量分析"}} wireshark/packet_analysis -.-> lab-415940{{"应用 Wireshark 捕获过滤器进行网络流量分析"}} wireshark/commandline_usage -.-> lab-415940{{"应用 Wireshark 捕获过滤器进行网络流量分析"}} end

理解捕获过滤器的语法

在网络分析领域,处理大量数据可能会让人应接不暇。这时,Wireshark 中的捕获过滤器就派上用场了。捕获过滤器能让你只收集符合特定条件的数据包,这能显著减少你需要分析的数据量。需要注意的是,捕获过滤器与显示过滤器(Display Filter)不同。显示过滤器用于过滤已经捕获的数据包,而捕获过滤器则在数据包捕获过程中发挥作用。

什么是捕获过滤器

捕获过滤器使用伯克利数据包过滤器(Berkeley Packet Filter,BPF)语法。BPF 是一种专门设计的语言,用于在网络数据包被 Wireshark 等应用程序处理之前对其进行过滤。通过应用这些过滤器,你可以实现以下几个重要目标:

  • 减少捕获的数据量:你可以专注于相关部分,而不是捕获所有网络流量,这样可以节省存储空间和处理能力。
  • 关注特定类型的流量:你可以针对特定类型的网络活动,如 HTTP 请求或 SSH 连接。
  • 提高数据包捕获时的性能:处理的数据量减少,数据包捕获过程会变得更快、更高效。
  • 简化后续分析:当你拥有一个更小且更相关的数据集时,分析和得出结论会容易得多。

基本捕获过滤器语法

Wireshark 中的捕获过滤器使用基于 libpcap 过滤语言的特定语法。让我们来看看一些常见的元素:

  • host:此元素根据 IP 地址或主机名过滤流量。例如,如果你使用过滤器 host 192.168.0.2,Wireshark 将捕获所有与指定 IP 地址之间的流量。
  • net:它根据网络地址和子网掩码过滤流量。例如,过滤器 net 10.0.0.0/24 将捕获来自 10.0.0.0/24 网络的流量。
  • port:此元素根据端口号过滤流量。例如,port 80 用于捕获 HTTP 流量,因为 HTTP 通常使用端口 80。
  • protocol:它根据协议过滤流量。例如,tcp 将捕获所有 TCP 流量,udp 将捕获所有 UDP 流量。

你可以使用逻辑运算符组合这些元素:

  • and&&:使用此运算符时,只有两个条件都为真时,数据包才会被捕获。
  • or||:使用此运算符时,只要其中一个条件为真,数据包就会被捕获。
  • not!:此运算符用于取反条件。因此,如果你使用 not tcp,它将捕获所有非 TCP 流量。

让我们用一个简单的过滤器进行实践

现在,让我们将所学知识付诸实践。按照以下步骤打开 Wireshark 并应用一个基本的捕获过滤器:

  1. 首先,你需要打开一个终端。你可以通过点击桌面任务栏上的终端图标,或者按下 Ctrl+Alt+T 来打开它。

  2. 终端打开后,输入以下命令启动 Wireshark:

    wireshark
  3. Wireshark 打开后,你会看到主启动屏幕。此屏幕显示了你系统上所有可用的网络接口。

  4. 在 Wireshark 窗口顶部找到“Capture Filter:”输入框。你将在此处输入捕获过滤器。

    Wireshark 捕获过滤器语法
  5. 在过滤器框中输入 tcp。这样做是告诉 Wireshark 只捕获 TCP 数据包。

  6. 从接口列表中选择标记为 any 的接口。选择 any 意味着 Wireshark 将在所有网络接口上捕获数据包。

  7. 点击蓝色的鲨鱼鳍 Start 按钮。这将启动应用了过滤器的数据包捕获过程。

    捕获过滤器
  8. 让 Wireshark 运行大约 10 - 15 秒。在此期间,它将捕获一些 TCP 数据包。你应该会开始在主窗口中看到数据包出现。

  9. 要停止捕获,点击工具栏中的红色正方形 Stop 按钮。

  10. 现在,你需要保存捕获的数据包以便后续分析。点击菜单栏中的 File > Save As

  11. 在文件保存对话框中,导航到目录 /home/labex/project

  12. 输入 step1.pcapng 作为文件名,然后点击 Save

    保存捕获的数据包

你现在已经成功应用了一个基本的捕获过滤器,只收集 TCP 数据包,并保存了结果以供后续分析。

应用捕获过滤器捕获特定流量

在这一步中,我们将专注于捕获特定的网络流量。具体来说,你将学习如何应用更具体的捕获过滤器来捕获端口 80 上的 HTTP 流量。端口 80 上的 HTTP 流量在互联网上非常常见,因为它用于未加密的 Web 通信。设置好过滤器后,你将使用一个脚本来生成一些测试流量。这将帮助你了解该过滤器在实际场景中的工作方式。

使用特定过滤器创建新的捕获会话

首先,让我们使用针对端口 80 的过滤器设置一个新的捕获会话。在开始新的捕获之前,我们需要确保没有之前的捕获会话处于打开状态。

  1. 如果你仍然打开着之前的捕获会话,请通过点击 File > Close 或点击数据包列表右上角的 Close this capture file 按钮(X)来关闭它。这一步很重要,因为同时打开多个捕获会话可能会造成混淆,并可能影响新捕获会话的准确性。

    关闭此捕获文件
  2. 关闭之前的捕获会话后,你现在应该会看到 Wireshark 欢迎屏幕,显示可用的网络接口。你将在此屏幕上开始配置新的捕获会话。

  3. 这次我们将使用更详细的方法来设置捕获过滤器。点击 Capture Options 按钮(或者在菜单中选择 Capture > Options)。Capture Options 对话框让你对 Wireshark 捕获数据包的方式有更多的控制,包括设置捕获过滤器。

    捕获过滤器
  4. Capture Options 对话框中,你会看到一个网络接口列表和底部的 Capture Filter 输入框。这些网络接口代表了你系统上可用的网络连接,而 Capture Filter 框是你指定要捕获的数据包条件的地方。

    捕获过滤器
  5. 点击 Capture Filter 框并输入过滤器:port 80。此过滤器将捕获所有使用端口 80 的流量(包括 TCP 和 UDP)。端口 80 通常用于 HTTP 通信,因此通过使用此过滤器,我们是在告诉 Wireshark 只捕获与该端口上的 HTTP 流量相关的数据包。

  6. 或者,你可以点击 Capture Filter: 按钮从保存的过滤器书签中进行选择。如果你有一组经常使用的过滤器,这会很有用。

    捕获过滤器
  7. 在过滤器选择对话框中,你可以从预定义的过滤器中选择或创建一个新的过滤器。目前,直接在过滤器框中输入 port 80。这确保我们正在捕获我们感兴趣的特定流量。

    捕获过滤器
  8. 确保选择了网络接口 any,然后点击 Start 按钮开始捕获与过滤器匹配的数据包。选择 any 意味着 Wireshark 将从所有可用的网络接口捕获数据包。

生成测试流量

现在 Wireshark 正在捕获端口 80 上的流量,让我们生成一些测试流量来观察过滤器的实际效果。这将帮助你确认过滤器是否按预期工作。

  1. 通过点击任务栏上的终端图标或按下 Ctrl+Alt+T 打开一个新的终端窗口。你将在终端中运行命令来生成测试流量。

  2. 在新终端中,导航到项目目录:

    cd /home/labex/project

    此命令将当前工作目录更改为包含生成流量脚本的项目目录。

  3. 运行预创建的脚本来生成模拟的 HTTP 流量:

    ./simulate_traffic.sh

    此脚本旨在创建一个监听端口 80 的简单服务器,并向其发送一些数据,模拟现实世界的 HTTP 流量。

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

    Netcat server listening on port 80...
    Sending data to port 80...
    Please check the Wireshark output for the data sent to port 80.

    此输出表明脚本正在正常工作,并且数据正在发送到端口 80。

  5. 此脚本创建一个监听端口 80 的简单服务器,并向其发送一条简短的“Hello, Wireshark!”消息。如果过滤器正常工作,此消息将被 Wireshark 捕获。

分析捕获的流量

  1. 返回 Wireshark 窗口。你应该会看到脚本生成的数据包。这些数据包是我们刚刚生成的测试流量的结果。

  2. 这些数据包应该显示端口 80 上的通信,与我们的捕获过滤器匹配。这证实了过滤器正在按预期工作。

    捕获端口 80 的流量
  3. 在数据包列表中,你应该至少看到 3 个数据包:

    • TCP SYN 数据包用于建立连接:这是 TCP 三次握手的第一步,客户端请求与服务器建立连接。
    • TCP SYN - ACK 数据包用于确认连接:服务器响应客户端的 SYN 请求,表示它已准备好建立连接。
    • 包含“Hello, Wireshark!”数据的 TCP 数据包:这是包含脚本发送的消息的实际数据数据包。
  4. 点击其中一个数据包,在中间窗格中查看其详细信息。你可以通过点击箭头图标展开各个部分。这允许你查看数据包的不同部分,如头部和数据。

  5. 现在点击工具栏中的红色正方形 Stop 按钮停止捕获。停止捕获很重要,这样你就可以开始分析捕获的数据包,而不会有新的数据包添加进来。

  6. 点击菜单栏中的 File > Save As 保存捕获的数据包。保存数据包可以让你稍后参考它们进行进一步分析。

  7. 在文件保存对话框中,导航到目录 /home/labex/project。这是我们要存储捕获数据包的目录。

  8. 输入 step2.pcapng 作为文件名,然后点击 Save.pcapng 文件格式是存储网络数据包捕获的常用格式。

你已经成功应用了一个特定的捕获过滤器,只收集端口 80 上的流量,并观察到了与此过滤器匹配的实际流量。

使用显示过滤器分析捕获的流量

在这一步中,我们将学习如何使用显示过滤器来分析你已经捕获的流量。在开始之前,重要的是要理解捕获过滤器(capture filters)和显示过滤器(display filters)之间的区别。捕获过滤器用于决定首先要收集哪些流量。另一方面,显示过滤器让你专注于已经捕获的数据包的特定部分。它们就像你捕获的数据的放大镜,帮助你缩小到你感兴趣的细节。

理解捕获过滤器和显示过滤器之间的区别

让我们仔细看看捕获过滤器和显示过滤器之间的区别。

  • 捕获过滤器 在数据包被记录之前应用。它们使用 Berkeley Packet Filter (BPF) 语法。可以将捕获过滤器看作入口处的守门人。它们决定哪些数据包被允许进入并被捕获。
  • 显示过滤器 应用于已经捕获的数据包。它们使用 Wireshark 自己的语法。显示过滤器就像一个聚光灯,突出显示已经捕获的数据包中的特定数据包。
  • 显示过滤器比捕获过滤器更强大和灵活。它们允许你对捕获的数据执行更复杂的搜索和分析。
  • 显示过滤器不会减少捕获的数据量。它们只控制在界面中显示的内容。因此,原始捕获的数据保持不变,你可以根据需要多次更改显示过滤器以查看数据的不同方面。

打开你捕获的文件

现在,让我们打开包含你之前捕获的数据包的文件。

  1. 如果你仍然从上一步打开了 Wireshark,你可以直接继续。否则,打开 Wireshark,然后打开你在步骤 2 中保存的文件。
  2. 要在 Wireshark 中打开先前保存的文件:
    • 单击菜单栏中的 File > Open。这是一种在许多软件应用程序中访问文件的常用方法。
    • 导航到 /home/labex/project 目录。这是存储捕获文件的位置。
    • 选择 step2.pcapng 文件,然后单击 Open.pcapng 文件格式通常用于存储网络数据包数据。
  3. 打开文件后,你现在应该在 Wireshark 中看到你在步骤 2 中捕获的数据包。这是我们将使用显示过滤器分析的数据。

应用显示过滤器

接下来,我们将把显示过滤器应用于捕获的数据包。

  1. 在 Wireshark 窗口的顶部找到显示过滤器工具栏。这与你之前使用的捕获过滤器不同。激活时,它具有浅绿色背景。显示过滤器工具栏是你输入过滤器表达式以显示特定数据包的位置。

  2. 在显示过滤器字段中,键入 tcp,然后按 Enter 键或单击右箭头按钮。通过键入 tcp,我们告诉 Wireshark 仅显示使用 TCP 协议的数据包。这将仅在显示中显示 TCP 数据包,如果存在任何其他协议数据包,则将其过滤掉。

  3. 请注意,数据包如何在不需要新捕获的情况下立即在显示中被过滤。这是使用显示过滤器的优点之一。你可以快速分析捕获数据的不同方面,而无需再次捕获流量。

  4. 现在,让我们尝试一个更具体的显示过滤器。单击过滤器栏右侧的 X 按钮清除当前过滤器。这将删除先前的过滤器,并再次显示所有捕获的数据包。

  5. 输入以下过滤器以显示包含单词“Wireshark”的数据包:

    frame contains "Wireshark"

    此过滤器在数据包的帧数据中搜索单词“Wireshark”。

  6. 按 Enter 键或单击右箭头以应用过滤器。

    显示过滤器
  7. 现在,你应该只看到包含文本“Wireshark”的数据包——可能只有一两个包含我们的“Hello, Wireshark!”消息的数据包。这表明显示过滤器如何用于查找捕获数据包中的特定信息。

  8. 如果你单击数据包列表中的其中一个数据包,你可以在中间窗格中看到其详细信息。查找应显示“Hello, Wireshark!”文本的“Data”部分。这使你可以更详细地检查数据包的内容。

创建报告

现在你已经使用显示过滤器分析了流量,让我们创建一个简单的报告来记录你发现的内容。

  1. 计算与 frame contains "Wireshark" 过滤器匹配的数据包的数量。该数字应显示在 Wireshark 窗口底部的状态栏中,显示类似“Displayed: X of Y packets”的内容。此数字表示包含单词“Wireshark”的数据包的数量。

  2. 通过单击任务栏中的终端图标或按 Ctrl+Alt+T 打开一个终端窗口。终端是一个强大的工具,允许你在计算机上运行命令。

  3. 在终端中,创建一个包含数据包计数信息的报告文件:

    echo "Number of packets matching the filter expression: 1" > /home/labex/project/report.txt

    注意:将上面的命令中的 1 替换为你观察到的与过滤器匹配的实际数据包数。此数字可能会因脚本的运行方式而异。

    保存报告

你现在已成功应用显示过滤器来分析捕获的网络流量,并将你的发现记录在报告文件中。

总结

在本次实验中,你学习了如何使用 Wireshark 的捕获过滤器,根据特定标准有选择地捕获和分析网络流量。你练习了一些关键技能,例如理解基于伯克利数据包过滤器(Berkeley Packet Filter)语言的捕获过滤器的基本语法、在实时捕获过程中应用这些过滤器,以及区分捕获过滤器和显示过滤器。

这些技能对于处理网络问题或安全事件的网络管理员、安全分析师和 IT 专业人员来说至关重要。掌握捕获过滤器可以让你专注于相关流量,从而更高效地进行网络分析。随着你在网络分析领域的不断进步,你可以基于这些技能创建复杂的过滤器,以便在复杂环境中进行精细的流量选择。