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

red*_*0ct 6 networking linux tcp tcpdump

我试图仅捕获 TCP SYN-ACK 数据包,即 SYN 和 ACK 位均设置为:

tcpdump -vvvni eth0 tcp[tcpflags] == tcp-syn and tcp[tcpflags] == tcp-ack
Run Code Online (Sandbox Code Playgroud)

但它给出了这样的错误:

tcpdump: expression rejects all packets
Run Code Online (Sandbox Code Playgroud)

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

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

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

Ste*_*ich 6

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

tcp[tcpflags] & (tcp-syn|tcp-ack) == tcp-syn|tcp-ack
Run Code Online (Sandbox Code Playgroud)

相反,您的过滤器表达式尝试匹配标志同时等于 SYN 和 ACK 的数据包,但这行不通的,因为它不能同时等于两者,但它只能包含两个标志。

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

tcp[tcpflags] == tcp-syn|tcp-ack
Run Code Online (Sandbox Code Playgroud)