12

当您为 Wireshark 编写解析器时,您如何对其进行测试?在 UI 中寻找视觉输出对于一个重要的协议是不够的。

有没有对解剖器进行单元测试的好方法?

编辑:

协议帧的结构是动态的。解剖者必须以某种方式解释内容。

例如,如果第五个字段是一个字节数组作为第六个字段。如果它是两个你有一个双数组,如果它是三个你必须添加一个以零结尾的字符串。

这通常不会在日常工作捕获中发生。这就是为什么您需要合成捕获数据,即使是“不可能”的内容。

4

5 回答 5

9

为了测试 Wireshark 解剖器,我发现这很有用:

  • 定义解析器应分析的一组数据包,包括格式错误的数据包
  • 将数据包实现为十六进制转储
  • 定义预期输出
  • 对于每个数据包转储
    • 生成 pcap 文件text2pcap
    • 运行解剖器tshark
    • 从 tshark 的 PDML 输出中提取有效负载
    • 将 XML 输出与预期的 XML 输出进行比较

这可以通过过滤 XML 输出来改进,因为 PDML 还包括数据包字节,如果有效负载很大或/和复杂,这可能会很烦人。

对 wireshark 可执行文件的建议参数是

text2pcap -T 1024,9876 foo.txt foo.pcap
tshark -T pdml -r "foo.pcap"

要提取解析器输出,使用带有 .NET CLR 类 XmlNode 的 XPATH 表达式很有用。这可以通过以下方式完成:

XmlNode output = tsharkOutput.SelectSingleNode("packet/proto[@name='foo']");
XmlNodeList refList = referenceDocument.SelectNodes("proto[@name='foo']");
于 2010-12-27T09:14:34.380 回答
2

您可以使用 Scapy 或 PacketSender 之类的东西来生成测试数据包。

于 2020-04-09T23:35:37.377 回答
0

我想我是老式的。解剖器的主要目的是将数据转换为人类可读的形式,所以我通过让人类阅读来测试我的。

我想您可以通过从 导出到 txt 或 pdmlfile->export或在插件 DLL 周围实施某种测试包装器来进行更多自动化测试。

于 2010-12-13T20:30:07.373 回答
0

您可以解析tshark的输出。

于 2010-12-20T05:01:08.737 回答
0

只是为了更新帖子。

Tshark 使用与 Wireshark 相同的插件,并以相同的方式加载它们。tshark 在 Wireshark CI 构建测试中也是以这种方式使用的,一些测试脚本示例见 Wireshark 源码的测试目录。
https://code.wireshark.org/review/gitweb?p=wireshark.git;a=tree;f=test
- grahamb。

来源:https ://ask.wireshark.org/questions/36721/tshark-for-plugin-testing

于 2016-08-27T13:02:52.007 回答