使用 tcpdump 仅捕获 TCP SYN-ACK 数据包

使用 tcpdump 仅捕获 TCP SYN-ACK 数据包

我正在尝试仅捕获 TCP SYN-ACK 数据包,即 SYN 和 ACK 位都设置如下:

tcpdump -vvvni eth0 tcp[tcpflags] == tcp-syn and tcp[tcpflags] == tcp-ack

但它给出了这样的错误:

tcpdump: expression rejects all packets

我仍然不知道是否有办法通过tcpdump

顺便说一句,我尝试捕获只设置了 SYN 标志的数据包,并期望也会有 SYN-ACK(因为这里没有矛盾),但只有纯 SYN 数据包(只设置了 SYN 位)。所以我需要某种方法来仅查看 SYN-ACK,或 SYN 和 SYN-ACK。

PS 这是关于 IPv4 上的常规 TCP。

答案1

根据pcap 过滤器手册页,特别是最后的例子,我建议匹配至少设置了 SYN 和 ACK 的数据包的正确过滤器语法是:

tcp[tcpflags] & (tcp-syn|tcp-ack) == tcp-syn|tcp-ack

您的过滤表达式尝试匹配带有以下标志的数据包:平等的SYN 和平等的ACK 是行不通的,因为它不能同时等于两者,但它只能包含两面旗帜。

如果您有兴趣匹配标志等于 SYN+ACK 且未设置其他标志的数据包,那么您也可以使用更简单的语法:

tcp[tcpflags] == tcp-syn|tcp-ack

相关内容