Compania Cloudflare proiect deschis , în cadrul căruia se dezvoltă un analizator de pachete de rețea asemănător cu tcpdump, construit pe baza subsistemului (eXpress Data Path). Codul proiectului este scris în limbajul Go și sub licența BSD. Proiectul include de asemenea o bibliotecă pentru legarea handler-elor eBPF de trafic din aplicații scrise în Go.
Utilitarul xdpcap este compatibil cu expresiile de filtrare tcpdump/libpcap și permite procesarea unor volume semnificativ mai mari de trafic pe același echipament. Xdpcap poate fi utilizat și pentru depanare în condiții în care tcpdump obișnuit nu poate fi folosit, de exemplu, atunci când sunt aplicate sisteme de filtrare, protecție împotriva atacurilor DoS și echilibrarea încărcării, care utilizează subsistemul XDP al nucleului Linux, procesând pachetele înainte de a fi gestionate de stiva de rețea a nucleului Linux (tcpdump nu vede pachetele eliminate de handler-ul XDP).
Performanța ridicată este obținută datorită utilizării subsistemelor eBPF și XDP. eBPF este un interpret de bytecode încorporat în nucleul Linux, permițând crearea de handler-e de pachete de intrare/ieșire de înaltă performanță prin luarea deciziilor de redirecționare sau eliminare a acestora. Prin intermediul compilatorului JIT, bytecode-ul eBPF este transformat în instrucțiuni de mașină și executat cu performanța codului nativ. Subsistemul XDP (eXpress Data Path) completează eBPF cu capacitatea de a rula programe BPF la nivelul driver-ului de rețea, oferind suport pentru acces direct la buffer-ul DMA al pachetelor și funcționând înainte de alocarea buffer-ului skbuff de către stiva de rețea.
Ca și tcpdump, utilitarul xdpcap transformă inițial regulile de filtrare a traficului la un nivel înalt în reprezentarea clasică BPF (cBPF) folosind biblioteca standard libpcap, după care le transformă în forma subprogramelor eBPF, folosind compilatorul , care utilizează instrumentele LLVM/Clang. La final, informațiile despre trafic sunt salvate într-un format standard pcap, ceea ce permite utilizarea dump-ului de trafic generat prin xdpcap pentru studii ulterioare în tcpdump și alte analizatoare de trafic existente. De exemplu, pentru a captura informații despre traficul DNS, în loc de comanda „tcpdump ip and udp port 53”, se poate rula „xdpcap /path/to/hook capture.pcap ‘ip and udp port 53’”, după care se poate folosi fișierul capture.pcap, de exemplu, cu comanda „tcpdump -r” sau în Wireshark.
Sursa: opennet.ro
