2010-12-13 43 views
7

當你爲Wireshark寫一個解剖器時,你如何測試它?尋找UI中的視覺輸出對於非平凡協議來說是不夠的。你如何測試一個Wireshark解剖器?

是否有解剖器單元測試的好方法?

編輯:

協議幀的結構是動態的。解剖者必須以某種方式解釋內容。

例如,如果第五個字段是一個字節數組作爲第六個字段。如果它是兩個,你有一個雙數組,如果它是三,你必須添加一個零終止的字符串。

這通常不會發生在日常工作中。這就是爲什麼即使有「不可能」內容也需要合成捕獲數據的原因。

回答

6

要測試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" 

要提取解剖器輸出使用XPATH表達式與.NET CLR類的XmlNode它是有用的。這可以通過這種方式完成:

XmlNode output = tsharkOutput.SelectSingleNode("packet/proto[@name='foo']"); 
XmlNodeList refList = referenceDocument.SelectNodes("proto[@name='foo']"); 
-1

我想我是老式的。解剖員的主要目的是將數據轉換爲人類可讀形式,所以我通過讓人們閱讀它來測試我的數據。

我想你可以做更多的自動化測試,從file->export導出到txt或pdml,或者在你的插件DLL中實現某種測試包裝。

+0

您只能檢查的實際數據的輸出。但是,如果數據不符合當前的協議規範,即下一個版本,您還應該測試解剖器的行爲。 – harper 2010-12-14 05:22:58

+0

你在問如何生成測試數據? libpcap文件格式在http://wiki.wireshark.org/Development/LibpcapFileFormat – 2010-12-14 14:37:09

+0

有詳細記錄。編號只有一個測試點。更有趣的是解剖器的輸出。 – harper 2013-03-28 13:48:21

0

你可以解析tshark的輸出。

+0

聽起來很合理。但是我有很多幀類型,幀差異,並希望檢查包含無效數據的幀的行爲。所以我需要一個夾具來提供一組數據,並猜測解剖器如何找到數據,如果它不同步,可能會重新同步。一種形式化的方法是將tsharks pdml輸出與XML模式進行比較。但是,如何省略不必要的部件? – harper 2010-12-25 09:15:04

相關問題