L'azienda Cloudflare progetto aperto , nell'ambito del quale si sviluppa un analizzatore di pacchetti di rete simile a tcpdump, costruito sulla base del sottosistema (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 per il traffico delle applicazioni in linguaggio Go.
L'utilità xdpcap è compatibile con le espressioni di filtraggio tcpdump/libpcap e consente di elaborare su stesso hardware volumi di traffico significativamente maggiori. Xdpcap può anche essere utilizzato per il debug in situazioni in cui tcpdump normale non è applicabile, ad esempio quando sono in uso sistemi di filtraggio, protezione da attacchi DoS e bilanciamento del carico, che sfruttano il sottosistema XDP del kernel Linux, che elabora i pacchetti prima che vengano gestiti dallo stack di rete del kernel Linux (tcpdump non vede i pacchetti scartati dall'handler XDP).
Alte prestazioni sono raggiunte grazie all'uso dei sottosistemi eBPF e XDP. L'eBPF è un interprete di bytecode integrato nel kernel Linux, che consente di creare handler ad alte prestazioni per pacchetti in entrata/uscita, con decisioni riguardo al loro reindirizzamento o scarto. Utilizzando un compilatore JIT, il bytecode eBPF viene tradotto in tempo reale in istruzioni macchina e viene eseguito con prestazioni paragonabili al codice nativo. Il sottosistema XDP (eXpress Data Path) integra l'eBPF permettendo di eseguire programmi BPF a livello del driver di rete, con supporto per l'accesso diretto al buffer DMA dei pacchetti e operando prima dell'allocazione del buffer skbuff dallo stack di rete.
Come tcpdump, l'utilità xdpcap traduce inizialmente le regole di filtraggio del traffico ad alto livello in un formato BPF classico (cBPF) utilizzando la libreria standard libpcap, quindi le converte in una forma di sottoprogrammi eBPF, utilizzando il compilatore , che sfrutta le funzionalità di LLVM/Clang. In output, le informazioni sul traffico vengono salvate in formato standard pcap, consentendo di utilizzare il dump di traffico preparato in xdpcap per ulteriori analisi in tcpdump e in altri analizzatori di traffico esistenti. Ad esempio, per catturare informazioni sul traffico DNS, invece del comando «tcpdump ip and udp port 53», si può eseguire «xdpcap /path/to/hook capture.pcap ‘ip and udp port 53’», dopodiché si utilizza il file capture.pcap, ad esempio, con il comando «tcpdump -r» o in Wireshark.
Fonte: opennet.ru
