关于Wireshark中的过滤器,有什么区别!(ip.addr == 192.0.2.1)和(ip.addr!= 192.0.2.1)?检查结果时,它没有给出相同的结果,我也不知道为什么......
另外,当我应用过滤器(ip.addr!= 192.0.2.1)时,过滤器(黄色)中出现不同颜色的背景。 image
有人可以帮助我吗?提前谢谢。
答案 0 :(得分:1)
假设我们要过滤掉10.43.54.65之间的任何流量。我们可能会尝试以下方法:
ip.addr != 10.43.54.65
。 这转换为“通过除源流IPv4地址为10.43.54.65且目标IPv4地址为10.43.54.65的流量之外的所有流量”。
! ( ip.addr == 10.43.54.65 )
。 这转换为“传递任何流量,除了源IPv4地址为10.43.54.65或目标IPv4地址为10.43.54.65”。
您可以在Wireshark: DisplayFilters了解更多信息。
答案 1 :(得分:1)
在布尔逻辑中,A not equals B
和not A equals B
是相同的测试。
但是,WireShark documentation linked by Jürgen Thelen的相关部分解释说,在WireShark中,ip.addr
涵盖了源字段和目标字段,因此测试更像是:
not ((A or B) equals C)
过滤源或目标匹配的数据包,然后(正确地)隐藏它们。
与:相比:
(A or B) not equals C
过滤源或目的地不是C的数据包,以及每个数据包的数据包,因此它会显示每个数据包。
6.4.6。一个常见的错误 在eth.addr,ip.addr,tcp.port和udp.port等组合表达式上使用!=运算符可能无法按预期工作。
通常人们使用过滤字符串来显示类似ip.addr == 1.2.3.4的内容,它会显示包含IP地址1.2.3.4的所有数据包。
然后他们使用ip.addr!= 1.2.3.4查看所有不包含IP地址1.2.3.4的数据包。不幸的是,这不符合预期。
相反,对于源IP地址或目标IP地址等于1.2.3.4的数据包,该表达式甚至都是如此。原因是表达式ip.addr!= 1.2.3.4必须读作“数据包包含一个名为ip.addr的字段,其值不同于1.2.3.4”。由于IP数据报包含源地址和目标地址,因此只要两个地址中的至少一个与1.2.3.4不同,表达式就会计算为真。
它需要黄色背景的原因是因为这种可能令人惊讶的行为,并且状态栏中屏幕底部有一个匹配的警告,建议查看用户指南以获取更多详细信息: