Empresa Cloudflare proyecto abierto , en el marco del cual se desarrolla un analizador de paquetes de red similar a tcpdump, basado en el subsistema (eXpress Data Path). El código del proyecto está escrito en el lenguaje Go y bajo la licencia BSD. El proyecto también una biblioteca para enlazar controladores de tráfico eBPF desde aplicaciones en el lenguaje Go.
La utilidad xdpcap es compatible con expresiones de filtrado tcpdump/libpcap y permite procesar volúmenes de tráfico mucho mayores en el mismo hardware. Xdpcap también puede usarse para depuración en situaciones donde tcpdump no es aplicable, por ejemplo, cuando se utilizan sistemas de filtrado, protección contra ataques de DoS y balanceo de carga que emplean el subsistema XDP del núcleo de Linux, que procesa paquetes en la fase anterior a su tratamiento por la pila de red del núcleo de Linux (tcpdump no ve paquetes descartados por el controlador XDP).
Un alto rendimiento se logra gracias a la utilización de los subsistemas eBPF y XDP. eBPF es un intérprete de bytecode integrado en el núcleo de Linux que permite crear controladores de paquetes de entrada/salida de alto rendimiento, tomando decisiones sobre su redirección o descarte. Con la ayuda de un compilador JIT, el bytecode eBPF se traduce sobre la marcha a instrucciones de máquina y se ejecuta con el rendimiento del código nativo. El subsistema XDP (eXpress Data Path) complementa a eBPF, permitiendo la ejecución de programas BPF en el nivel del controlador de red, con soporte para acceso directo al búfer DMA de los paquetes y trabajando en la fase anterior a la asignación de un búfer skbuff por la pila de red.
Al igual que tcpdump, la utilidad xdpcap inicialmente traduce reglas de filtrado de tráfico de alto nivel a la representación clásica BPF (cBPF) utilizando la biblioteca estándar libpcap, y luego las convierte en forma de subtareas eBPF, usando el compilador , que utiliza desarrollos de LLVM/Clang. Al final, la información sobre el tráfico se guarda en el formato estándar pcap, lo que permite usar el volcado de tráfico preparado en xdpcap para su posterior estudio con tcpdump y otros analizadores de tráfico existentes. Por ejemplo, para capturar información sobre el tráfico DNS, en lugar del comando "tcpdump ip and udp port 53", se puede ejecutar "xdpcap /path/to/hook capture.pcap ‘ip and udp port 53’", y luego usar el archivo capture.pcap, por ejemplo, con el comando "tcpdump -r" o en Wireshark.
Fuente: opennet.ru
