Wireshark过滤器:!(ip.addr == 192.0.2.1)和(ip.addr!= 192.0.2.1)之间的区别

时间:2018-02-20 19:11:29

标签: wireshark

关于Wireshark中的过滤器,有什么区别!(ip.addr == 192.0.2.1)和(ip.addr!= 192.0.2.1)?检查结果时,它没有给出相同的结果,我也不知道为什么......

另外,当我应用过滤器(ip.addr!= 192.0.2.1)时,过滤器(黄色)中出现不同颜色的背景。 image

有人可以帮助我吗?提前谢谢。

2 个答案:

答案 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 Bnot 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不同,表达式就会计算为真。

它需要黄色背景的原因是因为这种可能令人惊讶的行为,并且状态栏中屏幕底部有一个匹配的警告,建议查看用户指南以获取更多详细信息:

WireShark status bar warning