tcp 和 udp 关键字可直接限定协议类型;tcp 用于抓取 tcp 流量,如 http、ssh;udp 用于抓取 udp 流量,如 dns、dhcp;配合 not、and、or 及 -nn 等选项可实现精准高效过滤。

直接用 tcp 或 udp 关键字就能限定协议类型,这是最基础也最常用的过滤方式。
只抓 TCP 流量
默认情况下 tcpdump 会捕获所有协议,加上 tcp 就只留 TCP 包:
-
sudo tcpdump -i any tcp—— 抓所有接口上的 TCP 包 -
sudo tcpdump -i eth0 tcp port 80—— 只抓 eth0 上的 HTTP(TCP 80)流量 -
sudo tcpdump -i any tcp and src port 22—— 仅捕获从本机发出的 SSH 请求(源端口 22)
只抓 UDP 流量
UDP 没有连接状态,适合 DNS、DHCP、NTP 等轻量协议分析:
-
sudo tcpdump -i any udp—— 所有 UDP 包 -
sudo tcpdump -i any udp port 53—— 专注 DNS 查询与响应 -
sudo tcpdump -i any udp and dst port 67—— 仅目标为 DHCP 服务器(67 端口)的请求
排除干扰,组合更精准
实际环境中常需排除本地回环或特定地址,避免噪音干扰:
-
sudo tcpdump -i any tcp and not host 127.0.0.1—— 过滤掉本机 loopback 的 TCP 通信 -
sudo tcpdump -i any udp and src 192.168.1.100—— 只看来自某台内网设备的 UDP 发包 -
sudo tcpdump -i any (tcp port 443 or udp port 53)—— 同时抓 HTTPS 和 DNS(注意括号防止优先级错误)
配合 -nn 提升效率和可读性
加 -nn 可跳过 DNS 和端口名解析,既快又干净:
-
sudo tcpdump -nn -i any tcp port 3306—— 显示 3306 而不是 mysql,IP 也不转主机名 -
sudo tcpdump -nn -c 50 -w db.pcap tcp port 3306—— 抓 50 个 MySQL 包存文件,不解析、不刷屏











