2010-12-13 14 views
7

Quando scrivi un dissettore per Wireshark, come fai a testarlo? Cercare l'output visivo nell'interfaccia utente non è sufficiente per un protocollo non banale.Come testare un dissettore Wireshark?

Esiste un buon metodo per il test dell'unità del dissettore?

EDIT:

La struttura del frame di protocollo è dinamico. Il dissettore deve in qualche modo interpretare il contenuto.

Ad esempio se il quinto campo è uno, un array di byte segue come sesto campo. Se è due hai un doppio array e se è tre devi aggiungere una stringa terminata da zero.

Questo in genere non avviene mai durante un'acquisizione quotidiana del lavoro. Ecco perché hai bisogno di dati di acquisizione sintetici anche con contenuti "impossibili".

risposta

6

per testare un dissettore Wireshark ho trovato questo utile:

  • definire una serie di pacchetti che il dissettore dovrebbero analizzare tra cui pacchetti malformati
  • Implementare i pacchetti come un dump esadecimale
  • Definire i risultati attesi
  • Per ogni pacchetto discarica
    • generare file pcap con text2pcap
    • Eseguire il dissettore con tshark
    • Estrarre il payload dall'uscita PDML di tshark
    • Confrontare l'output XML con l'output XML previsto

Questo può essere migliorata filtrando l'output XML dal il PDML include anche i byte del pacchetto, cosa che può essere fastidiosa se il carico utile è grande e/o complesso.

Il suggerito argomenti per gli eseguibili Wireshark sono

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

Per estrarre l'uscita dissector è utile per usare un'espressione XPath con il XmlNode .NET CLR di classe. Questo può essere fatto in questo modo:

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

Immagino di essere vecchio stile. Lo scopo principale di un dissettore è trasformare i dati in una forma leggibile dall'uomo, quindi ho testato il mio facendo leggere agli umani.

Suppongo che è possibile eseguire più test automatici esportando in txt o pdml da file->export o implementando una sorta di wrapper di test attorno alla DLL del plugin.

+0

È possibile controllare solo l'uscita di dati effettivi. Ma dovresti anche testare il comportamento del dissettore se ottiene dati che non si adattano alle specifiche del protocollo corrente, cioè la prossima versione. – harper

+0

Stai chiedendo come generare dati di test? Il formato del file libpcap è ben documentato su http://wiki.wireshark.org/Development/LibpcapFileFormat –

+0

No. La generazione è solo un punto nel test. Più interessante è l'uscita del dissettore. – harper

0

È possibile analizzare l'output di tshark.

+0

Sembra ragionevole. Ma ho molti tipi di frame, varianti di frame e voglio controllare il comportamento con frame contenenti dati non validi. Quindi ho bisogno di un dispositivo per fornire un insieme di dati e indovinare come il ricercatore trova i dati e probabilmente si riscrittura se non si sincronizza. Un approccio formalizzato sarebbe l'output di tsharks pdml da confrontare con un modello XML. Ma come posso omettere le parti che non sono necessarie? – harper

Problemi correlati