tcpdump 说“表达式拒绝所有数据包”

tcpdump 说“表达式拒绝所有数据包”

我想创建一个具有两个条件的过滤器:-

  1. 使用网络过滤数据包。(src net 2a01:111:xxxx::/44)
  2. 根据 tcp 握手警报消息进行过滤。(tcp[((tcp[12] & 0xf0) >> 2)] = 0x15)

两个过滤器都可以单独工作,但组合在一起时:-

sudo tcpdump -s 1024 -v -ni any "(src net 2a01:111:xxxx::/44) and (tcp[((tcp[12] & 0xf0) >> 2)] = 0x15)"

失败并出现错误:

tcpdump: expression rejects all packets

我不确定这两个过滤器的逻辑与如何导致没有数据包被过滤。

答案1

tcpdump的过滤器语法来自libpcap,并且libpcap对 TCP-over-IPv6 的支持不完整。因此,当您使用tcp关键字作为方括号表达式的协议(如tcp[12]),它仅适用于 TCP-over-IPv4。

从手册页深处pcap-filter(7)

要访问数据包内的数据,请使用以下语法:

proto [ expr : size ]

Proto 是 ether、fddi、tr、wlan、ppp、slip、link、ip、arp、rarp、tcp、udp、icmp、ip6 或 radio 之一,表示索引操作的协议层。(ether、fddi、wlan、tr、ppp、slip 和 link 均指链路层。radio 指添加到某些 802.11 捕获中的“无线电标头”。)注意,tcp、udp等上层协议类型仅适用于IPv4,不适用于IPv6(这个问题以后会修复)。

(重点是我的)

相关内容