Como se testa um dissector Wireshark?
editar:
A estrutura dos quadros de protocolo é dinâmica. O dissector deve de alguma forma interpretar o conteúdo.
por exemplo, se o quinto campo for um byte, segue-se como sexto campo. Se forem dois, tens uma matriz dupla e se for três você tem que adicionar um string zero terminado.
Isto normalmente nunca acontece numa captura diária de trabalho. É por isso que você precisa de dados sintéticos de captura mesmo com conteúdo "impossível".4 answers
Para testar um dissector Wireshark achei isto útil:
- Defina um conjunto de pacotes que o dissector deve analisar, incluindo pacotes malformados
- implemente os pacotes como uma lixeira hex
- Define o resultado esperado
- para cada descarga de pacotes
- gerar ficheiros pcap com
text2pcap
- execute o dissector com
tshark
- extrair a carga útil da saída PDML de tshark
- Compare a saída de XML com o XML esperado saída
- gerar ficheiros pcap com
Isto pode ser melhorado filtrando a saída de XML, uma vez que o PDML também inclui os bytes de pacotes, o que pode ser irritante se a carga é grande ou/e complexa.
Os argumentos sugeridos para os executáveis do wireshark são
text2pcap -T 1024,9876 foo.txt foo.pcap
tshark -T pdml -r "foo.pcap"
Para extrair o resultado do dissector, é útil usar uma expressão XPATH com a classe.net CLR XmlNode. Isto pode ser feito assim:
XmlNode output = tsharkOutput.SelectSingleNode("packet/proto[@name='foo']");
XmlNodeList refList = referenceDocument.SelectNodes("proto[@name='foo']");
Podes analisar a saída de tshark .
O Tshark usa os mesmos plugins que o Wireshark, e carrega-os no mesmo forma. tshark também é usado desta forma na Wireshark CI build testes, veja o diretório de testes das fontes de Wireshark para algum teste exemplos de Programas.
https://code.wireshark.org/review/gitweb?p=wireshark.git;a=árvore; f = ensaio
- grahamb.
Fonte: https://ask.wireshark.org/questions/36721/tshark-for-plugin-testing
Suponho que você poderia fazer mais testes automáticos exportando para txt ou pdml de {[[0]}, ou implementando algum tipo de invólucro de teste em torno do seu 'plugin' DLL.