tcpdump端口过滤需明确方向:port匹配源或目的端口,src port仅匹配源端口,dst port仅匹配目的端口;组合ip、协议(如tcp and dst port 3306)和逻辑运算符(and/or/not)可提升精准度,表达式须用单引号包裹。

直接用 port 关键字就能按端口过滤,但写法稍有讲究——不加方向限定会同时匹配源和目的端口,容易混入无关流量;真正精准的过滤需要明确方向、协议或组合条件。
基础端口过滤:port、src port、dst port
tcpdump 默认的 port 80 表示“源端口是 80 或目的端口是 80”,适合粗略排查。但多数调试场景需更精确:
-
只抓发往目标端口的包(如客户端请求 Web):
dst port 80 -
只抓从某端口发出的响应(如 Nginx 回包):
src port 443 -
限定 TCP 协议 + 目标端口(避免 UDP 干扰):
tcp and dst port 3306 -
排除某个端口(比如跳过 DNS):
port 80 and not port 53
组合 IP 和端口,缩小范围
单靠端口常不够,加上 IP 能快速聚焦问题节点。注意逻辑关系必须用 and 显式连接,否则默认是 or:
- 抓某台服务器的 HTTPS 入向流量:
host 10.0.2.15 and dst port 443 - 只看来自特定客户端的数据库访问:
src host 192.168.1.100 and dst port 5432 - 排除常用服务端口,专注业务端口:
host 192.168.1.5 and not (port 22 or port 80 or port 443)
进阶技巧:端口范围与保存分析
对动态端口(如 Kubernetes NodePort、Docker 映射)或批量排查,可用 portrange:
- 抓 Docker 常用高位端口:
portrange 30000-32767 - 限制抓包数量防刷屏:
-c 50 - 保存为 pcap 文件供 Wireshark 深度分析:
-w traffic.pcap - 禁用 DNS 解析提升性能和可读性:
-n(推荐始终加上)
常见误区提醒
这些小细节常导致抓不到想要的包:
- 过滤表达式**必须用单引号包裹**,否则 shell 会错误解析
>、&等符号 -
host 192.168.1.100 port 443是错的——它等价于host ... or port ...,正确写法是host 192.168.1.100 and port 443 - 接口名要真实存在,可用
ip -br a或ifconfig先确认 - 权限不足时加
sudo,否则可能收不到任何包











