Das Unternehmen Cloudflare Open-Source-Projekt , das einen Netzwerkpaketanalyzer ähnlich wie tcpdump entwickelt, basierend auf der Subsystem (eXpress Data Path). Der Projektcode ist in Go geschrieben und unter der BSD-Lizenz. Das Projekt hat auch Bibliothek zur Anbindung von eBPF-Verkehrsverarbeitern für Anwendungen in Go vorbereitet.
Das Tool xdpcap ist kompatibel mit den Filterausdrücken von tcpdump/libpcap und ermöglicht die Verarbeitung erheblich größerer Datenmengen auf derselben Hardware. Xdpcap kann auch zur Fehlersuche in Umgebungen verwendet werden, in denen normales tcpdump nicht anwendbar ist, wie zum Beispiel bei der Verwendung von Filtrierungssystemen, DoS-Schutz und Lastverteilung, die das Linux-Kernel-XDP-Subsystem nutzen, um Pakete vor ihrer Verarbeitung durch den Linux-Netzwerkstack zu bearbeiten (tcpdump sieht keine Pakete, die vom XDP-Handler verworfen wurden).
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, hochperformante Handler für eingehende und ausgehende Pakete zu erstellen, die Entscheidungen über deren Umleitung oder Verwerfung treffen. Mithilfe eines JIT-Compilers wird der eBPF-Bytecode zur Laufzeit in Maschinenanweisungen umgewandelt und mit der Leistung von nativem Code ausgeführt. Das XDP-Subsystem (eXpress Data Path) ergänzt eBPF um die Fähigkeit, BPF-Programme auf der Ebene des Netzwerkdrivers auszuführen, mit Unterstützung für den direkten Zugriff auf die DMA-Paketpuffer und arbeitet in der Phase vor der Zuweisung des skbuff-Puffers durch den Netzwerk-Stack.
Ähnlich wie tcpdump übersetzt das Tool xdpcap zunächst hochrangige Verkehrfilterregeln in die klassische BPF-Darstellung (cBPF) mithilfe der Standardbibliothek libpcap, gefolgt von der Umwandlung in die Form von eBPF-Unterprogrammen unter Verwendung des Compilers. , der auf den Entwicklungen von LLVM/Clang basiert. Die ausgegebenen Verkehrsinformationen werden im Standardformat pcap gespeichert, was die Verwendung eines in xdpcap vorbereiteten Verkehrsdumps für eine anschließende Analyse in tcpdump und anderen vorhandenen Verkehrsanalysewerkzeugen ermöglicht. Um beispielsweise DNS-Verkehrsdaten zu erfassen, kann anstelle des Befehls „tcpdump ip and udp port 53“ der Befehl „xdpcap /path/to/hook capture.pcap 'ip and udp port 53'“ verwendet werden. Anschließend kann die Datei capture.pcap beispielsweise mit dem Befehl „tcpdump -r“ oder in Wireshark genutzt werden.
Quelle: opennet.ru
