抓包的三件事
在广域网链路上抓包,成败取决于三点:接口选对、过滤写对、量级可控。选接口先看清流量实际从哪个物理口或子接口进出,带 VLAN 与隧道时要用逻辑接口;过滤表达式要尽量具体,只抓某一对主机或某个端口;量级控制指的是别在高速链路上裸抓,先限制包数或按大小轮转落盘。落盘的价值在于可以用分析工具反复过滤,现场刷屏输出一旦滚过去,关键报文就找不回来了。
基本信息
| 适用平台 | Linux 主机、多数网络设备自带抓包工具 |
|---|---|
| 接口选择 | -i any 或指定物理口、带 VLAN 用子接口 |
| 过滤语法 | 主机、端口、协议三要素组合表达式 |
| 落盘 | -w 写文件,配合 -c 限制包数 |
| 轮转 | -C 单文件大小 -W 文件数量滚动覆盖 |
| 权限 | 需要 root 或相应能力位,设备侧需特权模式 |
典型使用场景
- BGP 邻居异常:只抓 179 端口确认两侧报文是否对称
- IPsec 协商失败:过滤 UDP 500 与 4500 对比两端时序
- 业务丢包定位:抓指定五元组并同时观察两端计数
- 时延与抖动分析:抓包后计算报文间隔,比 ping 更细
- 向厂商举证:留存原始 pcap 作为故障证据
常用命令
常用命令
# 抓指定对端的 BGP 报文,限制 100 个包
tcpdump -ni eth0 host 203.0.113.2 and port 179 -c 100
# 高速链路轮转落盘,避免单文件过大
mkdir -p /tmp/cap
tcpdump -ni eth0 -w /tmp/cap/wan_%%Y%%m%%d.pcap -C 50 -W 5 'host 10.2.2.1'
# 带完整时间戳观察间隙
tcpdump -ni eth0 -tttt 'icmp' | head -20
# 抓完用分析工具再看,别在现场死盯屏幕
tcpdump -nr /tmp/cap/wan_20261013.pcap 'port 179' | head过滤表达式速查
| 表达式 | 用途 | 说明 |
|---|---|---|
| host 203.0.113.2 | 限定单主机 | 只保留该地址的来往流量 |
| port 179 | 按端口过滤 | BGP 专用,需注意方向 |
| udp port 500 | IPsec 协商 | 可与 4500 用 or 组合 |
| not port 22 | 排除干扰 | 避免把自身管理流量抓进来 |
| tcp[tcpflags] & tcp-syn != 0 | 只看建连 | 用于判断握手是否有回应 |
抓包位置决定结论:在设备出接口抓不到报文说明本端没发或已被丢弃,在对端入接口抓不到则说明中间链路或策略拦了,两端同时抓是最快的定位方式。
落盘文件先用较小包数验证过滤表达式是否正确,再放开长时间抓取,可以省下大量返工时间。