前言
本文基于 Wireshark Version 3.6.0 之前的软件版本 ,在 Wireshark Version 3.6.0 以后已经更新了该显示过滤表达式的过滤逻辑,简要说明:
The expression “a != b” now always has the same meaning as “!(a == b)”. In particular this means filter expressions with multi-value fields like “ip.addr != 1.1.1.1” will work as expected (the result is the same as typing “ip.src != 1.1.1.1 and ip.dst != 1.1.1.1”). This avoids the contradiction (a == b and a != b) being true.
另本文标题原为:《Wireshark 提示和技巧 | !(ip.addr == x.x.x.x) 和 (ip.addr != x.x.x.x) 的区别》,CSDN 标题禁止词 ! 🤣
显示过滤之 !=
关于 Wireshark 显示过滤中 != 的使用事项,简要说明如下:
ip.addr == 1.2.3.4
显示所有包含 IP 地址 1.2.3.4 的数据包。
!(ip.addr == 1.2.3.4)
等同于
!ip.addr == 1.2.3.4
显示所有不包含 IP 地址 1.2.3.4 的数据包。
(ip.addr != 1.2.3.4)
等同于
ip.addr != 1.2.3.4
显示所有不包含 IP 地址 1.2.3.4 的数据包?不是。
显示过滤器栏中为 黄色显示(正确的应为 绿色显示 ),表示过滤表达式被接受,但可能无法按预期工作 !!!
因为 ip.addr != 1.2.3.4 表达式被理解为 “the packet contains a field named ip.addr with a value different from 1.2.3.4” ,而 IP 数据包包含源和目的 IP 地址,当两个地址中至少有一个与 1.2.3.4 不同时,表达式的值将为 True 。
实例演示
以 TCP 三次握手的数据包做一个简单实例演示,如下:
显示过滤器中应用 ip.addr == 10.0.0.1 ,正确过滤所需数据包。
绿色显示,表达式被接受,正常过滤。
显示过滤器中应用 !(ip.addr == 10.0.0.1) ,正确过滤所需数据包。 显示过滤器中应用 ip.addr != 10.0.0.1 ,未能按预期过滤所需数据包,仍然存在 IP 地址为 10.0.0.1 的数据包。
黄色显示,表达式被接受,但可能无法按预期过滤。
总结
- 显示过滤中的黄色提示,需根据实际场景区分,像是其他个别场景黄色显示也能正常工作;
- 表达式的语法,包括符号的使用,注意规范书写;
- 数据包字段,有可能因为多个字段同名(像是 ip.addr,或是数据包多层封装的原因),需注意精准过滤。
|