AfzalHossan-2005021/Packet-Sniffer
GitHub: AfzalHossan-2005021/Packet-Sniffer
基于 Docker 的隔离网络实验环境,用于演示和教学未加密协议(HTTP/Telnet)的数据包嗅探与流量分析。
Stars: 0 | Forks: 0
# 🔍 网络安全:流量嗅探与分析实验
[](LICENSE)
[](https://www.python.org/)
[](https://www.docker.com/)
## 📑 目录
- [✨ 功能](#-features)
- [🎯 概述](#-overview)
- [🏗️ 架构](#️-architecture)
- [📋 前置条件](#-prerequisites)
- [🚀 快速开始](#-quick-start)
- [🛠️ 分步指南](#️-step-by-step-guide)
- [📂 项目结构](#-project-structure)
- [🔄 工作流程](#-workflow)
- [💡 关键概念](#-key-concepts)
- [🐛 故障排除](#-troubleshooting)
- [⚠️ 免责声明](#️-disclaimer)
## ✨ 功能
🎓 **教育重点**
- 专为学习网络安全原理而设计
- 演示真实的数据包嗅探技术
- 展示未加密协议中的漏洞
🔒 **隔离环境**
- 完全使用 Docker Compose 进行容器化
- 安全的沙盒化网络模拟
- 无外部网络干扰
🔌 **多协议支持**
- HTTP(未加密的 Web 流量)
- Telnet(传统的明文协议)
- 易于通过自定义协议进行扩展
⚡ **实时分析**
- 实时数据包捕获和检查
- 凭据拦截演示
- Payload 分析功能
## 🎯 概述
本实验创建了一个隔离的网络环境,以演示未加密协议是如何将敏感数据暴露给网络嗅探的。四个容器在一个桥接的 Docker 网络上进行交互:
| 组件 | 角色 | 目的 |
|-----------|------|---------|
| 🔴 **攻击者** | 被动观察者 | 捕获并分析网络流量 |
| 💻 **受害者** | 流量生成器 | 模拟合法的用户连接 |
| 🌐 **HTTP 服务器** | 服务提供者 | 提供未加密的 Web 内容 |
| 📞 **Telnet 服务器** | 服务提供者 | 提供明文身份验证 |
## 🏗️ 架构
### 系统架构图
```
┌─────────────────────────────────────────────────────────────┐
│ Docker Network (Bridged) │
│ │
│ ┌───────────────┐ ┌──────────────┐ │
│ │ 🔴 Attacker │ │ 💻 Victim │ │
│ │ (Sniffer) │◄────────▶│ (Traffic │ │
│ │ │ │ Generator) │ │
│ └───────────────┘ └──────────────┘ │
│ ▲ │ │
│ │ │ │
│ │ (Captures packets) │ (Sends requests) │
│ │ ▼ │
│ │ ┌──────────────┐ │
│ │ │ 🌐 HTTP │ │
│ └────────────────────│ Server │ │
│ │ │ │ │
│ │ └──────────────┘ │
│ │ │ │
│ │ ┌──────────────┐ │
│ │ │ 📞 Telnet │ │
│ └────────────────────│ Server │ │
│ │ │ │
│ └──────────────┘ │
│ │
└─────────────────────────────────────────────────────────────┘
```
### 容器交互流程
```
graph LR
A["🔴 Attacker
(Python + Scapy)"] -->|Listens on eth0| B["Network Interface"] C["💻 Victim
(Traffic Gen)"] -->|HTTP Request
Telnet Auth| D["Servers"] D -->|Response| C B -->|Captures Packets| A A -->|Displays
Real-time Data| E["Console Output"] style A fill:#ff6b6b,stroke:#c92a2a,color:#fff style C fill:#4ecdc4,stroke:#2a9d8f,color:#fff style D fill:#ffe66d,stroke:#flacc0,color:#333 style E fill:#a8e6cf,stroke:#56c596,color:#333 ``` ## 📋 前置条件 在运行此实验之前,请确保已安装以下软件: - 🐳 **[Docker](https://docs.docker.com/get-docker/)** (v20.10+) - 🐳 **[Docker Compose](https://docs.docker.com/compose/install/)** (v1.29+) - 💻 **Linux/Mac/Windows**(对于 Windows/Mac 需带有 Docker Desktop) ### 版本检查 ``` docker --version docker-compose --version ``` ## 🚀 快速开始 只需 **3 个简单步骤** 即可运行本实验: ### 1️⃣ 构建环境 ``` # 导航到项目目录 cd /home/afzal/Academic/Computer-Security/Packet-Sniffer # 在后台构建并启动所有容器 docker-compose up --build -d ``` ### 2️⃣ 验证容器 ``` # 检查所有容器是否正在运行 docker-compose ps ``` 预期输出: ``` CONTAINER ID IMAGE COMMAND STATUS abc123def456 ...attacker "python3 -u ..." Up 2 minutes xyz789uvw123 ...victim "python3 -u ..." Up 2 minutes def456ghi789 ...http "python3 http_server" Up 2 minutes ghi789jkl012 ...telnet "/bin/bash" Up 2 minutes ``` ### 3️⃣ 开始嗅探! ``` # 终端 1:在 attacker 容器中运行嗅探器 docker exec -it packet-sniffer-attacker-1 python3 sniffer.py # 终端 2:从 victim 容器生成流量 docker exec -it packet-sniffer-victim-1 python3 generate_traffic.py ``` ## 🛠️ 分步指南 ### 详细安装说明 #### 步骤 1:准备环境 ``` # 克隆或导航到仓库 cd /path/to/Packet-Sniffer # 验证所有 Docker 文件是否存在 ls -la Dockerfile.* docker-compose.yml ``` #### 步骤 2:构建并启动容器 ``` # 构建镜像并启动容器 docker-compose up --build -d # 可选:查看实时日志 docker-compose logs -f ``` #### 步骤 3:访问攻击者容器 ``` # 进入 attacker 容器 docker exec -it /bin/bash
# 验证 Scapy 是否可用
python3 -c "import scapy; print(scapy.__version__)"
```
#### 步骤 4:运行嗅探器
```
# 开始数据包嗅探
python3 sniffer.py
# 输出将实时显示捕获的数据包:
# [*] 正在网络上嗅探...
# [+] 捕获到数据包:...
```
#### 步骤 5:生成网络流量
在另一个终端中:
```
# 访问 victim 容器
docker exec -it /bin/bash
# 触发流量生成
python3 generate_traffic.py
```
#### 步骤 6:观察结果
切换回攻击者终端以查看实时数据包捕获,包括:
- 🌐 HTTP 标头和 Payload
- 👤 Telnet 凭据
- 🔗 连接详细信息(IP、端口、协议)
## 📂 项目结构
```
Packet-Sniffer/
├── 📋 README.md # This comprehensive guide
├── 🐳 docker-compose.yml # Container orchestration
│
├── 🐋 Dockerfile.attacker # Attacker node (Python + Scapy)
├── 🐋 Dockerfile.victim # Victim node (Traffic generator)
├── 🐋 Dockerfile.http # HTTP server container
├── 🐋 Dockerfile.telnet # Telnet server container
│
├── 🐍 sniffer.py # Main sniffing script (Attacker)
├── 🐍 generate_traffic.py # Traffic generation script (Victim)
├── 🐍 http_server.py # Simple HTTP server
└── 🖼️ [Diagrams & Documentation]
```
### 文件说明
| 文件 | 目的 | 主要特性 |
|------|---------|--------------|
| `docker-compose.yml` | 定义所有容器和网络 | 卷映射、端口绑定、网络配置 |
| `Dockerfile.attacker` | 攻击者环境设置 | Scapy、数据包工具、Python3 |
| `Dockerfile.victim` | 受害者环境设置 | HTTP 客户端、Telnet 客户端、requests 库 |
| `sniffer.py` | 数据包捕获脚本 | 实时过滤、Payload 提取 |
| `generate_traffic.py` | 流量生成脚本 | 协议模拟、自动化请求 |
| `http_server.py` | 基础 HTTP 服务器 | 未加密的响应、静态内容 |
## 🔄 工作流程
### 完整攻击模拟流程
```
sequenceDiagram
participant V as 💻 Victim
participant N as 🌐 Network
participant A as 🔴 Attacker
participant S as 🌐 Server
A->>N: ⚠️ Start Sniffing (Listen Mode)
Note over A: sniffer.py running
Capturing packets V->>S: 📤 Send HTTP Request Note over V: generate_traffic.py S->>N: 📨 Transmit Response Note over N: Unencrypted Data N->>A: 📥 Captured Packet A->>A: 🔍 Inspect Headers A->>A: 🔍 Extract Payload A->>A: 📊 Display Results V->>S: 🔐 Send Telnet Auth (plain-text) S->>V: ✅ Authentication Response N->>A: 📥 Capture Credentials A->>A: ⚠️ Log Sensitive Data ``` ### 真实时间线 1. **设置阶段**(1-2 分钟) - 启动 Docker 环境 - 容器初始化并连接到网络 2. **嗅探阶段**(持续进行) - 攻击者开始监听网络接口 - 准备捕获所有流量 3. **流量生成阶段**(30 秒 - 5 分钟) - 受害者发起连接 - 服务器响应数据 - 攻击者捕获数据包 4. **分析阶段**(实时) - 在攻击者终端中显示 - 可见凭据、标头、Payload ## 💡 关键概念 ### 什么是数据包嗅探? 数据包嗅探是拦截和捕获通过网络传输的数据的过程。在未加密的协议中,敏感信息会变得可见: **易受攻击的协议:** - 🌐 **HTTP**:以明文形式传输标头、用户名、密码 - 📞 **Telnet**:无加密;所有通信均可读 - 📧 **FTP**:凭据在传输过程中不受保护 **受保护的协议:** - 🔒 **HTTPS**:加密的通信层(SSL/TLS) - 🔐 **SSH**:加密的远程访问 ### 为什么这很重要 了解数据包嗅探对于以下几个方面至关重要: - 🛡️ **防御安全**:识别漏洞 - 📚 **教育目的**:学习网络基础知识 - 🔐 **协议设计**:体会加密的重要性 ## 🐛 故障排除 ### 常见问题及解决方案 #### ❌ “docker-compose: command not found” ``` # 解决方案:更新安装路径 # 在 Mac/Windows 上:确保已安装并运行 Docker Desktop # 在 Linux 上:安装 Docker Compose sudo apt-get install docker-compose ``` #### ❌ “端口被占用” ``` # 查找并停止冲突的容器 docker ps -a docker stop
# 或者修改 docker-compose.yml 中的端口
```
#### ❌ “容器之间无法通信”
```
# 检查网络状态
docker network ls
docker network inspect
# 重启容器
docker-compose restart
```
#### ❌ “Scapy 导入错误”
```
# 验证安装
docker exec -it pip list | grep scapy
# 如有需要则重新安装
docker exec -it pip install scapy
```
#### ❌ “未捕获到数据包”
```
# 在 sniffer.py 中检查 interface 名称
docker exec -it ip addr
# 验证网络 interface 是否正确(通常是 'eth0')
```
### 调试命令
```
# 查看容器日志
docker-compose logs -f
# 访问容器 shell
docker exec -it /bin/bash
# 检查网络连通性
docker exec -it ping
# 列出开放端口
docker exec -it netstat -tlnp
```
## ⚠️ 免责声明
**⚠️ 仅用于教育目的**
本项目严格设计用于:
- 📚 学术学习与研究
- 🏫 计算机安全教育
- 🔬 了解网络协议
- 🛡️ 防御性安全培训
**禁止的用途:**
- ❌ 未经授权访问网络/系统
- ❌ 未经许可拦截数据
- ❌ 用于恶意目的或非法活动
**法律声明:** 未经授权访问计算机系统是违法行为。请仅在你拥有或获得明确书面许可的系统上使用此实验。用户有责任遵守其所在司法管辖区的所有适用法律和法规。
## 📞 支持与贡献
如有问题、建议或改进:
- 🐛 通过 GitHub Issues 报告 Bug
- 💡 提供详细说明以提出新功能建议
- 📝 通过 Pull Requests 贡献改进
(Python + Scapy)"] -->|Listens on eth0| B["Network Interface"] C["💻 Victim
(Traffic Gen)"] -->|HTTP Request
Telnet Auth| D["Servers"] D -->|Response| C B -->|Captures Packets| A A -->|Displays
Real-time Data| E["Console Output"] style A fill:#ff6b6b,stroke:#c92a2a,color:#fff style C fill:#4ecdc4,stroke:#2a9d8f,color:#fff style D fill:#ffe66d,stroke:#flacc0,color:#333 style E fill:#a8e6cf,stroke:#56c596,color:#333 ``` ## 📋 前置条件 在运行此实验之前,请确保已安装以下软件: - 🐳 **[Docker](https://docs.docker.com/get-docker/)** (v20.10+) - 🐳 **[Docker Compose](https://docs.docker.com/compose/install/)** (v1.29+) - 💻 **Linux/Mac/Windows**(对于 Windows/Mac 需带有 Docker Desktop) ### 版本检查 ``` docker --version docker-compose --version ``` ## 🚀 快速开始 只需 **3 个简单步骤** 即可运行本实验: ### 1️⃣ 构建环境 ``` # 导航到项目目录 cd /home/afzal/Academic/Computer-Security/Packet-Sniffer # 在后台构建并启动所有容器 docker-compose up --build -d ``` ### 2️⃣ 验证容器 ``` # 检查所有容器是否正在运行 docker-compose ps ``` 预期输出: ``` CONTAINER ID IMAGE COMMAND STATUS abc123def456 ...attacker "python3 -u ..." Up 2 minutes xyz789uvw123 ...victim "python3 -u ..." Up 2 minutes def456ghi789 ...http "python3 http_server" Up 2 minutes ghi789jkl012 ...telnet "/bin/bash" Up 2 minutes ``` ### 3️⃣ 开始嗅探! ``` # 终端 1:在 attacker 容器中运行嗅探器 docker exec -it packet-sniffer-attacker-1 python3 sniffer.py # 终端 2:从 victim 容器生成流量 docker exec -it packet-sniffer-victim-1 python3 generate_traffic.py ``` ## 🛠️ 分步指南 ### 详细安装说明 #### 步骤 1:准备环境 ``` # 克隆或导航到仓库 cd /path/to/Packet-Sniffer # 验证所有 Docker 文件是否存在 ls -la Dockerfile.* docker-compose.yml ``` #### 步骤 2:构建并启动容器 ``` # 构建镜像并启动容器 docker-compose up --build -d # 可选:查看实时日志 docker-compose logs -f ``` #### 步骤 3:访问攻击者容器 ``` # 进入 attacker 容器 docker exec -it
Capturing packets V->>S: 📤 Send HTTP Request Note over V: generate_traffic.py S->>N: 📨 Transmit Response Note over N: Unencrypted Data N->>A: 📥 Captured Packet A->>A: 🔍 Inspect Headers A->>A: 🔍 Extract Payload A->>A: 📊 Display Results V->>S: 🔐 Send Telnet Auth (plain-text) S->>V: ✅ Authentication Response N->>A: 📥 Capture Credentials A->>A: ⚠️ Log Sensitive Data ``` ### 真实时间线 1. **设置阶段**(1-2 分钟) - 启动 Docker 环境 - 容器初始化并连接到网络 2. **嗅探阶段**(持续进行) - 攻击者开始监听网络接口 - 准备捕获所有流量 3. **流量生成阶段**(30 秒 - 5 分钟) - 受害者发起连接 - 服务器响应数据 - 攻击者捕获数据包 4. **分析阶段**(实时) - 在攻击者终端中显示 - 可见凭据、标头、Payload ## 💡 关键概念 ### 什么是数据包嗅探? 数据包嗅探是拦截和捕获通过网络传输的数据的过程。在未加密的协议中,敏感信息会变得可见: **易受攻击的协议:** - 🌐 **HTTP**:以明文形式传输标头、用户名、密码 - 📞 **Telnet**:无加密;所有通信均可读 - 📧 **FTP**:凭据在传输过程中不受保护 **受保护的协议:** - 🔒 **HTTPS**:加密的通信层(SSL/TLS) - 🔐 **SSH**:加密的远程访问 ### 为什么这很重要 了解数据包嗅探对于以下几个方面至关重要: - 🛡️ **防御安全**:识别漏洞 - 📚 **教育目的**:学习网络基础知识 - 🔐 **协议设计**:体会加密的重要性 ## 🐛 故障排除 ### 常见问题及解决方案 #### ❌ “docker-compose: command not found” ``` # 解决方案:更新安装路径 # 在 Mac/Windows 上:确保已安装并运行 Docker Desktop # 在 Linux 上:安装 Docker Compose sudo apt-get install docker-compose ``` #### ❌ “端口被占用” ``` # 查找并停止冲突的容器 docker ps -a docker stop
**为计算机安全教育而创建** 🔐
*最后更新:2026 年 5 月*
[↑ 返回顶部](#-network-security-traffic-sniffing--analysis-lab)
标签:Docker, 协议分析, 安全教育, 安全防御评估, 权限提升, 版权保护, 网络安全, 请求拦截, 逆向工具, 防御绕过, 隐私保护, 靶场环境