一直以来挺喜欢 Wireshark 的,它功能非常强大。
可是,今天遇到一点小问题。我用 != 运算符时,输入框的颜色变成了黄色,并提示
"!=" may have unexpected results (See the User's Guide)
我第一反应是,哪里有用户手册?随后又想,怎么不给个链接呢?
我把链接贴这里 原因是
ip.addr == 10.43.54.65 等价于 ip.src == 10.43.54.65 or ip.dst == 10.43.54.65
ip.addr != 10.43.54.65 等价于 ip.src != 10.43.54.65 or ip.dst != 10.43.54.65
所以,最终的解决方案是:
!(ip.src == 10.43.54.65)
或者
ip.src != 10.43.54.65 && ip.dst != 10.43.54.65
为什么 “!=” 这么特殊?
我联想到别的比较运算符,像 “>” 或 “<”。 假设你想显示的包的来源或目的(或两者兼有)端口号大于某个值:
tcp.port > 49152
现在假设你想要取反,即端口号全都小于某个值。如果你这么做:
tcp.port <= 49152
你会遇到相同的问题 (但这次 Wireshark 不会警告你)。它会显示所有的来源或目的(或两者兼有)都满足条件的包。
问题的本质
问题的根源在于 “opposite(取反)” 这个概念. 即:
a compare b
你认为对它取反是:
a opposite_compare b
但事实并不是这样,鉴于已有的组合表达式, 安全的做法是:
!(a compare b)
参考
http://blog.geeky-boy.com/2020/05/wireshark-may-have-unexpected-results.html
|