Firma Cloudflare otvorený projekt , v rámci ktorého sa vyvíja analyzátor sieťových paketov podobný tcpdumpu, postavený na báze subsystému (eXpress Data Path). Kód projektu je napísaný v jazyku Go a pod licenciou BSD. Projekt tiež poskytuje knižnicu na viazanie eBPF spracovateľov prevádzky z aplikácií napísaných v jazyku Go.
Nástroj xdpcap je kompatibilný s výrazmi filtrovania tcpdump/libpcap a umožňuje spracovávať na tej istej výbave podstatne väčšie objemy prevádzky. Xdpcap môže byť tiež použitý na ladění v podmienkach, kde je bežný tcpdump nepoužiteľný, napríklad keď sa používajú systémy filtrovania, ochrany pred DoS útokmi a vyvažovania záťaže, ktoré využívajú subsystém jadra Linuxu XDP spracovávajúci pakety v štádiu pred ich spracovaním sieťovým zásobníkom jadra Linuxu (tcpdump nevidí pakety, ktoré boli odmietnuté spracovateľom XDP).
Vysoký výkon sa dosahuje vďaka využitiu subsystémov eBPF a XDP. eBPF predstavuje vstavaný interpretátor bytekódu v jadre Linuxu, ktorý umožňuje vytvárať vysokovýkonné spracovateľov prichádzajúcich/odchádzajúcich paketov s rozhodovaním o ich presmerovaní alebo odmietnutí. Pomocou JIT kompilátora sa bytekód eBPF za behu prekladá na strojové inštrukcie a vykonáva sa s výkonom natívneho kódu. Subsystem XDP (eXpress Data Path) dopĺňa eBPF možnosťou spúšťať BPF programy na úrovni sieťového ovládača, s podporou priameho prístupu k DMA bufferu paketov a prácou v štádiu pred alokovaním bufferu skbuff sieťovým zásobníkom.
Rovnako ako tcpdump, nástroj xdpcap najprv prekladá vysokú úroveň pravidiel filtrovania prevádzky do klasického zobrazenia BPF (cBPF) pomocou štandardnej knižnice libpcap, po čom ich prevádza do formy podprogramov eBPF, využívajúc kompilátor , ktorý využíva technológie LLVM/Clang. Na výstupe sú informácie o prevádzke uchovávané v štandardnom formáte pcap, čo umožňuje použiť v xdpcap pripravený dump prevádzky na následné preskúmanie v tcpdump a iných existujúcich analyzátoroch prevádzky. Napríklad na zachytenie údajov o prevádzke DNS, namiesto príkazu „tcpdump ip and udp port 53“ môže byť spustený „xdpcap /path/to/hook capture.pcap ‘ip and udp port 53‘“, po čom môže byť súbor capture.pcap použitý, napríklad s príkazom „tcpdump -r“ alebo vo Wireshark.
Zdroj: opennet.ru
