当前位置:首页 > 编程笔记 > 正文
已解决

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

来自网友在路上 144844提问 提问时间:2023-11-11 22:06:35阅读次数: 44

最佳答案 问答题库448位专家为你答疑解惑

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]

查看全文

99%的人还看了

猜你感兴趣

版权申明

本文"如何在不结束tcpdump的情况下复制完整的pcap":http://eshow365.cn/6-37962-0.html 内容来自互联网,请自行判断内容的正确性。如有侵权请联系我们,立即删除!