一个使用 Python 和 Scapy 实现的 TCP 协议仿真工具,采用现代化的架构设计和设计模式,用于学习和研究 TCP 协议的工作原理。
- 采用现代化的架构设计
- 依赖注入容器管理服务
- 事件驱动架构
- 接口分离原则
- 配置管理
- 使用设计模式
- 工厂模式:数据包创建
- 状态模式:TCP 状态转换
- 观察者模式:事件通知
- 发布-订阅模式:组件通信
- 支持自定义 TCP 参数
- IP 地址和端口配置
- 序列号和确认号
- 窗口大小
- 调试模式
- 完善的日志系统
- 多级别日志记录
- 数据包捕获
- 错误追踪
- 可扩展的架构
- 插件式设计
- 接口标准化
- 松耦合组件
- Python 3.7+
- Windows/Linux/macOS
- 管理员/root 权限(用于网络数据包捕获)
- Wireshark(用于查看捕获的数据包)
- 克隆仓库:
git clone https://github.com/guangqianhui/tcp-simulation.git
cd tcp-simulation
- 运行安装脚本:
python install.py
- 激活虚拟环境:
# Windows
.\venv\Scripts\activate
# Linux/macOS
source venv/bin/activate
python -m tcp_simulation --src-ip 192.168.1.100 --dst-ip 192.168.1.101
python -m tcp_simulation \
--src-ip 192.168.1.100 \
--dst-ip 192.168.1.101 \
--src-port 12345 \
--dst-port 80 \
--seq 1000 \
--ack 2000 \
--window 65535 \
--debug
--src-ip
: 源 IP 地址(必需)--dst-ip
: 目标 IP 地址(必需)--src-port
: 源端口号(默认:随机)--dst-port
: 目标端口号(默认:80)--seq
: 初始序列号(默认:随机)--ack
: 初始确认号(默认:0)--window
: 窗口大小(默认:65535)--debug
: 启用调试模式(可选)
tcp-simulation/
├── tcp_simulation/
│ ├── config/
│ │ ├── __init__.py
│ │ └── settings.py # 配置管理
│ ├── core/
│ │ ├── __init__.py
│ │ ├── container.py # 依赖注入容器
│ │ ├── events.py # 事件系统
│ │ ├── interfaces.py # 接口定义
│ │ ├── packet_factory.py # 数据包工厂
│ │ ├── tcp_state.py # TCP状态
│ │ └── tcp_simulation.py # TCP仿真核心
│ ├── utils/
│ │ ├── __init__.py
│ │ ├── error_handler.py # 错误处理
│ │ └── logger.py # 日志系统
│ ├── observers/
│ │ ├── __init__.py
│ │ ├── packet_logger.py # 数据包日志
│ │ └── packet_capture.py # 数据包捕获
│ └── __main__.py # 程序入口
├── tests/
│ ├── __init__.py
│ ├── test_packet_factory.py
│ ├── test_tcp_state.py
│ └── test_tcp_simulation.py
├── install.py
├── setup.py
├── requirements.txt
├── README.md
└── LICENSE
- 使用数据类管理配置
- 支持 TCP 和日志配置
- 类型安全的配置访问
- 发布-订阅模式
- 支持多种事件类型
- 松耦合的组件通信
- 服务注册和解析
- 接口实现管理
- 依赖关系管理
- 清晰的接口契约
- 类型提示支持
- 实现一致性保证
- 工厂模式实现
- 支持多种数据包类型
- 参数化数据包创建
- 状态模式实现
- 状态转换管理
- 事件处理机制
- 观察者模式实现
- 数据包日志记录
- 数据包捕获功能
- 在
tcp_simulation/core/tcp_state.py
中创建新的状态类 - 实现
ITCPState
接口 - 在
TCPState
类中注册新状态
- 在
tcp_simulation/observers
目录下创建新的观察者类 - 实现
IObserver
接口 - 在容器中注册新观察者
- 在
tcp_simulation/core/events.py
中的EventType
枚举中添加新类型 - 实现相应的事件处理逻辑
- 在需要的地方触发事件
运行测试:
# 激活虚拟环境后
pytest tests/
- 需要管理员/root 权限运行
- 确保 Wireshark 已安装
- 如果遇到权限问题,请使用
python -m tcp_simulation
命令运行
日志文件保存在 logs
目录下:
tcp_simulation.log
: 主日志文件packet_capture.pcap
: 数据包捕获文件
本项目采用 MIT 许可证 - 详见 LICENSE 文件
欢迎提交 Pull Request 或创建 Issue!
- 作者:Guang Qianhui
- 邮箱:xuqiguang9@gmail.com
- GitHub:guangqianhui
- 添加全面的 TCP 测试文档
- 增加新的测试场景
- 完善 TCP 选项测试
- 添加流量控制和拥塞控制测试
- 基础功能测试
- 网络环境兼容性测试
- 协议合规性测试
- 异常处理测试
- 状态机测试
- docs/tcp_test_cases.md
- tests/test_tcp_comprehensive.py
- tcp_simulation/core/tcp_simulation.py