核心是使用协议关键字(如tcp、udp、icmp、arp)直接过滤,无需端口或IP条件;tcpdump不支持http/https等应用层协议过滤,需结合端口(如port 80/443)实现近似匹配。

在 Linux 中用 tcpdump 按协议类型过滤抓包,核心是使用协议关键字或端口号匹配,而不是靠解析应用层内容——tcpdump 默认工作在网络层和传输层,能直接识别 IP、ICMP、TCP、UDP、ARP 等原生协议。
用协议名称直接过滤
这是最常用也最可靠的方式。tcpdump 内置了常见协议的简写,大小写不敏感:
-
tcpdump icmp—— 只捕获 ICMP 报文(如 ping) -
tcpdump tcp—— 只捕获 TCP 数据包(含 SYN/ACK/FIN 等) -
tcpdump udp—— 只捕获 UDP 数据包(如 DNS 查询、DHCP) -
tcpdump arp—— 只捕获 ARP 请求与响应 -
tcpdump ip6—— 只捕获 IPv6 报文(注意不是ipv6)
组合协议与端口进一步缩小范围
单靠协议可能太宽泛,加端口条件可精准定位服务:
-
tcpdump tcp port 22—— 抓 SSH 流量(TCP + 目标或源端口为 22) -
tcpdump udp port 53—— 抓 DNS 查询/响应(UDP + 端口 53) -
tcpdump tcp port 443 and host example.com—— 只抓访问 example.com 的 HTTPS 流量 -
tcpdump "icmp or arp"—— 同时抓两种协议(注意引号避免 shell 解析错误)
用 IP 协议字段值精确匹配(进阶)
当需要区分特殊协议(如 OSPF、IGMP、SCTP)或绕过 tcpdump 未内置的简称时,可查 IANA 协议号,用 ip proto 过滤:
-
tcpdump 'ip proto 89'—— 抓 OSPF(IANA 分配协议号 89) -
tcpdump 'ip proto 2'—— 抓 IGMP(协议号 2) -
tcpdump 'ip proto \tcp'等价于tcpdump tcp,但更底层
协议号列表可查 /etc/protocols 或访问 iana.org/assignments/protocol-numbers
注意:HTTP/HTTPS 不是 tcpdump 原生协议
tcpdump 无法直接写 http 或 https 来过滤——这些是应用层协议,没有对应 IP 层协议号。正确做法是结合端口和方向:
-
tcpdump tcp port 80—— 大致等效 HTTP 流量 -
tcpdump tcp port 443—— 大致等效 HTTPS 流量 - 如需真正解析 HTTP 方法或 URL,需配合
-A或导出到 Wireshark 用 display filter


















