在 CentOS 中设置抓包时长的方式
一、使用 tcpdump 按固定时长运行
- 直接按时间停止:用 -G <秒> 配合 -W 1 让抓包在指定秒数后自动停止并只生成一个文件。示例:抓取 eth0 上 10 秒 并写入文件。
- 命令:sudo tcpdump -i eth0 -G 10 -W 1 -w capture_10s.pcap
- 按时间轮转并限定总时长:用 -G <秒> 做时间轮转,配合 -W <文件数> 控制总运行时长(总时长 ≈ 轮转间隔 × 文件数)。示例:每 60 秒 一个文件,最多 5 个文件,总时长约 5 分钟。
- 命令:sudo tcpdump -i eth0 -G 60 -W 5 -w cap_%Y%m%d_%H%M%S.pcap
- 常用补充参数
- -s 0:抓取完整报文;-nn:不解析主机名和端口名;需要时加 -v/-vv 提高输出详细度。
- 若需按包数提前结束可用 -c <数量>;分析已保存文件用 -r 文件名。以上参数可与时长控制组合使用。
二、使用 dumpcap 按固定时长运行
- 指定接口与输出,并设置运行时长(秒):示例抓取 any 接口 30 秒 到文件。
- 命令:sudo dumpcap -i any -a duration:30 -w capture_30s.pcap
- 说明
- -a duration:N 直接控制抓包时长(单位:秒)。
- 需要更细的过滤可用 -f “表达式”(BPF 语法),如:sudo dumpcap -i any -f “tcp port 80” -a duration:15 -w http_15s.pcap
- 抓包通常需要 root 权限;长时间运行请关注磁盘空间。
三、使用 MySQL Sniffer 控制运行时长
- 该工具本身不提供“按秒停止”的参数,常用做法是配合 timeout 命令限定运行时长。示例:抓取 eth0 的 3306 端口 60 秒。
- 命令:timeout 60s mysql-sniffer -i eth0 -p 3306 -l /tmp/mysql_sniff.log
- 说明
- -l 指定日志目录;如需按时间切分日志可用 -s <分钟>(按分钟切分),但这与“运行多久后停止”是两个维度。
四、实用建议
- 权限与接口:抓包需 root 或具备 CAP_NET_RAW 能力;不确定接口名可用 -D 列出(tcpdump)。
- 文件与性能:建议用 -s 0 抓取完整报文;长时间或高速链路建议按时间或大小轮转,避免单文件过大(tcpdump 可用 -G/-C 组合)。
- 过滤表达式:优先用 BPF 过滤(如 host 1.2.3.4 and port 80)减少无关流量,降低资源占用。