84 lines
3.9 KiB
Markdown
84 lines
3.9 KiB
Markdown
# 网络安全实验:数据包嗅探与伪造(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 执行测试命令。
|