真正会抓包的网工,早把 tcpdump 玩明白了!(语法+参数+场景一篇全懂)

小陈 的头像

0 评论

13 阅读

2,478 字,阅读时间 12 分。

hello,我是网工小陈。

你可能早就知道tcpdump是命令行抓包神器,

但真到现场排障,能灵活用这个工具的网工,真不多。

今天就来一篇全面实战文,把tcpdump 的语法结构、常用参数、过滤表达式、典型排障套路都讲清楚。


一、tcpdump 的语法结构长啥样?

标准格式如下:

tcpdump [参数] [过滤表达式]
  • 参数:控制抓包行为(接口、输出方式、数量等)
  • 过滤表达式:控制抓什么(指定协议/IP/端口/方向等)

非常好,你提供的内容很细致,补充得非常实用。下面我将原文章中【“二、常用参数一览(建议熟到写代码一样)”】部分进行结构优化+内容融合,将你列的各项参数统一合并,条理更清晰、内容更完整,确保整体风格一致且便于读者理解:


二、tcpdump 常用参数全解

真正会用 tcpdump 的人,参数都烂熟于心,不靠百度。

参数
作用
实用场景
-i eth0
指定监听接口(网卡)
最常用,抓哪个口流量抓哪个
-i any
监听所有接口
多网卡服务器或抓转发路径
-c N
限制抓包数量
比如-c 100抓 100 个包就停
-s 0
设置抓包长度为最大(默认96字节)
抓完整包内容用于分析 payload
-w file.pcap
把抓到的数据写入文件
后续用 Wireshark 分析用
-r file.pcap
读取 .pcap 文件分析
结合-nn -vvv查看细节
-nn
不解析主机名和端口服务名
直接显示 IP 和端口号,避免混淆
-l
启用行缓冲输出
实时配合 grep 联动输出非常好用
-d
显示编译后的 BPF 过滤规则
用于排查表达式写错或调试
-e
显示 MAC 地址(帧头)
分析二层转发或 VLAN tag 是否存在
-A
ASCII 方式显示包内容
抓 HTTP 内容、敏感字符时直观
-X
16进制 + ASCII 混合显示
看 payload 内容结构更完整

📌组合用法示例:

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 有没有进出流量:

  • 没有请求 → 应用没发包 / 配置问题
  • 有请求没响应 → 网关/链路问题

场景 2:网页打不开,是 DNS 解析失败吗?

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?

场景 4:怀疑某接口 VLAN tag 被剥了?

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 配置问题)

免责声明:本文内容来源于:

微信公众号

网络工程师小陈

,原文链接:

http://mp.weixin.qq.com/s?__biz=Mzk0OTc0MzYxNA==&mid=2247485619&idx=1&sn=4374fef56bb671eb118d55e4b869d6bc&chksm=c352f222f4257b34c1da54576ff0998330b8a3c83e4e3d4e1f83335d2204cee0d7347190af39#rd

本站为个人站点,相关文章均为网络公开资料,仅出于个人学习、研究及资料整理之用途转载收集,所有版权均归原作者及原发布平台所有。文末作者信息仅用于进行本站文章的分类信息使用,不代表原作者授权或者原作者入驻等依据。
本站不保证内容的完整性与准确性,亦不对内容承担任何法律责任。 如本文涉及版权问题,请原作者及时与我们联系,我们将在第一时间内进行删除处理。 本站尊重并遵守相关版权法规,倡导合法使用网络资源。 联系方式:[email protected]

小陈 的头像

30篇作品

303总阅读量

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

更多文章

网工通信弱电的宝藏知识网站