Appearance
Appearance
这个补丁 fastfilter_rev27811.patch(在 Linux 上编译并测试)展示了一种可能用于加速 Wireshark 交互式数据包过滤的方法。以下各节将描述问题、解决方案和实现说明。
如果我对当前 Wireshark 实现的描述有误,请纠正我。
当前 Wireshark 实现并未利用过滤历史;也就是说,两次过滤不会共享关于过滤器字符串的知识。
下面的示例展示了过滤历史如何帮助我们加速过滤:
假设一个捕获文件包含 100 个数据包,其中有 80 个 TCP 数据包、20 个 UDP 数据包。在这 20 个 UDP 数据包中有 10 个 DNS 数据包。在这种情况下,我们还假设这些 DNS 数据包都位于 UDP 之上(注意 DNS 也可能位于 TCP 之上)。
第一个过滤器是 'udp',因此显示 20 个 UDP 数据包。我们以某种低成本方式保存该信息。
第二个过滤器是 'tcp',因此显示 80 个 TCP 数据包。我们也保存该信息。
第三个过滤器是 'udp && dns'。由于我们知道只有 20 个数据包通过了 'udp',因此只需要解析这 20 个数据包,并应用过滤器,即 'udp && dns',以找出 10 个 DNS 数据包。其他 80 个数据包会被直接跳过。
第四个过滤器是 'tcp'。由于我们保存了显示历史,因此只需要解析这 80 个 TCP 数据包。
简而言之,借助此前已应用过滤器的知识,我们可以只解析一部分数据包,从而节省可观时间。在上面的示例中,'udp && dns' 过滤器大约可以节省 80% 的时间。
在本节中,我们将以更抽象的方式描述这个问题的解决方案。
以下是一些实现说明:
[1] http://en.wikipedia.org/wiki/Boolean_satisfiability_problem
导入自 https://wiki.wireshark.org/Development/FastFiltering,时间为 2020-08-11 23:12:47 UTC