La société Cloudflare projet open source , dans le cadre duquel se développe un analyseur de paquets réseau semblable à tcpdump, construit sur la base du sous-système (eXpress Data Path). Le code du projet est écrit en langage Go et sous licence BSD. Le projet comprend également une bibliothèque pour lier les gestionnaires de trafic eBPF à partir d'applications en langage Go.
L'outil xdpcap est compatible avec les expressions de filtrage tcpdump/libpcap et permet de traiter des volumes de trafic considérablement plus importants sur le même matériel. Xdpcap peut également être utilisé pour le débogage dans des conditions où tcpdump traditionnel est inapplicable, par exemple, lorsqu'il existe des systèmes de filtrage, de protection contre les attaques DDoS et d'équilibrage de charge utilisant le sous-système XDP du noyau Linux, qui traite les paquets avant leur traitement par la pile réseau du noyau Linux (tcpdump ne voit pas les paquets rejetés par le gestionnaire XDP).
Des performances élevées sont obtenues grâce à l'utilisation des sous-systèmes eBPF et XDP. eBPF est un interpréteur de bytecode intégré au noyau Linux, permettant de créer des gestionnaires très performants pour les paquets entrants/sortants tout en prenant des décisions sur leur redirection ou leur rejet. Grâce au compilateur JIT, le bytecode eBPF est traduit à la volée en instructions machine et exécuté avec des performances de code natif. Le sous-système XDP (eXpress Data Path) complète eBPF en permettant d'exécuter des programmes BPF au niveau du pilote réseau, avec un accès direct au buffer DMA des paquets et un fonctionnement avant l'allocation de buffers skbuff par la pile réseau.
Tout comme tcpdump, l'outil xdpcap traduit d'abord des règles de filtrage de trafic de haut niveau en représentation classique BPF (cBPF) à l'aide de la bibliothèque libpcap standard, puis les transforme en forme de sous-programmes eBPF en utilisant le compilateur , qui s'appuie sur les travaux LLVM/Clang. En sortie, les informations sur le trafic sont enregistrées au format standard pcap, ce qui permet d'utiliser le dump de trafic préparé dans xdpcap pour une étude ultérieure dans tcpdump et d'autres analyseurs de trafic existants. Par exemple, pour capturer des informations sur le trafic DNS, au lieu de la commande «tcpdump ip and udp port 53», on peut exécuter «xdpcap /path/to/hook capture.pcap 'ip and udp port 53'», puis utiliser le fichier capture.pcap, par exemple, avec la commande «tcpdump -r» ou dans Wireshark.
Source : opennet.ru
