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

84 lines
3.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 网络安全实验数据包嗅探与伪造Sniffing & Spoofing演示指南
这份文档旨在帮助你快速回顾实验步骤、关键命令以及核心理论,应对老师的实验验收。
---
## 0. 准备工作:启动实验环境
`Labsetup` 目录下执行以下操作:
1. **启动容器**
```bash
docker-compose up -d
```
2. **确认网络接口**
由于实验代码中硬编码了网卡名称(如 `br-c031fbf1a197`),请务必在宿主机执行 `ifconfig` 或 `ip 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 会收到一个来自虚假源 IP如 `1.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)
### 编译与运行
```bash
# 在容器或挂载目录下编译
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 执行测试命令。