使用not port可排除指定端口,需注意语法准确、括号匹配及逻辑优先级;支持单端口、多端口(逗号或or)、限定IP后排除、端口范围(portrange)等写法。

直接用 not port 就能排除指定端口,但要注意写法是否准确、是否加了括号、有没有和其他条件混用“或”逻辑——否则可能抓到大量无关包。
基础排除:只跳过一个端口
最常用也最简单的写法:
-
sudo tcpdump -i eth0 not port 53—— 排除所有 DNS 流量(无论 TCP 还是 UDP) -
sudo tcpdump -i any -n not port 22—— 排除 SSH,加-n避免解析延迟
排除多个端口:用逗号或逻辑组合
两种写法都有效,但语义不同:
- 逗号写法(简洁,推荐):
sudo tcpdump -i eth0 not port 22,80,443—— 同时排除 SSH、HTTP、HTTPS - 逻辑写法(更明确):
sudo tcpdump -i eth0 not \( port 22 or port 80 or port 443 \)—— 括号不能省,否则and/or优先级会出错
限定范围后再排除:避免误伤
如果只想排除某 IP 的特定端口,其他流量照常抓,就得把条件“收紧”:
-
sudo tcpdump -i eth0 host 192.168.1.100 and not port 3306—— 只排除该主机的 MySQL 流量,其他端口保留 -
sudo tcpdump -i eth0 tcp and host 10.0.2.15 and not \( port 22 or port 80 \)—— 仅抓 TCP、仅限该 IP、且排除 SSH 和 HTTP
排除端口范围:适合动态端口场景
Kubernetes NodePort、临时端口池等常见于大范围端口,可用 portrange:
-
sudo tcpdump -i eth0 not portrange 30000-32767—— 跳过整个 NodePort 区间 -
sudo tcpdump -i eth0 not \( portrange 1024-65535 and not port 8080 \)—— 排除高端口但保留 8080(注意嵌套括号)


















