Wireshark UDP 十六进制过滤无法正常工作,不是吗?

Wireshark UDP filtering hex does not work correctly no?

Wireshark 是否存在错误?

没有正确过滤 ip.addr == 10.222.22.77 并且 udp 包含 0a2001112233 是否正确过滤 ip.addr == 10.222.22.77 并且 udp 包含 0a20

Frame 9594: 74 bytes on wire (592 bits), 74 bytes captured (592 bits) on 
interface 0
Ethernet II, Src: QQ!! (ZZ!!), Dst: BrocadeC_16:d4:00 (XX!!)
Internet Protocol Version 4, Src: 10.222.22.82, Dst: 10.222.22.77
User Datagram Protocol, Src Port: 6060, Dst Port: 6060
Data (32 bytes)
Data: 0a20011122334455660000000a05000631090000082a0000...
[Length: 32]

你能试试吗:

ip.addr == 10.222.22.77 and udp contains 0a:20:01:11:22:33

编辑:如果你有dftest,你可以运行 dftest "udp contains 0a20",你会得到:

Filter: "udp contains 0a20"

Constants:
00000 PUT_FVALUE        0a:20 <FT_PROTOCOL> -> reg#1

Instructions:
00000 READ_TREE         udp -> reg#0
00001 IF-FALSE-GOTO     3
00002 ANY_CONTAINS      reg#0 contains reg#1
00003 RETURN

...然后将其与 dftest "udp contains 0a2001112233":

进行比较
Filter: "udp contains 0a2001112233"

Constants:
00000 PUT_FVALUE        30:61:32:30:30:31:31:31:32:32:33:33 <FT_PROTOCOL> -> reg#1

Instructions:
00000 READ_TREE         udp -> reg#0
00001 IF-FALSE-GOTO     3
00002 ANY_CONTAINS      reg#0 contains reg#1
00003 RETURN

引用 wireshark-filter 手册页:

contains”运算符允许过滤器搜索字符序列,表示为字符串(带引号或不带引号),或字节,表示为字节数组,或对于单个字符,表示为 C 风格字符常量。

在前一种情况下,Wireshark 将数据解释为字节数组,但在后一种情况下,它将数据解释为不带引号的字符串,因此通过在字节之间包含冒号,您可以指示 Wireshark 解释数据作为字节数组,这是本意。

我不知道这种行为(将 1 或 2 个字节解释为字节数组,但将超过 2 个字节解释为字符串)是否应被视为 Wireshark 错误,但也许应该是,在这种情况下,请随时提交 Wireshark bug。尽管如此,这是当前的行为,因此最佳做法是在搜索字节时始终在每个字节后添加一个冒号,以便 Wireshark 的行为符合预期。