使用 Wireshark 分析 IPv6 流量

WiresharkWiresharkBeginner
立即练习

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

介绍

在这个实验中,你将学习如何使用 Wireshark,一个强大的网络协议分析器,来捕获和分析 IPv6 网络流量。IPv6,下一代互联网协议(Internet Protocol),相比 IPv4 提供了更大的地址空间和增强的安全特性。

随着 IPv6 采用率的增长,对于网络安全专业人员来说,了解如何使用像 Wireshark 这样的工具来监控和排除 IPv6 网络故障至关重要。这个实践实验将为你提供 IPv6 流量监控的实践经验,这些经验适用于真实的网络环境。


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/export_packets("Exporting Packets") wireshark/WiresharkGroup -.-> wireshark/packet_analysis("Packet Analysis") wireshark/WiresharkGroup -.-> wireshark/ipv6_support("IPv6 Support") subgraph Lab Skills wireshark/packet_capture -.-> lab-415950{{"使用 Wireshark 分析 IPv6 流量"}} wireshark/display_filters -.-> lab-415950{{"使用 Wireshark 分析 IPv6 流量"}} wireshark/export_packets -.-> lab-415950{{"使用 Wireshark 分析 IPv6 流量"}} wireshark/packet_analysis -.-> lab-415950{{"使用 Wireshark 分析 IPv6 流量"}} wireshark/ipv6_support -.-> lab-415950{{"使用 Wireshark 分析 IPv6 流量"}} end

捕获 IPv6 流量

在这一步,我们将专注于捕获 IPv6 网络流量。IPv6 是互联网协议(Internet Protocol)的最新版本,旨在解决 IPv4 的局限性,例如可用 IP 地址的耗尽。为了捕获和观察通过你的网络接口传输的 IPv6 数据包,我们将使用 Wireshark,一个强大且广泛使用的网络协议分析器。它允许你查看网络流量的详细信息,这对于网络监控和故障排除至关重要。

在你的系统上启用 IPv6

在我们开始捕获 IPv6 流量之前,我们需要确保在你的系统上启用了 IPv6。这是因为如果 IPv6 被禁用,你的系统将无法发送或接收 IPv6 数据包,并且我们将无法捕获任何相关的流量。

  1. 打开一个终端窗口。你可以通过单击任务栏中的终端图标或按 Ctrl+Alt+T 来执行此操作。终端是一个命令行界面,你可以在其中输入命令来与你的系统进行交互。

  2. 导航到项目目录。这是启用 IPv6 的脚本所在的位置。使用以下命令:

    cd /home/labex/project/

    cd 命令代表“change directory”(更改目录)。它允许你在文件系统中从一个目录移动到另一个目录。

  3. 运行脚本以在你的系统上启用 IPv6。使用以下命令:

    sudo ./enable_ipv6.sh

    sudo 命令用于以管理权限运行命令。./ 表示该脚本位于当前目录中。此脚本通过配置网络接口并确保在系统设置中未禁用 IPv6,从而在你的 Linux 机器上启用 IPv6 功能。

    预期输出:

    net.ipv6.conf.all.disable_ipv6 = 0
    net.ipv6.conf.default.disable_ipv6 = 0
    net.ipv6.conf.lo.disable_ipv6 = 0

    这些行表示 IPv6 已分别针对所有网络接口、默认接口和环回接口启用。

启动 Wireshark 并配置捕获

现在已启用 IPv6,我们可以启动 Wireshark 并将其配置为捕获网络流量。

  1. 通过在终端中运行以下命令来启动 Wireshark:

    wireshark &

    命令末尾的 & 符号在后台运行 Wireshark。这意味着你可以在 Wireshark 运行时继续使用终端。

  2. 当 Wireshark 打开时,你将看到可用网络接口的列表。这些是你的系统可以通过其发送和接收网络流量的物理或虚拟连接。查找标记为 any 的接口。选择此接口允许 Wireshark 捕获来自你系统上所有网络接口的数据包。

    Wireshark Interface Selection
  3. 要开始捕获数据包,你可以双击 any 接口,或者选择它并单击工具栏中的蓝色鲨鱼鳍按钮。

  4. Wireshark 现在将开始捕获你系统上的所有网络流量。捕获数据包后,你将在主窗口中看到它们。每个数据包条目都显示诸如源和目标 IP 地址、使用的协议以及捕获时间之类的信息。

生成用于捕获的 IPv6 流量

为了确保我们有一些 IPv6 流量可以分析,我们将通过 ping 一个 IPv6 地址来生成一些 IPv6 数据包。Ping 是一种测试两个网络设备之间连接的简单方法。

  1. 在 Wireshark 正在运行并捕获数据包时,打开一个新的终端窗口。这允许你运行命令来生成流量,而不会干扰数据包捕获过程。

  2. 首先,让我们找到你的 eth1 接口的 IPv6 地址。运行以下命令:

    ip addr show dev eth1 | grep inet6

    ip addr show 命令显示分配给你的网络接口的 IP 地址。dev eth1 指定我们要查看 eth1 接口的地址。| 是一个管道操作符,它将左侧命令的输出用作右侧命令的输入。grep inet6 过滤输出以仅显示包含字符串 inet6 的行,这些行是 IPv6 地址。

    输出将显示与 eth1 接口关联的 IPv6 地址。你应该看到一个以 fe80:: 开头的链路本地 IPv6 地址。这是你的本地 IPv6 地址,用于本地网段内的通信。

    示例输出:

    inet6 fe80::42:acff:fe14:3/64 scope link
  3. 现在,ping 此 IPv6 地址以生成一些 IPv6 流量。使用 ping6 命令,该命令专门用于 ping IPv6 地址。包括接口名称(eth1),因为它是一个链路本地地址。需要接口名称来指定应将哪个网络接口用于通信。

    ping6 -c 4 fe80::42:acff:fe14:3%eth1

    注意:将 fe80::42:acff:fe14:3 替换为你系统上显示的实际 IPv6 地址。

    -c 4 参数告诉 ping 发送 4 个数据包然后停止。这对于限制生成的流量量很有用。

    预期输出:

    PING fe80::42:acff:fe14:3%eth1(fe80::42:acff:fe14:3%eth1) 56 data bytes
    64 bytes from fe80::42:acff:fe14:3%eth1: icmp_seq=1 ttl=64 time=0.049 ms
    64 bytes from fe80::42:acff:fe14:3%eth1: icmp_seq=2 ttl=64 time=0.064 ms
    64 bytes from fe80::42:acff:fe14:3%eth1: icmp_seq=3 ttl=64 time=0.064 ms
    64 bytes from fe80::42:acff:fe14:3%eth1: icmp_seq=4 ttl=64 time=0.064 ms
    
    --- fe80::42:acff:fe14:3%eth1 ping statistics ---
    4 packets transmitted, 4 received, 0% packet loss, time 3060ms
    rtt min/avg/max/mdev = 0.049/0.060/0.064/0.007 ms

    此输出显示 ping 过程的详细信息,包括每个数据包往返于目的地所需的时间以及数据包丢失率。

  4. 返回到 Wireshark 窗口。你现在应该在捕获列表中看到几个新的数据包,包括你的 ping 命令生成的 ICMPv6 数据包。ICMPv6 是 IPv6 的互联网控制消息协议(Internet Control Message Protocol),用于错误报告和诊断目的。

  5. 单击 Wireshark 工具栏中的红色方形“停止(Stop)”按钮来停止数据包捕获。

你现在已使用 Wireshark 成功捕获了 IPv6 流量。在下一步中,你将学习如何过滤和分析此流量。

过滤和分析 IPv6 流量

现在你已经捕获了一些 IPv6 流量,现在是时候学习如何过滤和分析这些流量了。Wireshark,一个强大的网络协议分析器,提供了出色的过滤功能。过滤捕获的流量可以帮助你专注于要检查的特定类型的 IPv6 数据包。过滤允许你隔离相关信息,从而使你的分析更加有效,而不是查看大量混合的网络数据。

使用显示过滤器进行 IPv6 过滤

Wireshark 中的显示过滤器是一个很棒的工具。它们让你只查看符合特定条件的数据包。在这种情况下,我们将专注于 IPv6 数据包。

  1. 在 Wireshark 主窗口中,你将看到一个数据包列表。在此列表的顶部,有一个显示过滤器栏。它有一个文本字段,提示“应用显示过滤器(Apply a display filter)”。你将在此栏中输入你的过滤条件。

  2. 要仅显示 IPv6 数据包,请在显示过滤器栏中键入以下过滤器:

    ipv6

    此过滤器告诉 Wireshark 仅显示使用 IPv6 协议的数据包。

    Wireshark Display Filter Bar
  3. 键入过滤器后,按 Enter 键或单击蓝色箭头按钮以应用它。应用后,数据包列表现在将仅显示 IPv6 数据包。这意味着任何 IPv4 或其他协议数据包都将被过滤掉,只留下 IPv6 流量。

  4. 如果你想进一步优化你的过滤器以仅显示 ICMPv6 数据包(例如 ping6 命令生成的那些数据包),请键入以下过滤器:

    icmpv6

    ICMPv6 是 IPv6 网络的关键协议,用于错误报告和诊断消息等任务。通过使用此过滤器,你可以专注于这些特定类型的数据包。

    Wireshark Display Filter Bar
  5. 像以前一样应用过滤器。现在,你应该只在数据包列表中看到来自你的 ping 命令的 ICMPv6 数据包。

检查 IPv6 数据包详细信息

Wireshark 提供有关每个数据包的详细信息。让我们仔细看看 IPv6 数据包的结构。

  1. 在过滤后的数据包列表中,找到一个 ICMPv6 回显请求(Echo Request)数据包。你可以通过在“信息(Info)”列中查找“Echo (ping) request”来识别它。单击此数据包以选择它。

  2. 选择数据包后,中间窗格将显示该数据包的详细分解。查找标记为“Internet 协议版本 6(Internet Protocol Version 6)”的部分。如果尚未展开,请单击其旁边的箭头以展开它。这将向你显示 IPv6 标头中的所有字段。

    IPv6 Packet Details
  3. 在 IPv6 标头信息中,有几个重要的字段需要观察:

    • 版本(Version):对于 IPv6,此字段应为 6。这是一种确认数据包正在使用 IPv6 协议的简单方法。
    • 通信类别(Traffic Class):此字段用于 QoS(服务质量,Quality of Service)。它有助于优先处理网络上的不同类型的流量。
    • 流标签(Flow Label):这可以用于维护属于同一流的数据包的状态。它对于跟踪相关数据包很有用。
    • 有效负载长度(Payload Length):这表示 IPv6 标头之后的数据大小。它可以帮助你了解数据包中携带了多少数据。
    • 下一个标头(Next Header):此字段标识 IPv6 标头之后的标头类型。它可以是另一个协议标头,如 TCP 或 UDP。
    • 跳数限制(Hop Limit):类似于 IPv4 中的 TTL(生存时间,Time To Live),此值在每个路由器上递减。它可以防止数据包在网络上无限期地循环。
    • 源地址(Source Address):这是发送方的 IPv6 地址。它告诉你数据包的来源。
    • 目标地址(Destination Address):这是接收方的 IPv6 地址。它显示数据包的去向。
  4. 注意 IPv6 和 IPv4 地址之间的区别。IPv6 使用 128 位地址,这些地址通常写成八组四位十六进制数字。相比之下,IPv4 使用 32 位地址。这使得 IPv6 地址更长,并提供了更大的地址空间。

  5. 现在,展开“Internet 控制消息协议 v6(Internet Control Message Protocol v6)”部分以查看 ICMPv6 数据包的详细信息:

    • 类型(Type):这表示 ICMPv6 消息类型。例如,128 用于回显请求(Echo Request),129 用于回显应答(Echo Reply)。
    • 代码(Code):这进一步指定了消息类型。它提供了有关 ICMPv6 消息的更详细信息。
    • 校验和(Checksum):这用于检测 ICMPv6 消息中的错误。它有助于确保数据的完整性。
    • 标识符(Identifier):这用于将请求与回复进行匹配。它允许发送方跟踪哪个回复对应于哪个请求。
    • 序列(Sequence):这是一个序列号,对于 ping 会话中的每个数据包都会递增。它有助于对数据包进行排序。

保存捕获的数据包

保存你的数据包捕获以供以后分析或记录通常很有用。以下是如何操作:

  1. 在 Wireshark 中,单击“文件(File)”菜单,然后选择“另存为(Save As)”。这将打开一个对话框,你可以在其中选择保存文件的位置以及命名方式。

  2. 导航到 /home/labex/project/ 目录。这是我们要保存数据包捕获的位置。

  3. 输入 capture.pcapng 作为文件名。这是将用于标识已保存数据包捕获的名称。

  4. 单击“保存(Save)”按钮以保存你的数据包捕获。该文件将以 PCAPNG 格式保存,这是 Wireshark 数据包捕获的标准格式。此格式被广泛支持,并且可以在其他网络分析工具中打开。

  5. 你可以通过在终端中运行以下命令来验证文件是否已正确保存:

    ls -l /home/labex/project/capture.pcapng

    此命令列出文件的详细信息,包括其权限、所有者、大小和创建日期。

    预期输出:

    -rw-r--r-- 1 labex labex [file size] [date] /home/labex/project/capture.pcapng

现在,你已经学习了如何过滤 IPv6 流量、检查 IPv6 数据包的详细信息以及保存你的数据包捕获以供将来参考。在下一步中,你将更详细地探索 IPv6 扩展标头。

检查 IPv6 扩展标头

在这一步中,我们将探索 IPv6 扩展标头。IPv6 是下一代互联网协议,它提供了许多优于 IPv4 的改进。其中一个关键改进是扩展标头的使用。这些标头至关重要,因为它们提供了增强的功能,例如更好的路由和安全功能。对于任何参与 IPv6 网络监控和安全分析的人来说,理解它们至关重要,因为它们可以揭示有关数据包如何在网络中处理的重要信息。

在 Wireshark 中识别扩展标头

现在,让我们使用 Wireshark 来识别和理解我们之前捕获的数据包中的 IPv6 扩展标头。

  1. 首先,确保 Wireshark 已打开。如果未打开,你可以在终端中使用以下命令打开它:

    wireshark &

    末尾的 & 允许该命令在后台运行,因此你可以继续使用终端执行其他任务。

  2. 接下来,打开你在上一步中保存的捕获文件。操作方法如下:

    • 在 Wireshark 菜单中,单击“文件(File)” > “打开(Open)”。
    • 导航到目录 /home/labex/project/
    • 选择名为 capture.pcapng 的文件,然后单击“打开(Open)”。此文件包含你之前捕获的网络流量。
  3. 在 Wireshark 顶部的过滤器栏中,输入以下过滤器:

    ipv6

    此过滤器显示所有 IPv6 数据包。我们将检查这些数据包中的“下一个标头(Next Header)”字段,以识别任何扩展标头。

  4. 从 Wireshark 左侧的数据包列表中选择任何 IPv6 数据包。在中间窗格中,展开“Internet 协议版本 6(Internet Protocol Version 6)”部分。这将向你显示 IPv6 标头的详细信息。

  5. 在展开的 IPv6 标头中查找“下一个标头(Next Header)”字段。此字段非常重要,因为它告诉我们 IPv6 标头之后的内容。它可以是扩展标头或上层协议,如 TCP 或 UDP。

  6. “下一个标头(Next Header)”值对应于特定的协议号:

    • 0: 逐跳选项(Hop-by-Hop Options)
    • 43: 路由(Routing)
    • 44: 分片(Fragment)
    • 50: ESP (Encapsulating Security Payload, 封装安全有效载荷)
    • 51: AH (Authentication Header, 认证标头)
    • 60: 目标选项(Destination Options)
    • 58: ICMPv6
    • 6: TCP
    • 17: UDP
  7. 如果数据包中存在扩展标头,它将显示为数据包详细信息窗格中 IPv6 标头下方的可展开部分。展开它以查看其内容,这些内容可以提供有关数据包处理方式的宝贵信息。

导出数据包字节以进行分析

为了进一步分析“下一个标头(Next Header)”字段,我们将导出包含它的数据包的字节。

  1. 从数据包列表中选择任何 IPv6 数据包。

  2. 在中间窗格中,确保“Internet 协议版本 6(Internet Protocol Version 6)”部分已展开。如果未展开,请展开它以查看 IPv6 标头的详细信息。

  3. 找到“下一个标头(Next Header)”字段。它通常位于 IPv6 标头详细信息的顶部附近。

  4. 右键单击“下一个标头(Next Header)”字段,然后选择“导出选定的数据包字节(Export Selected Packet Bytes)”。

    Wireshark Export Packet Bytes
  5. 在出现的对话框中,导航到目录 /home/labex/project/。这是我们将保存导出的字节的位置。

  6. 输入 extension_header.txt 作为文件名。

  7. 单击“保存(Save)”以保存文件。

  8. 你可以通过在终端中运行以下命令来验证文件是否已成功创建:

    cat /home/labex/project/extension_header.txt

    输出可能是一个表示“下一个标头(Next Header)”值的单个字符。这对于进一步的分析或脚本编写很有用。

分析扩展标头链

在 IPv6 中,一个数据包可以有多个扩展标头,形成一个链。每个扩展标头都有一个“下一个标头(Next Header)”字段,指示其后的内容。

例如,一个 IPv6 数据包可能具有以下结构:

  1. 主 IPv6 标头,其“下一个标头(Next Header)”值为 0,这意味着下一个标头是逐跳选项(Hop-by-Hop Options)标头。
  2. 逐跳选项(Hop-by-Hop Options)标头,其“下一个标头(Next Header)”值为 43,指示下一个标头是路由(Routing)标头。
  3. 路由(Routing)标头,其“下一个标头(Next Header)”值为 6,这意味着下一个标头是 TCP 标头。
  4. 最后,TCP 标头和有效负载。

这种链接机制在数据包处理方面提供了很大的灵活性。但是,它也可能被滥用于安全攻击,例如试图绕过防火墙规则。这就是为什么理解扩展标头对于网络安全监控至关重要的原因。

你现在已经学习了如何在 Wireshark 中识别和检查 IPv6 扩展标头。对于任何参与 IPv6 网络监控和安全分析的人来说,这是一项必不可少的技能。

总结

在这个实验中,你学习了使用 Wireshark 进行 IPv6 网络监控的基本技能。你首先捕获 IPv6 流量,并使用 ping6 命令生成数据包。然后,你深入研究了捕获的数据包的过滤和分析,重点关注 IPv6 标头的独特结构和字段。

获得的关键技能包括捕获 IPv6 流量、使用显示过滤器来筛选特定数据包类型、检查数据包结构和标头、保存捕获以供以后分析、识别 IPv6 扩展标头,以及理解“下一个标头(Next Header)”字段和扩展标头链。这些技能对于 IPv6 普遍环境中的网络管理员和网络安全专业人员至关重要,对于网络安全、故障排除和理解网络行为至关重要。随着 IPv6 在全球范围内的普及,这些知识为高级概念奠定了坚实的基础。