首页/网络/网络排障速查/tcpdump 基本用法与常用开关

tcpdump 基本用法与常用开关

抓包第一命令:-i 选网卡、-nn 关闭名称解析、-c 限包数、-w 落盘;先用最小过滤抓到样本,再逐步加条件,是抓包不迷路的基本功。

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

tcpdump 是什么

tcpdump 是命令行抓包的事实标准:它把网卡上的报文按过滤器条件抓下来,既能直接打印成一行一包的摘要,也能原样写入文件留给图形化工具分析。相比在应用里打日志,它能看到『包到底有没有到、对端有没有回、被谁重置』这类应用层看不见的事实,因此在争议排查里是最硬的证据。用它的第一原则是先用最小的过滤条件抓到样本,再逐步加条件收窄,而不是一上来就写复杂表达式。

基本信息

适用平台Linux 与 macOS;Windows 上可用系统自带的抓包工具或图形化抓包软件
权限要求需要 root 或具备原始套接字能力,普通用户直接运行会报权限不足
常用开关-i 选网卡、-nn 不做名称解析、-c 限包数、-w 落盘、-r 回读、-s 设置抓取长度
输出形式默认一行一包摘要,-A 显示文本内容,-X 以十六进制与文本同时显示
网卡选择-D 列出可用网卡,any 表示所有网卡但可能缺少链路层头部

典型使用场景

  • 证明流量是否到达:本机抓包看到请求却没有响应,责任立刻清晰
  • 验证策略放行:用抓包确认某个端口的报文到底有没有被放过去
  • 抓握手与断开:确认连接是被拒绝、被重置还是超时
  • 留存证据:把现场抓到的报文落盘,供后续与对方共同复盘
  • 验证抓包点视角:在链路两端同时抓,判断丢包发生在哪一段

常用示例

常用示例
tcpdump -D                              # 先列出可抓的网卡
 tcpdump -i eth0 -nn -c 20 port 80        # 抓 20 个 80 端口报文,不解析名称
tcpdump -i eth0 -nn 'host 10.0.0.5 and tcp port 443'   # 主机加端口组合过滤
tcpdump -i eth0 -nn -A 'tcp port 80' | head -50        # 以文本形式看报文内容
tcpdump -i any -nn -c 10                                 # 所有网卡抓 10 个包,注意链路层头部
tcpdump -i eth0 -nn -e -c 10 arp                        # 加 -e 显示链路层地址

输出逐列读法

字段含义正常与异常
时间戳报文到达本机的时间用于与业务日志、告警时间对齐
源与目的地址端口两个方向的收发关系看方向才能判断是谁先发的、谁没回
标志位标记项如握手、确认、结束、重置只出现请求标志而始终没有响应标志即为异常
序号与确认号相对序号与确认进度序号缺口是丢包的直接证据
长度本次抓取到的字节数数值被截断说明抓取长度设置过小
窗口字段对端允许接收的字节数数值为零表示对端已满,发送被迫暂停
现场一律加上关闭名称解析的开关:它同时关闭地址与服务名解析,既避免解析服务拖慢输出,也避免显示结果误导判断。
在通用网卡上抓包可能看不到以太网头部,需要分析链路层信息时必须指定具体网卡,而不是用 any。
先跑一个只带计数上限的极小抓包(例如只抓几个包),确认网卡名与权限都没问题,再把范围放大,可避免长时间空等才发现条件写错。
抓包会把业务数据一并记录,可能包含凭据与个人信息;落盘文件要按敏感数据处理,用完及时清理或限制访问。

易错点

  • 不加关闭解析的开关,输出里混入地址与服务名解析结果,既慢又容易误读
  • 抓完才发现用的是通用网卡,缺少链路层头部,需要看地址信息时无法补救
  • 过滤器写得太复杂,抓不到任何包也不报错,白等半天;应先用最小条件验证语法
  • 在生产高峰长时间抓包不留容量规划,磁盘被写满影响业务
  • 只在一端抓包就下结论:抓包点视角决定了能看到什么,关键争议要在两端同时抓
  • 权限不足时用普通用户反复尝试,浪费时间;应先确认能力或提权方式

数据来源与参考

  • man 8 tcpdump
  • pcap-filter(7):过滤表达式语法

相关工具

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