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

如何在不结束tcpdump的情况下复制完整的pcap

tcpdump正在运行的时候,他写入的pcap可能是不完整的,通常我们要结束掉tcpdump才能拿到完整的pcap,否则wireshark打开的时候会提示:The capture file appears to have been cut short in the middle of a packet。这可能是因为tcpdump有缓存机制,没有实时将每一个抓到的报文立即写入到磁盘

那么如何在不结束tcpdump的情况下拿到完整的pcap文件呢?如果有一种机制可以通知tcpdump立即写入挂起的报文就好了。尝试过sync不行,因为sync只能导出文件系统缓存。tcpdump可能有自己的缓存机制。

查询tcpdump源代码,果然发现了相关的代码,如下:

#if defined(HAVE_PCAP_DUMP_FLUSH) && defined(SIGUSR2)
#define SIGNAL_FLUSH_PCAP SIGUSR2
#endif#ifdef SIGNAL_FLUSH_PCAP(void)setsignal(SIGNAL_FLUSH_PCAP, flushpcap);
#endif#ifdef SIGNAL_FLUSH_PCAP
static void
flushpcap(int signo _U_)
{if (pdd != NULL)pcap_dump_flush(pdd);
}

看起来这个功能是可选的,需要编译时配置,搜索 SIGNAL_FLUSH_PCAP 的定义找到 HAVE_PCAP_DUMP_FLUSH,也就是说只有配置了 HAVE_PCAP_DUMP_FLUSH 才能启用这个功能。如果已经启用了这个功能,只需要使用kill发送信号给他,触发 flushpcap 即可

kill -SIGUSR2 [tcpdump_pid]

http://www.lryc.cn/news/226173.html

相关文章:

  • maven POM文件总体配置说明
  • 49.批处理命令(1/2)
  • react类式组件的生命周期和useEffect实现函数组件生命周期
  • ARM 基础学习记录 / 异常与GIC介绍
  • java压缩pdf体积,图片体积
  • Ubuntu(WSL2) 安装最新版本的 GCC
  • lua 时间差功能概略
  • 【C++11】左值引用,右值引用,移动/复制构造,完美转发
  • 解决找不到x3daudio1_7.dll的方法,快速解决x3daudio1_7.dll丢失问题
  • LeetCode:2300. 咒语和药水的成功对数(C++)
  • 【Spring生命周期核心底层源码之剖析】
  • 关于Thread.sleep方法的一些使用
  • MeterSphere | 前端入参加密
  • 微服务如何做负载均衡?
  • C++高级编程:构建高效稳定接口与深入对象设计技巧
  • Qt——连接mysql增删查改(仓库管理极简版)
  • Panda3d 场景管理
  • 京东数据分析(京东销量):2023年9月京东投影机行业品牌销售排行榜
  • uniapp cli化一键游项目启动报错总结
  • 我的月光宝盒初体验失败了
  • vue3+vite搭建后台项目-1 引入element-plus 中文包,打包时报错问题
  • 带你详细了解git的【分支和标签】
  • 分类预测 | Matlab实现PSO-LSTM粒子群算法优化长短期记忆神经网络的数据多输入分类预测
  • Spring 事务失效的场景
  • 酷柚易汛ERP-自定义打印整体介绍
  • activiti命令模式与责任链模式
  • C++20 Text formatting
  • redis-plus-plus--github中文翻译--2
  • Vuex状态管理:Getters :VOA模式
  • 二十三种设计模式全面解析-享元模式(Flyweight Pattern)详解:构建高效共享的对象结构