你如何测试Wireshark解剖器?

时间:2010-12-13 18:48:05

标签: unit-testing wireshark wireshark-dissector

当您为Wireshark编写解剖器时,您如何测试它?在UI中寻找视觉输出对于一个非平凡的协议是不够的。

解剖器的单元测试是否有好方法?

修改

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

例如,如果第五个字段是1,则字节数组作为第六个字段。如果它是两个你有一个双数组,如果它是三个你必须添加一个零终止字符串。

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

5 个答案:

答案 0 :(得分:9)

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

  • 定义解剖器应分析的一组数据包,包括格式错误的数据包
  • 将数据包实施为十六进制转储
  • 定义预期输出
  • 对于每个数据包转储
    • 使用text2pcap
    • 生成pcap文件
    • 使用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']");

答案 1 :(得分:1)

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

答案 2 :(得分:0)

您可以解析tshark的输出。

答案 3 :(得分: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

答案 4 :(得分:-1)

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

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