Компания Cloudflare открит проект , в рамките на който се развива анализатор на мрежови пакети, подобен на tcpdump, основан на подсистемата (eXpress Data Path). Кодът на проекта е написан на езика Go и е лицензирано под BSD. Проектът включва също библиотека за свързване на eBPF обработвачи на трафик от приложения на езика Go.
Утилитата xdpcap е съвместима с изразите за филтриране tcpdump/libpcap и позволява обработка на значително по-големи обеми трафик на същото оборудване. Xdpcap може също така да се използва за отстраняване на проблеми при условия, при които обикновеният tcpdump не е приложим, например когато се използват системи за филтриране, защита от DoS атаки и балансировка на натоварването, които използват подсистемата на ядрото на Linux XDP, обработваща пакетите на етапа преди обработката им от мрежовия стек на ядрото на Linux (tcpdump не вижда пакетите, отхвърлени от обработвача на XDP).
Висока производителност се постига благодарение на използването на подсистемите eBPF и XDP. eBPF представлява вграден интерпретатор на байткод в ядрото на Linux, който позволява създаването на високопроизводителни обработвачи на входящи/изходящи пакети с решения за тяхната пренасочване или отхвърляне. Чрез JIT компилатор байткодът eBPF в движение се трансформира в машинни инструкции и се изпълнява с производителността на нативен код. Подсистемата XDP (eXpress Data Path) допълва eBPF с възможността да стартира BPF програми на нивото на мрежовия драйвер, с поддръжка на директен достъп до DMA буферите на пакетите и работа на етапа преди разпределението на буфера skbuff от мрежовия стек.
Както tcpdump, утилитата xdpcap първоначално трансформира високоуровневите правила за филтриране на трафика в класическото представяне BPF (cBPF) чрез стандартната библиотека libpcap, след което ги преобразува в форма на eBPF подпрограми, като използва компилатора , който използва разработки на LLVM/Clang. На изхода информацията за трафика се запазва в стандартен формат pcap, което позволява подготвения в xdpcap дамп на трафика да се използва за последващо проучване в tcpdump и други съществуващи анализатори на трафика. Например, за захващане на информация за DNS трафика вместо командата „tcpdump ip and udp port 53“ може да се стартира „xdpcap /path/to/hook capture.pcap ‘ip and udp port 53’“, след което файлът capture.pcap може да се използва, например, с командата „tcpdump -r“ или в Wireshark.
Източник: opennet.ru
