在 Wireshark 中,如果我想编写一个仅接受 ICMP 目标不可达(类型 3)消息的过滤器,该过滤器是icmp[0] == 3
。
在这种情况下,我如何计算 0 的数据包偏移量?
编辑
根据上图来自 Wikipedia 的内容,ICMP 类型位于 0-7 位之间。因此它是第一个字节,因此为 0 ?
答案1
您的过滤器是正确的,icmp[0]
确实匹配包含类型的 ICMP 标头的第一个字节。但是,我发现它很难阅读,您应该改用icmp.type eq 3
。当字段长度超过一个字节时,这也容易得多。
这里是显示字段引用对于 ICMP。
答案2
我假设您正在尝试编写一个捕获过滤器而不是一个显示过滤器;如果您正在尝试编写一个显示过滤器,Martin Isaksson 是正确的,您应该这样做icmp.type == 3
。
是的,0 是 ICMP 数据包内的偏移量。
在较新版本的 libpcap 中,该语法支持一些更方便的编写过滤器的方式即icmp[icmptype] == icmp-unreach
。WinPcap 基于具有该语法的 libpcap 版本,因此它也支持它。
Wireshark 不允许你说类似的话,可以说是一个错误,即
icmp.type == "Destination unreachable"
在显示过滤器中。我会考虑修复这个问题。