当前位置: 首页 > news >正文

将多个分段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"

使用方式:

  1. 将上面内容保存为脚本,比如叫 merge_btsnoop.sh
  2. 赋予可执行权限:chmod +x merge_btsnoop.sh
  3. 执行脚本,传入你要合并的日志文件名:./merge_btsnoop.sh btsnoop1.log btsnoop2.log btsnoop3.log

最终会生成一个 merged.log 文件,适用于 Wireshark 分析

http://www.xdnf.cn/news/870805.html

相关文章:

  • 低空城市场景下的多无人机任务规划与动态协调!CoordField:无人机任务分配的智能协调场
  • HTML转EXE最新版本2.1.0新功能介绍 - 附CSDN免费下载链接
  • 数据结构与算法:动态规划中根据数据量猜解法
  • 在java 项目 springboot3.3 中 调用第三方接口(乙方),如何做到幂等操作(调用方为甲方,被调用方为乙方)? 以及啥是幂等操作?
  • 【ArcGIS微课1000例】0148:Geographic Imager6.2使用教程
  • Sentry 项目简介
  • 【Zephyr 系列 8】构建完整 BLE 产品架构:状态机 + AT 命令 + 双通道通信实战
  • dxf、dwg中文字矩阵变换
  • Django核心知识点全景解析
  • 网络攻防技术十三:网络防火墙
  • 企业私有化部署DeepSeek实战指南:从硬件选型到安全运维——基于国产大模型的安全可控落地实践
  • Redis命令使用
  • SpringAI(GA):Nacos2下的分布式MCP
  • shell:基础
  • 磐云P10 P057-综合渗透测试-使用反弹木马进行提权获取主机Shell
  • STM32学习之看门狗(理论篇)
  • 10.MySQL索引特性
  • dify中解决docx上传文件报错问题
  • 泰迪杯特等奖案例深度解析:基于量子启发优化与多尺度时空建模的港口物流智能调度系统
  • 如何应对敏捷转型中的团队阻力
  • 【位运算】丢失的数字(easy)
  • Linux进程调度:从时间片到实时任务的交响乐
  • C++——智能指针 unique_ptr
  • 【leetcode】9. 回文数
  • Hadoop大数据集群深度实践:源码分析、参数调优与自动化运维平台选型全解
  • 知识宇宙-学习篇:程序员调试思维
  • PyTest框架学习
  • docker镜像下载到本地,并导入服务器
  • spring4第6课-bean之间的关系+bean的作用范围
  • [C]extern声明变量报错:undefined reference终极解决方案