我们可以把 tcpdump 的命令结构标准地划分为 三大部分

sudo tcpdump   [1. 控制参数]   [2. 抓取范围]   "[3. 过滤表达式]"

第一段:控制参数(控制“怎么显示/怎么处理”)

这一段緊跟在 tcpdump 后面,主要用来控制数据的输出格式、运行性能或者是否保存文件。它们通常是以 - 开头的单字母参数。
最常用的控制参数:

  • -nn最核心。 第一个 n 表示不把 IP 解析成域名,第二个 n 表示不把端口号解析成服务名(比如 80 不显示成 http)。这样不仅看起直观,还能防止因为 DNS 解析卡死
  • -v / -vv / -vvv:显示更详细的报文信息(比如 TTL、报文长度等)。
  • -X:同时以十六进制和 ASCII 码(明文文本)打印报文内容,看应用层数据必备
  • -w filename.pcap:不打印到屏幕,直接保存到文件,后续可以用 Wireshark 打开。
  • -c 100:抓满 100 个包就自动退出。

第二段:抓取范围(控制“在哪里抓”)

这一段用来告诉 tcpdump 应该去哪张网卡或者哪个接口去捞数据。
最常用的抓取参数:

  • -i any:最省心的写法,监听机器上的所有网卡(包括物理网卡、虚拟网卡、本地回环 lo)。
  • -i eth0 / -i en0:指定只抓某一张具体的网卡。

第三段:过滤表达式(控制“抓什么内容”)

这是 tcpdump 最强大的地方,它通过 “关键字 + 逻辑运算符” 来精准过滤流量。为了防止特殊字符被 Shell 解析,这一段建议用单引号或双引号包起来
这一段内部通常由以下三个维度自由组合:

1. 协议(Protocol)

  • ip, ip6, tcp, udp, icmp, icmp6

2. 方向/目标(Type & Dir)

  • host 192.168.1.1(指定 IP)
  • net 192.168.1.0/24(指定网段)
  • port 10000(指定端口)
  • 配合方向词:src port 10000(源端口)或 dst port 10000(目的端口)

3. 逻辑连接符(And / Or / Not)

  • and (且):必须同时满足。
  • or (或):满足其中一个就行。
  • not (非):排除特定流量。

举例

sudo tcpdump   -nn -X   -i any   "ip6 and port 10000"
               └──┬──┘   ──┬───   ──────────┬─────────
                 控制      范围            过滤条件
              (格式/内容)  (所有网卡)    (IPv6 且 端口 10000)

参考

https://www.cnblogs.com/chyingp/p/linux-command-tcpdump.html