首页/网络/抓包与流量分析速查/tcpdump -D 列出可用接口

tcpdump -D 列出可用接口

列出本机可供抓包的网络接口及其编号,之后可用 -i <编号> 或 -i <名称> 指定;开始抓包时先看清接口清单。

列出接口在做什么

开始抓包前先看清本机有哪些可抓接口:物理网卡、回环、容器相关虚拟接口、各种伪接口都会出现在列表里,并带状态标记。列表里每一项都有编号,可以直接用编号代替接口名指定抓包位置。这一步能避免最常见的落空——命令跑得通、没有任何报错,却什么都没抓到,原因往往只是接口写错了或者选错了伪接口。

基本信息

命令tcpdump -D
替代命令ip -br link show 查看接口名与状态
输出含义每行一个接口,含编号与状态标记
指定方式既可用接口名,也可用列表里的编号
权限要求普通用户执行可能看不到完整列表

典型使用场景

  • 抓包前先确认接口清单,避免接口名拼错
  • 确认回环与虚拟接口是否存在,判断该抓哪一块
  • 定位容器流量:找到对应的虚拟接口再抓取
  • 核对接口状态:接口未启用时抓不到任何报文
  • 脚本化抓包时先用列表判断接口是否可用

常用示例

常用示例
tcpdump -D                       # 列出接口与编号
tcpdump -i 2 -nn -c 5            # 按编号指定接口
tcpdump -i eth0 -nn -c 5         # 按名称指定接口
ip -br link show                 # 再对照一次名称与启用状态
ip -br addr show | head -10      # 确认各接口的地址,判断流量走哪块

输出中的接口类型

出现的形式含义抓取价值
物理网卡名实际收发业务流量的接口排查链路与应用层问题的主力
回环接口本机进程间通信只有抓它才能看到本机之间的流量
全接口伪接口同时抓所有接口的流量快速摸底,但丢失链路层信息
网桥与虚拟接口容器或虚拟化环境使用按映射关系找到对应的那一块
状态标记是否启用与是否点对点等未启用的接口抓不到任何报文
过滤与队列类伪接口内核投递的报文与规则日志对照时使用
列表里同时给出编号与名称,用编号指定更短,但脚本里建议写名称,因为编号会随接口增减而变化,容易指错。
伪接口抓到的报文视角与真实网卡不同:伪接口看到的是内核投递的报文,可能缺少链路层信息,也可能看到重复报文,分析时要说明来源。

接口确认流程

接口确认流程
tcpdump -D | head -20            # 看清单
ip -br link show | grep -i up    # 只看处于启用状态的接口
ip route get 10.0.0.9            # 确认访问某地址走哪块网卡
ethtool -S eth0 2>/dev/null | head -5   # 需要时看接口统计作为补充

判读要点

  • 列表为空通常意味着权限不足,用更高权限再执行一次
  • 接口存在但抓不到包,先看它是否启用,再看流量是否真的经过它
  • 容器环境里的虚拟接口数量多、名字带随机后缀,靠映射关系而不是记忆
  • 虚拟接口与物理接口看到的报文可能重复,选一处抓取即可避免重复统计

易错点

  • 接口写错或拼写不符时命令直接报错,但接口正确而流量不走它时是静默无输出,两种现象要分开判断
  • 权限不足时列表为空或报错,误以为本机没有可抓接口
  • 伪接口抓到的是内核视角,缺少链路层信息,用于链路排查会得出错误结论
  • 脚本里使用接口编号,接口增减后编号指错,抓到了错误的流量
  • 接口未启用时抓不到任何报文,误判为业务没有流量

数据来源与参考

  • man 8 tcpdump(-D 选项)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌