# test_toa_parser **Repository Path**: aaronsysu/test_toa_parser ## Basic Information - **Project Name**: test_toa_parser - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-08-17 - **Last Updated**: 2025-08-17 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # TOA (TCP Option Address) 解析器 这是一个用C++实现的TOA字段提取工具,能够从TCP数据包的选项字段中提取真实的源IP地址和端口。 ## 功能特性 - 解析TCP选项中的TOA字段 - 支持多种TCP选项混合的情况 - 完整的错误处理和边界检查 - 网络字节序转换 - 全面的单元测试覆盖 ## TOA协议说明 TOA (TCP Option Address) 是一种TCP选项,用于在负载均衡器或代理服务器中传递客户端的真实IP地址。 TOA选项格式: ``` +--------+--------+--------+--------+--------+--------+--------+--------+ | Kind | Length | Port | IP Address | +--------+--------+--------+--------+--------+--------+--------+--------+ ``` - Kind: 选项类型 (通常为254) - Length: 选项长度 (固定为8字节) - Port: 真实源端口 (2字节,网络字节序) - IP Address: 真实源IP地址 (4字节,网络字节序) ## 编译和运行 ### 使用构建脚本(推荐) ```bash # 一键构建 ./build.sh # 进入构建目录 cd build # 运行测试 make run-tests # 或者 ctest # 运行示例 make run-example ``` ### 手动构建 ```bash # 创建构建目录 mkdir build && cd build # 配置项目 cmake .. # 编译 (根据系统调整并行数) make -j4 # Linux: make -j$(nproc), macOS: make -j$(sysctl -n hw.ncpu) # 运行测试 ctest --verbose # 清理(删除build目录) cd .. && rm -rf build ``` ## 使用示例 ```cpp #include "toa_parser.h" // 解析网络包中的TOA字段 ToaResult result = ToaParser::extractToa(packet_data, packet_length); if (result.found) { std::cout << "真实源IP: " << result.real_src_ip << std::endl; std::cout << "真实源端口: " << result.real_src_port << std::endl; } else { std::cout << "未找到TOA选项" << std::endl; } ``` ## 真实网络包测试 项目包含了基于真实网络环境的测试用例,覆盖了主流云服务商和负载均衡器的TOA实现: - **腾讯云 CLB**: 标准TOA格式 - **阿里云 SLB**: 包含多选项的TOA包 - **HAProxy**: SYN包中的TOA选项 - **Nginx Stream**: 反向代理TOA实现 - **复杂选项包**: 包含多种TCP选项的混合场景 - **边界情况**: 最小包、大包、选项对齐等 运行真实网络包测试: ```bash cd build make run-real-tests ``` ## Python集成测试 项目提供了Python工具来生成TOA网络包,以及C++服务器来接收和解析这些包: ### 快速演示 ```bash # 一键演示(生成包 + 分析 + 启动服务器) ./demo.sh ``` ### 分步操作 ```bash # 1. 生成TOA测试包 python3 toa_packet_generator.py --save packets.bin # 2. 分析生成的包 ./build/packet_file_reader packets.bin # 3. 启动TOA解析服务器 ./build/toa_server 8888 # 4. 发送测试包到服务器(另一个终端) python3 toa_packet_generator.py --send --host 127.0.0.1 --port 8888 ``` 详细说明请参考 [Python集成指南](PYTHON_INTEGRATION.md)。 ## 测试覆盖 ### 基础功能测试 - 基本TOA提取功能 - 无TOA选项的包处理 - 无效包数据处理 - 多选项混合情况 - 无效TOA选项处理 - 边界情况测试 ### 真实网络包测试 - 腾讯云CLB TOA包 - 阿里云SLB TOA包 - HAProxy TOA包 - Nginx Stream TOA包 - 复杂多选项TCP包 - 边界对齐测试 - 大数据包测试 - 最小TOA包测试 ## 注意事项 1. 输入的packet_data应该指向TCP头部的开始位置 2. 函数会自动处理网络字节序转换 3. 对于无效或损坏的数据包,函数会安全返回失败结果 4. TOA选项类型默认为254,可根据实际环境调整 ## 项目结构 ``` . ├── CMakeLists.txt # CMake配置文件 ├── build.sh # 一键构建脚本 ├── toa_parser.h # TOA解析器头文件 ├── toa_parser.cpp # TOA解析器实现 ├── test_toa_parser.cpp # 基础单元测试 ├── real_packet_tests.cpp # 真实网络包测试 ├── example.cpp # 使用示例 ├── toa_server.cpp # TOA解析服务器 ├── packet_file_reader.cpp # 数据包文件分析器 ├── toa_packet_generator.py # Python数据包生成器 ├── demo.sh # 完整演示脚本 ├── README.md # 项目说明 ├── TECHNICAL_DETAILS.md # 技术详解 └── .gitignore # Git忽略文件 ``` ## CMake特性 - 支持Debug和Release构建模式 - 自动生成静态库 - 集成CTest测试框架 - 支持安装到系统目录 - 跨平台兼容(Linux、macOS、Windows)