服务器宕机前需部署持续、自动轮转、低开销的tcpdump抓包任务,聚焦TCP异常、指定端口失败交互等关键网络行为,通过nohup后台运行、合理过滤、磁盘与权限保障,确保宕机前原始流量可追溯、可分析。

服务器宕机前的网络预抓包,核心目标是:在系统尚能响应、网络未中断时,提前部署一个持续运行、自动轮转、低资源占用的抓包任务,捕获宕机前最后阶段的关键网络行为(如异常连接、RST重置、超时重传、ICMP不可达等),为事后分析提供原始证据。
这不是一次性的临时抓包,而是“守株待兔”式的防御性监控。关键在于稳定性、持久性和可追溯性。
网卡与目标确认:先确保能“听得到”
抓包前必须确认两点:
- 当前活跃网卡有有效IP(
ip a | grep "inet "),避免出现WARNING: eth0: no IPv4 address assigned - 明确要监控的流量范围:是全量?某IP?某端口?还是特定协议(如TCP连接建立失败)?
常用检查命令:
ip -br a # 快速查看所有网卡及IP状态 tcpdump -D # 列出可用接口,确认目标网卡名(如ens192、eth0)
后台长期运行:让抓包不随终端关闭而终止
使用 nohup + & 组合,确保即使SSH断开,抓包仍在后台持续执行:
nohup tcpdump -i ens192 -nn -s 0 -w /var/log/pcap/pre_crash_%Y%m%d%H%M%S.pcap -G 300 -C 100M &
说明:
-
-i ens192:指定物理网卡(请按实际替换) -
-nn:禁用DNS和端口名解析,提升性能、避免阻塞 -
-s 0:捕获完整数据包(不截断),对分析TCP标志位、负载内容至关重要 -
-w ...%Y%m%d%H%M%S.pcap:按秒级时间戳命名,避免覆盖 -
-G 300:每5分钟生成一个新文件(防止单文件过大或丢失全部记录) -
-C 100M:单个文件达100MB即轮转(双重保险) -
nohup ... &:脱离终端,守护运行
✅ 建议将该命令写入
/etc/rc.local或 systemd service,实现开机自启;也可用 cron 每小时补发一次校验心跳(如date >> /var/log/pcap/alive.log),辅助判断抓包是否真正在运行。
过滤策略:聚焦高价值异常信号
默认全量抓包磁盘压力大、分析困难。推荐按场景启用轻量过滤,保留关键线索:
-
只抓TCP连接异常(SYN未回应、RST频繁、重传):
'tcp[tcpflags] & (tcp-syn|tcp-rst) != 0 or ip[ttl] < 64'
-
抓指定服务端口(如80/443/3306)的失败交互:
'port 80 and (tcp[tcpflags] & tcp-rst != 0 or icmp)'
-
抓本机对外发起但无响应的连接(疑似出口阻断):
'src host 10.1.2.3 and not dst host 10.1.2.3 and tcp[tcpflags] & tcp-syn != 0 and not tcp[tcpflags] & tcp-ack != 0'
⚠️ 注意:复杂BPF表达式需用单引号包裹,避免shell解析错误;生产环境建议先小范围测试(如
-c 10抓10个包验证逻辑)。
磁盘与权限保障:避免抓包中途失效
-
路径权限:确保
/var/log/pcap/目录存在,且运行用户(通常是root)有读写权限mkdir -p /var/log/pcap && chmod 755 /var/log/pcap
-
磁盘空间预警:设置日志轮转或监控(如
df -h /var/log定期检查),防止抓包填满根分区 -
SELinux/AppArmor:若启用强制访问控制,需确认
tcpdump被允许写入目标目录(常见于银河麒麟、CentOS等)
宕机后取回数据:离线分析才是关键
服务器宕机重启后,立即检查:
-
/var/log/pcap/下最新生成的.pcap文件(尤其是宕机前5–10分钟的) - 使用
tcpdump -r filename.pcap -nn | head -20快速浏览时间线与协议分布 - 将
.pcap文件拷贝至本地,用 Wireshark 深度分析:关注tcp.analysis.*字段、重传图、会话时序图
? 提示:若服务器无法启动,可通过救援模式挂载磁盘,直接提取
/var/log/pcap/中的文件——这正是预抓包的价值所在:数据在,真相就在。

















