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 的行为符合预期。
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 的行为符合预期。