号主:老杨丨11年资深网络工程师,更多网工提升干货,请关注公众号:网络工程师俱乐部
你可能早就知道 tcpdump 是命令行抓包神器,
但真到现场排障,能灵活用这个工具的网工,真不多。
今天就来一篇全面实战文,把 tcpdump 的语法结构、常用参数、过滤表达式、典型排障套路 都讲清楚。
一、tcpdump 的语法结构长啥样?标准格式如下:
tcpdump [参数] [过滤表达式]
- 参数:控制抓包行为(接口、输出方式、数量等)
- 过滤表达式:控制抓什么(指定协议/IP/端口/方向等)
非常好,你提供的内容很细致,补充得非常实用。下面我将原文章中【“二、常用参数一览(建议熟到写代码一样)”】部分进行结构优化+内容融合,将你列的各项参数统一合并,条理更清晰、内容更完整,确保整体风格一致且便于读者理解:
二、tcpdump 常用参数全解真正会用 tcpdump 的人,参数都烂熟于心,不靠百度。
📌 组合用法示例:
tcpdump -i eth0 -s 0 -c 100 -w test.pcap
tcpdump -i eth0 -nn -l | grep 192.168.10.1
tcpdump -r test.pcap -nn -X
三、过滤表达式怎么写?这些组合得会背tcpdump 最强大的地方,其实在于它灵活的 过滤表达式(filter expression)。
会不会写过滤,直接决定你抓不抓得到想看的东西。
基本语法结构:[协议] [方向] [对象]
举个例子:
tcpdump -i eth0 src host 192.168.1.10 and dst port 80
翻译一下: 抓“源地址为 192.168.1.10 且目的端口是 80 的包”。
常用过滤表达式分类梳理:1. IP 地址相关过滤:host 192.168.1.10 # 源或目的地址是它
src host 192.168.1.10 # 源地址
dst host 192.168.1.10 # 目的地址
2. 端口相关过滤:port 80 # 抓 HTTP 流量
src port 53 # DNS 响应
dst port 22 # SSH 登录请求
3. 协议类型过滤:tcp # 抓 TCP 协议(比如网页、SSH)
udp # 抓 UDP 协议(比如DNS、DHCP)
icmp # ping 包
arp # ARP 包,排查网关、IP冲突
4. 组合过滤(逻辑运算):host 192.168.1.10 and port 443
src 192.168.1.10 and dst port 80
not port 22
tcp and dst port 3306 and not src net 192.168.1.0/24
常用于细化抓包范围,比如只抓“不是内网发起的 MySQL 请求”。
四、典型抓包场景举例光会写命令不够,要知道什么时候用哪个组合最管用。
场景 1:某设备无法访问,怀疑网络不通tcpdump -i eth0 host 192.168.1.10
看这个 IP 有没有进出流量:
- 没有请求 → 应用没发包 / 配置问题
- 有请求没响应 → 网关/链路问题
tcpdump -i eth0 udp port 53 -nn -vvv
看是否有 DNS 请求发出、服务端有没有回复。 还能看到具体查询了哪个域名。
场景 3:应用连接超时,是 TCP 三次握手没完成?tcpdump -i eth0 'tcp[tcpflags] & (tcp-syn|tcp-ack) != 0' -nn
快速观察:
- 有没有 SYN 发出去?
- 有没有回 SYN+ACK?
- 客户端有没有发 ACK?
tcpdump -i eth0 -e vlan
加 -e 能显示 VLAN ID,检查看有没有 tag。 可配合抓广播流验证二层隔离。
场景 5:网络剧烈抖动,怀疑是广播风暴?tcpdump -i eth0 broadcast
tcpdump -i eth0 arp
看是否存在大量重复广播(ARP 洪泛、未知单播泛洪等)。
场景 6:用 hybrid 接口承载多个 VLAN,是否有异常流量串 VLAN?tcpdump -i eth0 vlan and not vlan 10 and not vlan 20
排查非预期 VLAN 出现的情况(比如 VLAN tag 错位、ACL 配置问题)
原创:老杨丨11年资深网络工程师,更多网工提升干货,请关注公众号:网络工程师俱乐部