如何设置tcpdump抓包时长,仅收集指定时间(如60秒)的数据包
tcpdump按指定时长抓包的实现方案
你当前使用的-c 5参数是按抓包数量停止,无法实现按时长控制的需求,tcpdump本身没有内置时长参数,可通过以下两种方案实现:
方案1:使用timeout工具(推荐,大部分Linux环境默认自带)
直接通过timeout命令指定运行时长,示例如下:
# 抓取60秒内所有匹配规则的数据包写入文件 timeout 60 tcpdump -s 0 -i any -n host XXX.XXX.XXX.XXX -w /var/log/XXX.pcap
参数说明:
timeout 60:控制后续命令最长运行60秒,支持单位:s(秒,默认)、m(分钟)、h(小时),例如timeout 2m就是指定运行2分钟- 你原命令中
-i 0.0的写法有误,替换为-i any即可抓取所有网卡的数据包 - 写入pcap文件时不需要加
-v/-vvverbose参数,会增加不必要的性能开销,仅需要终端同步输出抓包内容时才添加
方案2:后台进程+sleep组合(适配无timeout的精简环境)
如果系统是裁剪过的嵌入式环境没有预装timeout,可以用后台运行+定时杀进程的方式实现:
# 后台启动tcpdump并记录进程ID tcpdump -s 0 -i any -n host XXX.XXX.XXX.XXX -w /var/log/XXX.pcap & TCPDUMP_PID=$! # 等待60秒后终止进程 sleep 60 kill $TCPDUMP_PID
内容的提问来源于stack exchange,提问作者Sara_T
相关产品推荐
相关产品推荐

