使用 Scapy 伪造数据包

WiresharkWiresharkBeginner
立即练习

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

简介

在这个实验中,你将学习如何使用 Scapy(一个强大的基于 Python 的数据包操作工具)来伪造网络数据包。你将探索如何制作和发送自定义 TCP 数据包的实用技术,并使用 Wireshark 分析结果。

本实验涵盖了关键步骤,包括 Scapy 的安装、Python 虚拟环境的设置以及数据包伪造操作。通过实践操作,你将深入了解网络流量操纵和安全测试方法。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL wireshark(("Wireshark")) -.-> wireshark/WiresharkGroup(["Wireshark"]) wireshark/WiresharkGroup -.-> wireshark/installation("Installation and Setup") wireshark/WiresharkGroup -.-> wireshark/packet_capture("Packet Capture") wireshark/WiresharkGroup -.-> wireshark/display_filters("Display Filters") wireshark/WiresharkGroup -.-> wireshark/protocol_dissection("Protocol Dissection") wireshark/WiresharkGroup -.-> wireshark/packet_analysis("Packet Analysis") subgraph Lab Skills wireshark/installation -.-> lab-549951{{"使用 Scapy 伪造数据包"}} wireshark/packet_capture -.-> lab-549951{{"使用 Scapy 伪造数据包"}} wireshark/display_filters -.-> lab-549951{{"使用 Scapy 伪造数据包"}} wireshark/protocol_dissection -.-> lab-549951{{"使用 Scapy 伪造数据包"}} wireshark/packet_analysis -.-> lab-549951{{"使用 Scapy 伪造数据包"}} end

安装 Scapy

在这一步中,你将安装 Scapy,它是一个强大的基于 Python 的交互式数据包操作工具,用于网络分析和安全测试。Scapy 允许你精细地制作、发送和捕获网络数据包。可以把它想象成网络数据包的“瑞士军刀”——你可以构建任何你需要的网络数据包。

在开始之前,确保你处于正确的工作目录。~/project 目录将是我们进行所有操作的地方:

cd ~/project

现在,我们将使用 Python 的包管理器 pip 来安装 Scapy。pip 就像是 Python 包的应用商店,它从 Python 包索引(PyPI)下载并安装软件:

pip install scapy

安装完成后,最好验证一下是否一切都安装正确。我们可以通过检查 Scapy 的版本号来完成这一步。这既能确认 Scapy 已安装,也能确认 Python 可以成功导入它:

python -c "import scapy; print(scapy.__version__)"

你应该会看到类似这样的输出(你的版本号可能会略有不同):

2.4.5

最后,让我们测试一下 Scapy 的交互式模式。这就像是一个“游乐场”,你可以在编写完整脚本之前先尝试数据包制作。要进入交互式 shell:

python -m scapy

当你看到 Scapy 的命令提示符 (>>>) 时,就说明它正常工作了。当你准备离开交互式 shell 时,可以输入 exit()。现在不用着急去探索它,我们将在后续步骤中介绍交互式功能。

设置 Python 环境

在这一步中,你将使用 Python 的虚拟环境为你的 Scapy 实验创建一个专用的工作空间。可以把这想象成搭建一个“洁净室”,你可以在其中工作而不会影响计算机上的其他项目。虚拟环境有助于管理包版本,并防止不同 Python 项目之间发生冲突。

  1. 首先,确保你从正确的位置开始。以下命令会导航到我们将设置项目的默认工作目录:

    cd ~/project
  2. 现在,我们将创建一个名为 scapy-env 的虚拟环境。这将创建一个新文件夹,其中包含隔离环境所需的所有 Python 文件:

    python -m venv scapy-env
  3. 要开始使用新环境,我们需要激活它。激活后,你会在终端提示符的开头看到 (scapy-env),它会提醒你正在使用哪个环境:

    source scapy-env/bin/activate
  4. 即使你的系统上可能已经安装了 Scapy,我们还是要为这个环境专门安装它。这能确保我们拥有这个项目所需的确切版本:

    pip install scapy
  5. 让我们验证一下一切是否都已正确设置。以下命令会显示我们虚拟环境中安装的所有 Python 包。你应该会在列表中看到 scapy,这就确认它已可以使用:

    pip list
  6. 当你完成工作后(不过现在先不要运行此命令,因为我们将在后续步骤中使用这个环境),你可以停用虚拟环境,回到正常的系统 Python:

    deactivate

构建 TCP 数据包

在这一步中,你将使用 Scapy 来创建一个基本的 TCP 数据包。了解如何构建网络数据包对于网络分析和安全测试至关重要。我们将逐层构建一个 TCP 数据包,这模拟了真实网络通信的工作方式。

  1. 首先,确保你位于正确的目录,并且你的虚拟环境已激活。虚拟环境可以隔离你的 Python 包:

    cd ~/project
    source scapy-env/bin/activate
  2. 创建一个名为 craft_tcp.py 的新 Python 脚本。我们将使用 nano 文本编辑器,但你可以使用任何你喜欢的编辑器:

    nano craft_tcp.py
  3. 添加以下代码来创建一个简单的 TCP 数据包。让我们来分析一下每个部分的作用:

    • IP 层定义源地址和目标地址
    • TCP 层指定端口和连接标志(在这种情况下是 SYN)
    • / 运算符将这些层组合成一个完整的数据包
    from scapy.all import *
    
    ## Create IP layer
    ip = IP(src="192.168.1.100", dst="192.168.1.1")
    
    ## Create TCP layer
    tcp = TCP(sport=1234, dport=80, flags="S")  ## SYN packet
    
    ## Combine layers to create packet
    packet = ip/tcp
    
    ## Display packet details
    packet.show()
  4. 保存文件(在 nano 中按 Ctrl+O,回车,Ctrl+X)并运行它。.show() 方法将显示数据包的结构:

    python craft_tcp.py
  5. 你应该会看到类似以下的输出,显示了数据包的所有字段。注意 Scapy 如何自动填充一些值,而其他值仍为 None(发送时会计算这些值):

    ###[ IP ]###
      version= 4
      ihl= None
      tos= 0x0
      len= None
      id= 1
      flags=
      frag= 0
      ttl= 64
      proto= tcp
      chksum= None
      src= 192.168.1.100
      dst= 192.168.1.1
      \options\
    ###[ TCP ]###
         sport= 1234
         dport= http
         seq= 0
         ack= 0
         dataofs= None
         reserved= 0
         flags= S
         window= 8192
         chksum= None
         urgptr= 0
         options= []

发送伪造数据包

在这一步中,你将修改 TCP 数据包脚本,以发送带有伪造源 IP 地址的数据包。这展示了攻击者如何在网络通信中隐藏自己的来源。伪造(Spoofing)是一种常见的技术,发送者会故意伪造 IP 数据包中的源地址,以隐藏自己的身份或冒充其他系统。

  1. 首先,确保你位于正确的目录,并且你的虚拟环境已激活。虚拟环境会为这个项目隔离你的 Python 包:

    cd ~/project
    source scapy-env/bin/activate
  2. 创建一个名为 send_spoofed.py 的新 Python 脚本。我们将使用 nano 文本编辑器,它对初学者来说很简单:

    nano send_spoofed.py
  3. 添加以下代码来发送伪造的 TCP 数据包。该代码会在私有范围(192.168.x.x 和 10.x.x.x)内生成随机 IP 地址,这些地址用于测试是安全的。TCP 数据包会以 SYN 标志发送到 Google 的 DNS 服务器(8.8.8.8)的 53 端口:

    from scapy.all import *
    import random
    
    ## Spoofed source IP (using private IP range)
    spoofed_ip = f"192.168.{random.randint(1,254)}.{random.randint(1,254)}"
    
    ## Create and send packet
    packet = IP(src=spoofed_ip, dst="8.8.8.8")/TCP(dport=53, flags="S")
    send(packet, verbose=False)
    
    print(f"Sent spoofed TCP packet from {spoofed_ip} to 8.8.8.8")
  4. 保存文件(在 nano 中按 Ctrl+O,回车,Ctrl+X)并运行它。脚本将生成并发送一个伪造的数据包:

    python send_spoofed.py
  5. 你应该会看到类似以下的输出,显示生成的伪造源 IP:

    Sent spoofed TCP packet from 192.168.45.123 to 8.8.8.8
  6. 要发送多个数据包并查看不同的伪造 IP 生效情况,修改脚本以包含一个循环。这将从 10.x.x.x 范围发送 3 个带有不同随机源 IP 的数据包:

    for i in range(3):
        spoofed_ip = f"10.0.{random.randint(1,254)}.{random.randint(1,254)}"
        packet = IP(src=spoofed_ip, dst="8.8.8.8")/TCP(dport=53, flags="S")
        send(packet, verbose=False)
        print(f"Sent packet {i+1} from {spoofed_ip}")

使用 Wireshark 验证

在这一步中,你将使用 Wireshark 来验证你在上一步中发送的伪造数据包。Wireshark 是一款强大的网络协议分析器,它允许你实时捕获和检查网络流量。这个验证过程至关重要,因为它能帮助你确认你的伪造数据包是否真的以修改后的源 IP 地址在网络上传输。

  1. 首先,确保你位于正确的目录,并且你的虚拟环境已激活。虚拟环境包含了本实验所需的所有 Python 包:

    cd ~/project
    source scapy-env/bin/activate
  2. 在 LabEx 虚拟机中安装 Wireshark。Wireshark 没有预装,所以我们需要先安装它:

    sudo apt-get update
    sudo apt-get install -y wireshark
  3. 在后台启动 Wireshark。& 符号允许你在 Wireshark 运行时继续使用终端:

    wireshark &
  4. 在 Wireshark 的界面中:

    • 选择活动的网络接口(通常是 eth0)——这代表你的网络连接
    • 点击鲨鱼鳍图标开始数据包捕获——这将开始记录所有网络流量
    • 应用显示过滤器:tcp.port == 53——这将视图过滤为仅显示 53 端口(DNS 端口)上的 TCP 流量
  5. 在另一个终端中,再次运行你的伪造数据包脚本。这将生成新的流量供 Wireshark 捕获:

    python send_spoofed.py
  6. 在 Wireshark 中观察结果:

    • 你应该会看到发往 53 端口的 TCP SYN 数据包——这些是连接发起数据包
    • 验证源 IP 地址是否与你伪造的 IP 地址匹配——确认伪造操作成功
    • 注意 TCP 握手尝试(SYN 数据包)——这些显示了连接尝试
  7. 若要保存捕获内容以便后续分析:

    • 点击“文件”→“保存”
    • 将其保存为 spoofed_capture.pcap,保存路径为 ~/project——PCAP 文件包含原始数据包数据,可供未来参考

总结

在本实验中,你学习了如何在隔离的 Python 虚拟环境中安装和配置 Scapy 以进行网络数据包操作。这个过程包括设置环境、安装 Scapy,并通过版本检查和交互式测试来验证其功能。

你还获得了实际操作经验,包括构建 TCP 数据包、发送伪造数据包以模拟网络流量,以及使用 Wireshark 分析结果。这些技能为网络安全测试和数据包操作技术奠定了基础。