将多个分段btsnoop文件合并为一个
一、btsnoop.log 文件格式简介
标准的 btsnoop.log
文件头部为 16 个字节,格式如下:
0000 62 74 73 6E 6F 6F 70 00 00 00 00 01 00 00 03 EAb t s n o o p \0 ...
- 前 8 字节是 “btsnoop\0”
- 后面的是版本信息和标志位
- 头部总共 16 字节
你如果有多个 btsnoop.log
文件,想把它们合并成一个文件供 Wireshark 分析,只能保留第一个文件的头部,其余文件必须删除前 16 字节。
二、使用 Vim 去掉头部并合并
方法:使用 Vim 打开多个文件,去掉头部并拼接
假设你有多个文件:
btsnoop1.log
btsnoop2.log
btsnoop3.log
你想将它们合并为 merged.log
,并只保留第一个文件的头部。
步骤如下:
1. 去掉第2个及之后文件的前16字节
vim btsnoop2.log
进入 Vim 后执行命令:
:%!tail -c +17 :wq
解释:
:%!tail -c +17
:从第17个字节开始显示(即去掉前16字节):wq
保存并退出
对 btsnoop3.log
重复操作。
2. 使用 Vim 合并文件
vim merged.log
进入 Vim 后,在命令模式下输入:
:r btsnoop1.log
:r btsnoop2.log
:r btsnoop3.log
这会按顺序把这几个文件的内容插入到 merged.log
中。
3. 保存退出
:wq
三、 一键命令行方式(更快)
如果不执着用 Vim,也可以直接用命令行(推荐):
# 保留第一个文件的全部内容
cat btsnoop1.log > merged.log# 从第2个文件起去掉前16字节并追加
tail -c +17 btsnoop2.log >> merged.log
tail -c +17 btsnoop3.log >> merged.log
提供一个脚本
merge_btsnoop.sh
#!/bin/bash# 检查参数
if [ "$#" -lt 2 ]; thenecho "用法: $0 btsnoop1.log btsnoop2.log ... > merged.log"exit 1
fi# 输出文件名
OUTPUT="merged.log"# 清理旧文件(如果已存在)
rm -f "$OUTPUT"# 标记是否是第一个文件
FIRST=1# 遍历所有参数文件
for FILE in "$@"; doif [ ! -f "$FILE" ]; thenecho "文件不存在: $FILE"exit 1fiif [ "$FIRST" -eq 1 ]; thenecho "合并文件: $FILE (保留头部)"cat "$FILE" > "$OUTPUT"FIRST=0elseecho "合并文件: $FILE (去掉16字节头部)"tail -c +17 "$FILE" >> "$OUTPUT"fi
doneecho "合并完成: $OUTPUT"
使用方式:
- 将上面内容保存为脚本,比如叫
merge_btsnoop.sh
- 赋予可执行权限:
chmod +x merge_btsnoop.sh
- 执行脚本,传入你要合并的日志文件名:
./merge_btsnoop.sh btsnoop1.log btsnoop2.log btsnoop3.log
最终会生成一个 merged.log
文件,适用于 Wireshark 分析。