Files
nudtns2026spring/Sniffing_Spoofing/Experiment_Guide.md
2026-04-10 10:24:42 +08:00

3.9 KiB
Raw Blame History

网络安全实验数据包嗅探与伪造Sniffing & Spoofing演示指南

这份文档旨在帮助你快速回顾实验步骤、关键命令以及核心理论,应对老师的实验验收。


0. 准备工作:启动实验环境

Labsetup 目录下执行以下操作:

  1. 启动容器
    docker-compose up -d
    
  2. 确认网络接口 由于实验代码中硬编码了网卡名称(如 br-c031fbf1a197),请务必在宿主机执行 ifconfigip addr,找到 IP 为 10.9.0.1 的网桥名称。
    • 重要提示:如果演示时报错 Device not found,请立即修改代码中的 iface 参数为实际查到的名称。

1. 任务集 1使用 Scapy (Python)

任务 1.1: 基础嗅探 (Sniffer)

  • 运行命令sudo python3 sniffer.py
  • 测试步骤:在 HostA 或 HostB 执行 ping 10.9.0.x
  • 验收提问
    • 为什么需要 sudo 因为创建原始套接字Raw Socket和开启混杂模式需要 Root 权限。
    • 如何过滤流量? 解释 BPF 过滤器(如 icmp, tcp port 23)。

任务 1.2: 数据包伪造 (Spoofing)

  • 运行命令sudo python3 spoofer.py
  • 测试现象HostA 会收到一个来自虚假源 IP1.2.3.4)的 ICMP 请求包。

任务 1.3: 自定义 Traceroute

  • 运行命令sudo python3 traceroute.py
  • 核心原理:利用 TTL (Time To Live) 字段。从 1 开始递增 TTL每一跳路由器丢弃包并返回 ICMP Time Exceeded,直到到达目标返回 Echo Reply

任务 1.4: 嗅探并伪造响应 (Sniff-and-Spoof)

  • 演示重点
    1. Attacker 运行 sudo python3 sniff_and_spoof.py
    2. HostA 执行 ping 1.2.3.4 -> 成功收到回复Attacker 伪造的)。
    3. HostA 执行 ping 10.9.0.99 (局域网内不存在的 IP) -> 失败
      • 原理深度解析:因为 HostA 会先发送 ARP 请求 寻找 10.9.0.99 的 MAC 地址。由于该 IP 不存在ARP 无响应IP 包根本发不出去Attacker 也就嗅探不到请求。

2. 任务集 2使用 C 语言 (libpcap & Raw Socket)

编译与运行

# 在容器或挂载目录下编译
gcc -o sniffer_c sniffer.c -lpcap
gcc -o spoofer_c spoofer.c
gcc -o sniff_and_spoof_c sniff_and_spoof.c -lpcap

# 运行(记得 sudo
sudo ./sniffer_c

核心技术点 (验收常考)

  • libpcap 流程pcap_open_live -> pcap_compile -> pcap_setfilter -> pcap_loop
  • Raw Socket 伪造:必须设置 IP_HDRINCL 选项,手动构造整个 IP 和 ICMP 首部。
  • 校验和 (Checksum):计算前必须将校验和字段清零,否则计算结果错误,包会被丢弃。
  • 字节序 (Endianness):网络传输使用大端序,多字节字段(如 IP、Port需使用 htons() / htonl() 转换。

3. 验收常见 Q&A

  1. Q: 为什么攻击者能看到其他机器的流量?
    • A: 容器处于 host 网络模式,且开启了 混杂模式 (Promiscuous Mode),允许网卡接收目的 MAC 不是本机的帧。
  2. Q: 交换式网络环境下嗅探有什么限制?
    • A: 在真实物理交换机下,除非进行 ARP 欺骗或配置端口镜像否则混杂模式只能看到广播帧和发往本机的帧。Docker 虚拟网桥模拟了这种环境。
  3. Q: Scapy 与 C 语言开发相比有什么优缺点?
    • A: Scapy 开发效率极高一行代码搞定协议堆叠C 语言执行效率高,能更深入底层,适合学习协议栈细节。

演示清单 (Checklist)

  • docker-compose up -d 环境就绪。
  • 找到正确的 br-xxxx 网桥接口名。
  • 所有代码已针对当前环境的网桥名完成更新。
  • 准备好两个终端:一个运行嗅探/伪造脚本,一个在 HostA 执行测试命令。