如何使用Tcpdump统计指定时长内符合过滤规则的数据包数量
统计指定时长内符合过滤规则的数据包方案
tcpdump本身没有内置指定运行时长的配置项,你可以配合系统通用工具实现需求:
方法1:固定时长捕获并统计总匹配包数
用系统自带的timeout工具控制tcpdump运行时长,结束后会直接输出捕获到的匹配包总数:
sudo timeout 10 tcpdump -i <目标网卡名> -c 0 -nn dst host x.x.x.x and 'tcp[tcpflags] == tcp-syn'
参数说明:
timeout 10:控制tcpdump运行10秒后自动终止,可替换为你需要的任意时长-i <目标网卡名>:替换为你要监控的网卡(比如eth0、ens37等),不填则默认捕获所有网卡的包-c 0:不限制捕获包的数量,保证时长内所有匹配规则的包都能被记录-nn:关闭IP和端口的解析逻辑,提升捕获效率避免丢包
运行结束后,输出的最后一行会显示X packets captured,其中X就是指定时长内匹配规则的总数据包数量。
方法2:直接统计每秒平均匹配包数
如果需要直接得到每秒的平均匹配包数,可通过awk直接计算输出结果:
sudo timeout 10 tcpdump -i <目标网卡名> -c 0 -nn dst host x.x.x.x and 'tcp[tcpflags] == tcp-syn' 2>&1 | awk '/captured/ {print "总匹配包数:"$1"\n每秒平均包数:"$1/10}'
注意事项
- 部分极简系统如果没有预装timeout,可通过
apt install coreutils(Debian/Ubuntu系列)或yum install coreutils(CentOS/RHEL系列)安装 - 如果需要留存数据包后续分析,可在tcpdump参数中添加
-w 导出文件名.pcap,后续可通过wireshark、tcpdump等工具读取分析
内容的提问来源于stack exchange,提问作者borcan22
相关产品推荐
相关产品推荐

