Ang Cloudflare ay naglathala ng xdpcap, isang traffic analyzer batay sa XDP subsystem

Cloudflare Company ipinakita bukas na proyekto xdpcap, kung saan binubuo ang isang network packet analyzer na katulad ng tcpdump, na binuo batay sa subsystem XDP (Path ng Data ng eXpress). Ang code ng proyekto ay nakasulat sa Go at ipinamahagi ni sa ilalim ng lisensya ng BSD. Ang proyekto din pinaghandaan library para sa nagbubuklod na mga humahawak ng trapiko ng eBPF mula sa mga application ng Go.

Ang xdpcap utility ay katugma sa tcpdump/libpcap filtering expressions at nagbibigay-daan sa iyong magproseso ng mas malalaking volume ng trapiko sa parehong hardware. Magagamit din ang Xdpcap para sa pag-debug sa mga kapaligiran kung saan hindi naaangkop ang regular na tcpdump, tulad ng pag-filter, proteksyon ng DoS, at mga sistema ng pagbabalanse ng load na gumagamit ng Linux kernel XDP subsystem, na nagpoproseso ng mga packet bago ang mga ito ay naproseso ng Linux kernel networking stack (tcpdump ay hindi nakakakita ng mga packet na ibinagsak ng XDP handler).

Ang mataas na pagganap ay nakakamit sa pamamagitan ng paggamit ng eBPF at XDP subsystem. Ang eBPF ay isang bytecode interpreter na binuo sa Linux kernel na nagbibigay-daan sa iyong lumikha ng mga handler na may mataas na pagganap ng mga papasok/papalabas na packet na may mga desisyon tungkol sa pagpapasa o pagtatapon sa mga ito. Gamit ang isang JIT compiler, ang eBPF bytecode ay isinalin sa mabilisang mga tagubilin sa makina at isinasagawa sa pagganap ng native code. Ang XDP (eXpress Data Path) subsystem ay nagpupuno sa eBPF ng kakayahang magpatakbo ng mga BPF program sa antas ng driver ng network, na may suporta para sa direktang pag-access sa DMA packet buffer at gumana sa yugto bago ang skbuff buffer ay inilalaan ng network stack.

Tulad ng tcpdump, isinasalin muna ng xdpcap utility ang mga panuntunan sa pag-filter ng mataas na antas ng trapiko sa klasikong representasyon ng BPF (cBPF) gamit ang karaniwang libpcap library, at pagkatapos ay i-convert ang mga ito sa anyo ng mga eBPF routine gamit ang isang compiler cbpfc, gamit ang LLVM/Clang developments. Sa output, ang impormasyon ng trapiko ay nai-save sa karaniwang pcap format, na nagbibigay-daan sa iyong gumamit ng traffic dump na inihanda sa xdpcap para sa kasunod na pag-aaral sa tcpdump at iba pang umiiral na traffic analyzer. Halimbawa, upang makuha ang impormasyon ng trapiko ng DNS, sa halip na gamitin ang command na "tcpdump ip at udp port 53", maaari mong patakbuhin ang "xdpcap /path/to/hook capture.pcap 'ip at udp port 53β€²" at pagkatapos ay gumamit ng capture .pcap file, hal. na may command na "tcpdump -r" o sa Wireshark.

Pinagmulan: opennet.ru

Magdagdag ng komento