Cloudflare progetto aperto , nell'ambito del quale si sviluppa un analizzatore di pacchetti di rete simile a tcpdump, costruito sulla base del sistema (eXpress Data Path). Il codice del progetto è scritto in linguaggio Go e è sotto licenza BSD. Il progetto include anche una libreria per il binding degli handler eBPF del traffico da applicazioni scritte in Go.
L'utilità xdpcap è compatibile con le espressioni di filtraggio tcpdump/libpcap e consente di elaborare su quell'hardware volumi di traffico significativamente maggiori. Xdpcap può essere utilizzato anche per il debugging in situazioni in cui tcpdump normale non è applicabile, ad esempio quando vengono utilizzati sistemi di filtraggio, protezione da attacchi DoS e bilanciamento del carico, che impiegano il sottosistema del kernel Linux XDP, elaborando i pacchetti in fase precedente alla loro elaborazione nel stack di rete del kernel Linux (tcpdump non vede pacchetti scartati dal gestore XDP).
Le elevate prestazioni sono ottenute grazie all'uso dei sottosistemi eBPF e XDP. eBPF è un interpretatore di bytecode integrato nel kernel di Linux, che consente di creare gestori ad alte prestazioni per pacchetti in entrata e in uscita, prendendo decisioni sul loro reindirizzamento o scarto. Con l'aiuto del compilatore JIT, il bytecode eBPF viene tradotto al volo in istruzioni macchina ed eseguito con prestazioni paragonabili a quelle del codice nativo. Il sottosistema XDP (eXpress Data Path) integra eBPF con la capacità di eseguire programmi BPF a livello del driver di rete, supportando l'accesso diretto ai buffer DMA dei pacchetti e operando nella fase precedente all'assegnazione del buffer skbuff dallo stack di rete.
Come tcpdump, l'utilità xdpcap traduce inizialmente le regole di filtraggio del traffico ad alto livello nella rappresentazione classica BPF (cBPF) utilizzando la libreria standard libpcap, per poi convertirle nella forma di sotto-programmi eBPF, impiegando il compilatore. , che utilizza i risultati di LLVM/Clang. Le informazioni sul traffico vengono salvate in un formato standard pcap, consentendo di utilizzare il dump del traffico preparato in xdpcap per un'analisi successiva in tcpdump e altri analizzatori di traffico esistenti. Ad esempio, per catturare informazioni sul traffico DNS, invece del comando «tcpdump ip and udp port 53», si può lanciare «xdpcap /path/to/hook capture.pcap ‘ip and udp port 53’», dopo di che utilizzare il file capture.pcap, ad esempio, con il comando «tcpdump -r» o in Wireshark.
Fonte: opennet.ru
