重复报文从哪来
重复帧通常不是网络产生的,而是采集方式带来的:同一段流量在镜像口与主机上各抓一份、把多个时间段文件合并、或者在两台设备上重复抓取了同一链路。editcap 提供去重能力,把当前报文与窗口内既有报文的长度和内容摘要比对,命中就跳过。由于比对不看时间戳,真实网络里的重传也可能被判为重复,去重前要明确目的。
基本信息
| 基本语法 | editcap [选项] 输入文件 输出文件 |
|---|---|
| -d | 按默认窗口去重,比对长度与内容摘要 |
| -D 窗口 | 按指定的窗口大小去重,窗口越大比对范围越广 |
| -w 时间窗 | 部分版本用于设定时间窗,语义随版本变化,以本机帮助为准 |
| 副作用 | 不区分采集重复与真实重传,可能删掉有效证据 |
| 使用前提 | 先去重再分析,或保留原始文件做对照 |
典型使用场景
- 镜像重复:镜像口与主机同时采集同一段流量,合并后出现成对重复帧
- 多次任务叠加:同一时段分几次抓取后合并,重叠区间产生重复
- 双机采集:两端都在同一汇聚设备上取流,合并且只保留一份
- 存储瘦身:归档前去掉重复帧,减少体积同时保留时序信息
- 统计校核:去重前后对比包数,判断重复比例是否合理
去重示例
去重示例
capinfos merged.pcapng # 先记录原始包数, 便于对比
editcap -d merged.pcapng dedup.pcapng # 默认窗口去重
editcap -D 10 merged.pcapng dedup2.pcapng # 用更大的窗口比对
capinfos dedup2.pcapng # 核对剩余包数与时间范围
tshark -r dedup2.pcapng -Y 'tcp.analysis.retransmission' -T fields -e frame.number | wc -l
# 对比去重前后该类计数, 判断是否误删了真实重传去重前后的核对项
| 核对项 | 去重前 | 去重后应关注 |
|---|---|---|
| 总包数 | 记录原始值 | 减少量应与重复比例相符 |
| 时间范围 | 首末包时间 | 不应变化, 变了说明误删 |
| 重传计数 | 记录基准值 | 明显下降说明真实重传被删 |
| 会话数 | 按 tcp.stream 统计 | 不应减少, 减少即为异常 |
| 文件大小 | 对比压缩比 | 体积下降属预期 |
去重是不可逆的删除操作:取证或需要复盘真实重传的场景不要直接在主文件上执行,先输出到新文件,并保留原始文件与去重参数记录。
不同版本的 editcap 对窗口参数的叫法与含义有差异,跨版本协作时把实际使用的命令与版本一起写进说明,避免对方复现出不同结果。