Pcap Analyse Skill
Description
分析 pcap/pcapng 网络抓包文件,专注于代理服务器(Socks5 over TLS/HTTP)场景下的连接诊断、性能评估和异常检测。
Usage
当用户请求分析 pcap 文件,或者提供一个抓包文件并询问网络连接质量、异常或性能问题时使用此 skill。
Instructions
执行此 skill 时,请遵循以下步骤进行分析。如果用户没有提供 pcap 文件路径,请先询问。
重要:你不能直接读取二进制 pcap 文件。你必须编写并执行 Python 脚本(推荐使用 scapy 库,如果环境没有则尝试使用 tshark 命令行工具)来提取信息。
1. 编写分析脚本
编写一个 Python 脚本来解析 pcap 文件,脚本需要提取并计算以下指标:
A. 基础信息与抓包点推断
- •统计源 IP 和目的 IP 的出现频率。
- •分析 TCP SYN 包的 TTL (Time To Live) 和 MSS (Max Segment Size)。通常客户端发出的包 TTL 较大(如 64, 128),经过路由后会减少。如果抓到的入站包 TTL 接近默认值(未减少太多),可能是服务端抓包;如果出站包 TTL 是默认值,则是本地发出的。
- •结合端口号(如 8001, 8002)判断流量方向。
B. 连接异常分析
- •重传率 (Retransmission Rate): 重传包数 / 总包数。
- •复位连接 (RST): 统计 RST 包的数量及出现阶段(握手期、数据传输期、结束期)。
- •握手失败: 有 SYN 但无 SYN/ACK 的比例。
- •TLS 错误: 检查是否有 TLS Alert 消息。
C. 性能分析
- •TCP 握手延迟 (RTT): SYN 到 SYN/ACK 的时间差。
- •TLS 握手延迟: Client Hello 到 Handshake Finished 的时间。
- •数据传输 RTT: 数据包与对应 ACK 之间的时间差统计(平均值、最大值、最小值、抖动)。
D. 连接复用情况
- •统计每个 TCP 流 (Stream) 的持续时间。
- •统计每个流的数据传输量。
- •判断长连接 (Keep-Alive) 的使用情况:是否有长时间空闲但未断开的连接,或者单连接承载多次数据交互。
E. 阻塞与拥塞分析
- •Zero Window: 统计 TCP Zero Window 通告次数(接收端缓冲区满,通知发送端暂停发送)。
- •Window Full: 统计发送端未收到 ACK 而导致发送窗口耗尽的情况。
- •吞吐量波动: 检查是否有明显的吞吐量骤降。
F. 高并发与吞吐量评估
- •并发连接数: 统计每一秒内的活跃 TCP 连接数峰值。
- •每秒请求数 (RPS): 如果是 HTTP,估算请求速率。
- •峰值带宽: 计算每秒传输的最大字节数。
2. 执行分析与报告
运行脚本获取输出,并生成一份详细的分析报告。报告必须包含以下章节:
- •
抓包环境推断:
- •结论:是客户端抓包还是代理服务器端抓包?
- •依据:IP 分布、TTL 特征、端口方向。
- •
连接健康度与异常:
- •异常连接比例。
- •具体的错误类型(重传、RST、超时等)及其对用户体验的潜在影响。
- •
性能指标:
- •平均/P95 延迟数据。
- •握手耗时分析。
- •
连接复用分析:
- •连接是否被有效复用(Socks5/HTTP Keep-Alive)。
- •是否存在频繁新建连接导致的开销。
- •
阻塞情况:
- •是否发现 Zero Window 或流控阻塞。
- •是否有队头阻塞迹象。
- •
负载能力评估:
- •当前并发峰值和吞吐峰值。
- •基于当前性能指标(如 RTT 抖动、丢包率随流量变化),预估系统在高并发下的抗压能力。
3. 示例 Python 代码结构 (供参考)
python
from scapy.all import *
import collections
# 读取 pcap
packets = rdpcap("path/to/file.pcap")
# 初始化统计变量
# ...
for pkt in packets:
if TCP in pkt:
# 统计逻辑
# ...
# 输出结果
注意: 如果环境不支持 Python scapy,请尝试使用 tshark 命令:
tshark -r file.pcap -q -z io,stat,1 -z conv,tcp
以及 tshark -r file.pcap -Y "tcp.analysis.flags" 来分析异常。