3.9 KiB
3.9 KiB
网络安全实验:数据包嗅探与伪造(Sniffing & Spoofing)演示指南
这份文档旨在帮助你快速回顾实验步骤、关键命令以及核心理论,应对老师的实验验收。
0. 准备工作:启动实验环境
在 Labsetup 目录下执行以下操作:
- 启动容器:
docker-compose up -d - 确认网络接口:
由于实验代码中硬编码了网卡名称(如
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)
- 演示重点:
- Attacker 运行
sudo python3 sniff_and_spoof.py。 - HostA 执行
ping 1.2.3.4-> 成功收到回复(Attacker 伪造的)。 - HostA 执行
ping 10.9.0.99(局域网内不存在的 IP) -> 失败。- 原理深度解析:因为 HostA 会先发送 ARP 请求 寻找
10.9.0.99的 MAC 地址。由于该 IP 不存在,ARP 无响应,IP 包根本发不出去,Attacker 也就嗅探不到请求。
- 原理深度解析:因为 HostA 会先发送 ARP 请求 寻找
- 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
- Q: 为什么攻击者能看到其他机器的流量?
- A: 容器处于
host网络模式,且开启了 混杂模式 (Promiscuous Mode),允许网卡接收目的 MAC 不是本机的帧。
- A: 容器处于
- Q: 交换式网络环境下嗅探有什么限制?
- A: 在真实物理交换机下,除非进行 ARP 欺骗或配置端口镜像,否则混杂模式只能看到广播帧和发往本机的帧。Docker 虚拟网桥模拟了这种环境。
- Q: Scapy 与 C 语言开发相比有什么优缺点?
- A: Scapy 开发效率极高,一行代码搞定协议堆叠;C 语言执行效率高,能更深入底层,适合学习协议栈细节。
演示清单 (Checklist)
docker-compose up -d环境就绪。- 找到正确的
br-xxxx网桥接口名。 - 所有代码已针对当前环境的网桥名完成更新。
- 准备好两个终端:一个运行嗅探/伪造脚本,一个在 HostA 执行测试命令。