当您为 Wireshark 编写解析器时,您如何对其进行测试?在 UI 中寻找视觉输出对于一个重要的协议是不够的。
有没有对解剖器进行单元测试的好方法?
编辑:
协议帧的结构是动态的。解剖者必须以某种方式解释内容。
例如,如果第五个字段是一个字节数组作为第六个字段。如果它是两个你有一个双数组,如果它是三个你必须添加一个以零结尾的字符串。
这通常不会在日常工作捕获中发生。这就是为什么您需要合成捕获数据,即使是“不可能”的内容。
当您为 Wireshark 编写解析器时,您如何对其进行测试?在 UI 中寻找视觉输出对于一个重要的协议是不够的。
有没有对解剖器进行单元测试的好方法?
编辑:
协议帧的结构是动态的。解剖者必须以某种方式解释内容。
例如,如果第五个字段是一个字节数组作为第六个字段。如果它是两个你有一个双数组,如果它是三个你必须添加一个以零结尾的字符串。
这通常不会在日常工作捕获中发生。这就是为什么您需要合成捕获数据,即使是“不可能”的内容。
为了测试 Wireshark 解剖器,我发现这很有用:
text2pcap
tshark
这可以通过过滤 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']");
您可以使用 Scapy 或 PacketSender 之类的东西来生成测试数据包。
我想我是老式的。解剖器的主要目的是将数据转换为人类可读的形式,所以我通过让人类阅读来测试我的。
我想您可以通过从 导出到 txt 或 pdmlfile->export
或在插件 DLL 周围实施某种测试包装器来进行更多自动化测试。
您可以解析tshark的输出。
只是为了更新帖子。
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