Cloudflare offenes Projekt , im Rahmen dessen ein ähnlicher Netzwerkpaketanalyse-Tool wie tcpdump entwickelt wird, basierend auf dem Subsystem (eXpress Data Path). Der Projektcode ist in der Sprache Go geschrieben und unter der BSD-Lizenz. Das Projekt beinhaltet auch eine Bibliothek zur Anbindung von eBPF-Verkehrsverarbeitern aus Anwendungen in der Programmiersprache Go.
Das Tool xdpcap ist kompatibel mit den Filterausdrücken von tcpdump/libpcap und ermöglicht die Verarbeitung von wesentlich größeren Verkehrsvolumen auf derselben Hardware. Xdpcap kann auch zur Fehlersuche unter Bedingungen verwendet werden, in denen herkömmliches tcpdump nicht anwendbar ist, beispielsweise wenn Filter- und Schutzsysteme gegen DoS-Angriffe sowie Lastenausgleich eingesetzt werden, die das Linux-Kernel-XDP-Subsystem verwenden, um Pakete in der Phase vor deren Verarbeitung durch den Netzwerkkernel-Stack zu verarbeiten (tcpdump sieht keine Pakete, die vom XDP-Handler verworfen werden).
Hohe Leistung wird durch den Einsatz der eBPF- und XDP-Subsysteme erreicht. eBPF ist ein im Linux-Kernel integrierter Bytecode-Interpreter, der es ermöglicht, leistungsstarke Verarbeiter von eingehenden/ausgehenden Paketen zu erstellen, die Entscheidungen über deren Umleitung oder Verwerfung treffen. Mithilfe eines JIT-Compilers wird der eBPF-Bytecode zur Laufzeit in Maschinenbefehle übersetzt und mit der Leistung von nativen Code ausgeführt. Das XDP-Subsystem (eXpress Data Path) ergänzt eBPF, indem es die Ausführung von BPF-Programmen auf der Ebene des Netzwerktreibers ermöglicht, mit Unterstützung für den direkten Zugriff auf den DMA-Paketpuffer und die Arbeit in der Phase vor der Zuweisung des skbuff-Puffers durch den Netzwerkstack.
Wie tcpdump übersetzt das Tool xdpcap zunächst hochrangige Filterregeln in die klassische BPF-Darstellung (cBPF) mit der Standardbibliothek libpcap, bevor es sie in Form von eBPF-Unterprogrammen transformiert, wobei der Compiler , der auf Technologien von LLVM/Clang basiert, verwendet wird. Am Ende werden die Verkehrsdetails im Standardformat pcap gespeichert, was es ermöglicht, den in xdpcap erstellten Verkehrs-Dump für weitere Analysen in tcpdump und anderen bestehenden Verkehrsanalysatoren zu verwenden. Zum Beispiel kann man zur Erfassung von DNS-Verkehrsinformationen anstelle des Kommandos „tcpdump ip and udp port 53“ den Befehl „xdpcap /path/to/hook capture.pcap ‘ip and udp port 53’“ ausführen, wonach die Datei capture.pcap z.B. mit dem Befehl „tcpdump -r“ oder in Wireshark verwendet werden kann.
Quelle: opennet.ru
