你如何测试Wireshark解剖器?

har*_*per 11 unit-testing wireshark wireshark-dissector

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

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

编辑:

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

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

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

har*_*per 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"
Run Code Online (Sandbox Code Playgroud)

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

XmlNode output = tsharkOutput.SelectSingleNode("packet/proto[@name='foo']");
XmlNodeList refList = referenceDocument.SelectNodes("proto[@name='foo']");
Run Code Online (Sandbox Code Playgroud)