# analysisOfQqVoiceTelephoneLocationAndPacketCapture **Repository Path**: codevibe/analysisOfQqVoiceTelephoneLocationAndPacketCapture ## Basic Information - **Project Name**: analysisOfQqVoiceTelephoneLocationAndPacketCapture - **Description**: analysisOfQqVoiceTelephoneLocationAndPacketCapture - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-01-22 - **Last Updated**: 2026-01-24 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # QQ语音通话位置与数据包捕获分析工具 ## 项目概述 这是一个专门用于分析QQ语音通话的数据包捕获分析工具。该工具可以从PCAP网络数据包捕获文件中提取QQ语音通话相关信息,并进行地理位置分析,帮助用户了解语音通话的对端IP地址位置。 ## 功能特点 - **数据包解析**: 解析PCAP格式的网络数据包捕获文件 - **QQ语音识别**: 通过多种方式识别QQ语音通话数据包(端口模式、十六进制特征码) - **地理位置分析**: 对数据包中的IP地址进行地理位置定位 - **多API支持**: 支持内部API和外部API(ipgeolocation.io)进行IP定位 - **批量处理**: 支持批量分析多个PCAP文件 - **详细报告**: 生成JSON格式的详细分析结果和Markdown格式的摘要报告 - **彩色日志**: 控制台输出带颜色的日志信息 ## 目录结构 ``` analysisOfQqVoiceTelephoneLocationAndPacketCapture/ ├── main.py # 主程序入口 ├── config.ini # 配置文件 ├── requirements.txt # 依赖包列表 ├── ip_locator/ # IP定位模块 │ ├── __init__.py │ └── ip_locator.py ├── pcap_analyzer/ # 数据包分析模块 │ ├── __init__.py │ ├── location_analyzer.py │ └── packet_parser.py ├── utils/ # 工具模块 │ ├── logger.py # 彩色日志工具 │ └── tools.py # 通用工具 └── test/ # 测试文件 ├── get_ip_location_separated.py └── tools_test.py ``` ## 安装与配置 ### 1. 依赖安装 ```bash pip install -r requirements.txt ``` 主要依赖包: - `pyshark`: 用于解析PCAP文件 - `pandas`: 数据处理 - `requests`: 网络请求 - `geopy`: 地理位置编码 - `scapy`: 网络包处理 ### 2. 配置文件 编辑 `config.ini` 文件: ```ini [tshark] tshark_path = D:\Program Files\Wireshark\tshark.exe [ip_location] api_key = your_ipgeolocation_io_api_key_here ``` - `tshark_path`: TShark可执行文件路径(可选,如果不配置将使用系统PATH) - `api_key`: ipgeolocation.io的API密钥(用于外部IP定位服务) ### 3. TShark配置 如果要使用TShark高级功能,需要安装Wireshark套件并配置tshark.exe路径。 ## 使用方法 ### 命令行使用 ```bash # 分析单个PCAP文件 python main.py path/to/your/file.pcap # 指定输出目录 python main.py path/to/your/file.pcap -o ./output # 指定TShark路径 python main.py path/to/your/file.pcap --tshark-path /path/to/tshark # 批量分析目录下所有PCAP文件 python main.py --batch-analyze # 指定批量分析的输入目录 python main.py --batch-analyze --input-dir ./my_input # 使用多线程进行批量分析 python main.py --batch-analyze --input-dir ./my_input -t 4 # 列出当前目录的PCAP文件 python main.py --list-pcaps ``` ### 自动模式 如果运行时未指定PCAP文件,程序会自动检测当前目录下的PCAP文件并选择最新修改的一个进行分析。 ## 技术架构 ### 主要模块 #### 1. PacketParser(数据包解析器) 位于 `pcap_analyzer/packet_parser.py` - 解析PCAP文件并提取数据包信息 - 过滤QQ语音流量(基于端口、协议和特征) - 识别连接对信息 - 通过十六进制模式("020048")识别QQ语音数据包 - 统计数据包信息 #### 2. LocationAnalyzer(位置分析器) 位于 `pcap_analyzer/location_analyzer.py` - 通过IP地址获取地理位置信息 - 支持内外部API双重定位 - 分析连接的地理位置分布 - 识别QQ语音通话对端IP地址 - 支持两种模式识别对端IP: - 流量模式分析 - 十六进制特征码模式("020048") #### 3. IPLocator(IP定位器) 位于 `ip_locator/ip_locator.py` - 使用免费的ip-api.com服务进行IP定位 - 判断IP是否为公网IP - 批量处理多个IP地址 #### 4. ColoredLogger(彩色日志) 位于 `utils/logger.py` - 提供带颜色的日志输出(蓝色信息、黄色警告、红色错误) - 包含时间戳(HH:MM:SS格式) - 兼容Windows系统 #### 5. Tools(工具集) 位于 `utils/tools.py` - 外部IP定位API调用(ipgeolocation.io) - 配置文件读取 - 结果合并功能 ### 识别算法 #### QQ语音数据包识别 程序使用两种方式识别QQ语音数据包: 1. **端口模式识别**: - 检查常见QQ语音端口(8000-8009, 9000-9009, 10000, 17000-17009) - UDP协议 + RTP端口范围(5000-65535) - 常见语音通信端口(80, 443, 53, 1935, 3478, 5060, 5061) 2. **十六进制特征码识别**: - 搜索包含"020048"十六进制模式的数据包 - 使用TShark的`frame contains 02:00:48`过滤器 #### 对端IP识别 1. **流量模式分析**:找出流量最大的公网IP地址 2. **十六进制模式分析**:基于"020048"特征码的数据包中的IP ## 输出文件 程序会生成两种输出文件: 1. **JSON详细结果文件** (`*_analysis.json`): - 元数据信息 - 数据包列表(前100个) - 连接对信息 - 语音包信息(前100个) - 位置分析结果 - 对端IP分析结果 - 语音流量分析 2. **Markdown摘要报告** (`*_summary.md`): - 基本信息统计 - QQ语音对端IP分析 - IP地理位置分析 - 语音流量分析 - 协议和端口分布 ## 代码逻辑详解 ### 主程序流程 1. **初始化**:加载配置文件,设置参数 2. **数据包解析**:使用PacketParser解析PCAP文件 3. **连接分析**:提取连接对信息 4. **语音流量过滤**:识别QQ语音数据包 5. **位置分析**:对所有IP进行地理位置定位 6. **对端IP识别**:使用两种模式识别QQ语音对端IP 7. **结果输出**:生成JSON和Markdown格式的报告 ### 关键算法 #### 双API IP定位合并 ```python def get_ip_16location_separated(self, ip_address: str) -> Optional[Dict[str, any]]: result = self.locator.get_ip_location(ip_address) # 内部API OutAPIResult = tools.get_ip_geolocation(ip_address, self.api_key) # 外部API # 如果内部失败,使用外部结果 # 如果两者都有,合并结果 # 如果只有内部,直接返回 ``` #### 公网IP判断 ```python def is_public_ip(self, ip: str) -> bool: # 排除私有IP范围: # 10.x.x.x # 192.168.x.x # 172.16-31.x.x # 127.x.x.x ``` ## 批量处理机制 支持单线程和多线程批量处理: - 单线程:逐个处理文件,适合调试 - 多线程:使用ProcessPoolExecutor并行处理,提高效率 - 进度显示:显示当前处理进度(X/Y) ## 错误处理 - 网络请求超时处理 - 文件不存在检查 - 数据包解析异常处理 - IP定位服务失败处理 - 彩色日志兼容性处理 ## 注意事项 1. **隐私保护**:工具仅用于合法合规的网络分析 2. **API限制**:外部IP定位API可能有限额限制 3. **文件格式**:支持多种PCAP格式(.pcap, .pcapng, .cap等) 4. **性能考虑**:大文件分析可能需要较长时间 5. **网络依赖**:IP定位功能需要互联网连接 ## 开发扩展 ### 新增功能建议 1. **可视化界面**:添加Web界面或GUI 2. **更多协议支持**:支持其他语音协议分析 3. **离线地图**:集成离线地图功能 4. **数据导出**:支持更多数据导出格式 5. **定时分析**:定期分析网络流量 ### 代码改进方向 1. **模块解耦**:进一步分离各功能模块 2. **单元测试**:增加完整的单元测试覆盖 3. **性能优化**:优化大数据量处理性能 4. **配置灵活化**:支持更多自定义配置选项 ## 维护信息 - **开发语言**: Python 3.7+ - **许可证**: MIT License - **维护状态**: 积极维护 - **技术支持**: 详见GitHub Issues