Du hast zwei Filterebenen:
Die erste ist das capture filter, welches Unterstützung seitens des
Kerneltreibers benötigt, damit die nicht interessierenden Daten gar
nicht erst aus dem Kernel ins Userland befördert werden. Der
Klassiker dafür ist das Programm tcpdump, welches das BPF (Berkeley
Packet Filter) im Kernel bedient. Entsprechend äquivalente Dinge
werden auch in nicht-Berkeley-Systemen implementiert.
Meines Wissens hat die USB-Capture-Schnittstelle im Linux keine
derartige Funktionalität. Wäre manchmal recht praktisch, wenn man
auf diese Weise bspw. die nicht interessierenden Mouse-Events schon
vor dem Capture rauswerfen könnte …
Alle mitgeschnittenen Daten landen dann im Wireshark. Dort kann man
per display filter nochmal eine Auswahl treffen, was man sich von
den Daten wirklich anzeigen lassen will. Beim display filter kannst
du alles als Filterkriterium benutzen, was der entsprechende Dissektor
im Wireshark klassifiziert hat.
Durch die Lua-Schnittstelle kannst du eigene Postprozessoren oder
Dissektoren auch zur Laufzeit einfügen. Das ist zwar nicht so
performant wie eincompilierte, bietet aber viel Flexibilität, um
„mal schnell“ eigene Protokolle analysieren zu lassen. Ein solcher
Postprozessor oder Dissektor kann sich dabei auch in die normale
Wireshark-Hierarchie einklinken, sodass man dessen Klassifizierung für
ein display filter nutzen kann. Auch kannst du die Datenelemente für
die Darstellung hierarchisch einsortieren und dann auf- und zuklappen.
Habe sowas mal für ein paar spezielle Protokolle oberhalb von IEEE
802.15.4 geschrieben. Artet allerdings ziemlich schnell in eine
Fleißübung beim Schreiben des Lua-Scripts aus, auch muss man erstmal
in die Denkweise dieser Wireshark-Interna reinkommen.
Beim µracoli-Projekt findest du entsprechende Beispiele.