-c 在做什么
-c 指定抓满多少个报文后自动退出,适合快速取样、脚本化抓包和无人值守场景。它统计的是匹配过滤条件的报文数量,因此过滤器写错时会一直等不到足够的包而长期运行。与落盘参数一起使用时,写入的也是同样数量的报文。常见做法是把 -c 与超时命令配合,形成「数量或时间先到者结束」的双重兜底,这在自动化脚本里尤其必要。
基本信息
| 语法 | tcpdump -c <数量> [选项] [表达式] |
|---|---|
| 计数对象 | 匹配过滤条件并成功捕获的报文 |
| 与落盘配合 | 写入文件的也是这 N 个报文 |
| 常见搭配 | 超时命令、落盘参数、解析选项 |
| 退出方式 | 达到数量后自动退出,不必手工中断 |
典型使用场景
- 快速取样:用少量报文确认流量是否存在于该接口
- 脚本化抓包:自动化流程需要一个确定的结束条件
- 验证过滤表达式:先用少量报文确认条件命中的内容
- 无人值守场景:避免抓包进程长期驻留占用磁盘
- 对比多组条件:每组抓同样的数量,保证样本规模一致
常用示例
常用示例
tcpdump -i eth0 -nn -c 10 port 443 # 抓 10 个 443 端口报文
tcpdump -i any -c 100 -w /tmp/sample.pcap 'tcp port 3306' # 取样并落盘
tcpdump -i eth0 -nn -c 5 icmp # ping 取样验证连通性
timeout 30 tcpdump -i any -c 200 -w /tmp/x.pcap port 8080 # 数量与时间双重兜底
tcpdump -i eth0 -nn -c 20 'tcp[tcpflags] = tcp-syn' # 抓 20 个建连请求
tcpdump -nn -r a.pcap -c 5 # 离线读取时同样可限制条数参数搭配建议
| 场景 | 推荐写法 | 原因 |
|---|---|---|
| 快速确认流量存在 | 少量数量加不落盘 | 直接看输出即可判断 |
| 取样用于分析 | 数量加落盘加完整快照 | 样本够分析,文件体积可控 |
| 长时间无人值守 | 数量与超时同时设置 | 任一条件满足即结束,避免无限运行 |
| 验证过滤表达式 | 先小数量试跑 | 命中的内容与预期不符时立即发现 |
| 多组对比实验 | 每组同样的数量 | 保证样本规模一致,结论可比 |
-c 计的是匹配到的报文数。过滤器写得过窄时可能长时间等不到足够报文,脚本里始终建议配合超时命令,避免任务卡住。
把 -c 设得很大又不落盘时,输出会刷屏并占用终端缓冲区,可能拖慢抓包进程本身。需要大量样本时优先落盘,再离线分析。
脚本化用法
脚本化用法
timeout 60 tcpdump -i eth0 -nn -c 500 -w /tmp/probe.pcap 'port 443' || true # 失败也不中断脚本
ls -l /tmp/probe.pcap # 确认文件生成且大小合理
capinfos /tmp/probe.pcap | head -10 # 核对实际抓到的包数判读要点
- 实际抓到的数量应与设定一致,明显偏少说明超时先触发了
- 取样时段的选择会影响结论,故障是偶发时需要拉长时间而不是加大数量
- 数量控制不能替代过滤条件,高流量口上仍要限制抓取范围
- 离线读取时限制条数用于快速浏览,做统计时应该去掉这个限制