首页/网络/网络排障速查/抓包点位选择:-i any / lo / 具体网卡

抓包点位选择:-i any / lo / 具体网卡

同一现场抓在哪里结论不同:lo 看本机进程间流量、eth0 看进出网卡的流量、any 一把抓全部(SLL 封装);多网卡设备要逐卡确认。

网络排障速查网络更新于 2026-10-13

抓包点位为什么重要

同一故障在不同点位抓包会得到相反结论:lo 上的流量只属于本机进程之间,eth0 才是真正进出网卡的流量,any 是一次抓所有接口的伪接口(用 SLL 封装,没有以太网头)。抓错点位最常见的结果是「什么都没抓到」,进而误判成「包没到」。Linux 上抓包需要 root 或 CAP_NET_RAW 能力。

基本信息

适用平台Linux(tcpdump 需 root 或 setcap 授权)
常用参数-i 指定接口、-nn 关闭域名与端口名解析、-s0 抓全包
点位清单tcpdump -D 或 ip -br link 查看可用接口
写文件-w 落盘为 pcap,后续用 Wireshark/tshark 精读
典型限制any 抓包缺少二层头,做 VLAN/MAC 分析要换具体网卡

典型使用场景

  • 外部客户端访问本机服务失败:抓物理口确认 SYN 是否到达主机
  • 确认主机是否把响应发出去:同样抓物理口,用 src/dst 区分方向
  • 本机进程互访异常(应用连本地代理、stub DNS):抓 lo
  • 容器网络排查:抓 docker0 或 br-xxx 网桥、veth 对端
  • 全量摸底不知道流量走哪张卡:先用 -i any 快速判定,再切到具体网卡细看

点位核对与抓取

点位核对与抓取
tcpdump -D                                  # 列出所有可抓接口
ip -br addr                                 # 每张网卡的地址与状态
# 外部访问本机服务:抓物理口
sudo tcpdump -nn -i eth0 'tcp port 8080'
# 只看进入主机的 SYN(判断请求有没有到)
sudo tcpdump -nn -i eth0 'tcp[tcpflags] & tcp-syn != 0 and dst host 10.0.0.8'
# 本机进程互访:抓回环
sudo tcpdump -nn -i lo 'tcp port 8080'
# 不确定走哪张卡:any 快速摸底(SLL 封装,无以太网头)
sudo tcpdump -nn -i any 'tcp port 8080' -c 20

点位选择对照

抓哪里能看到什么典型用途
lo本机进程之间的流量本地代理、unix socket 转 TCP、stub DNS
物理/虚拟网卡真正进出网卡的报文,含二层头判断包是否到达主机、响应是否发出
any所有接口报文,SLL 封装快速摸底;不适合二层与 VLAN 分析
docker0 / br-xxx网桥转发的容器流量容器互访、NAT 前流量
veth 对端容器命名空间内的进出流量定位容器侧丢包或策略拦截
判断「包有没有到主机」和「主机有没有发出去」都抓物理口,再用 src host / dst host 分别限定方向,比在多张卡之间来回抓更可靠。

易错点

  • 抓错点位得出错误结论:只看 lo 就断定「外部请求没到」,实际是物理口上早就进来了
  • 用 -i any 抓包后去找 MAC 地址或 VLAN tag:SLL 封装里没有真实以太网头,必须换具体网卡重抓
  • 容器里抓 docker0 却看不到预期流量:容器间流量可能走 veth 或直接经网桥转发,不经该点
  • 抓包不限制条件且不写文件:高流量接口上刷屏错过关键行,正确做法是加过滤器或 -w 落盘

数据来源与参考

  • man 8 tcpdump(-i 与 any pseudo-interface)
  • Linux 文档:SLL(cooked capture)格式

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌