Você pode dividi-lo em pelo menos estes tópicos principais:
-
Como coletar pacotes do sistema operacional - conhecimento dos recursos fornecidos pela pilha de rede do sistema operacional (e ocasionalmente modelo de driver).
Por exemplo, o Wireshark depende da libpcap para fazer o trabalho pesado, que precisa saber sobre métodos de captura no Linux, em BSDs, e vem com seu próprio driver de kernel para Windows (ex .: WinPcap / Npcap).
-
Como interpretar o conteúdo dos pacotes - conhecimento de onde encontrar informações sobre vários protocolos de rede.
Principalmente isso envolve a decodificação de dados binários, já que o Wireshark não participa de fato em nenhum desses protocolos; deixa a interpretação final para o usuário. -
Como apresentar os dados (e os outros recursos do programa) de uma maneira compreensível - o design da interface do usuário é um tópico totalmente separado da programação ou da rede, mas é muito importante.
(Isso pode causar exceções ao segundo ponto - por exemplo, o Wireshark compreende as conexões TCP para fornecer vários recursos de conveniência como "Seguir fluxo").
-
Como implementar a interface do usuário que você projetou - programação geral; conhecimento do kit de ferramentas GUI usado pelo sistema operacional (por exemplo, o Wireshark migrou recentemente do GTK para o Qt).