Firma Cloudflare odprti projekt , v okviru katerega se razvija analizator omrežnih paketov, podoben tcpdump, ki temelji na podvizijah (eXpress Data Path). Koda projekta je napisana v jeziku Go in pod licenco BSD. Projekt vključuje knjižnico za vezavo eBPF obdelovalcev prometa iz aplikacij v jeziku Go.
Orodje xdpcap je združljivo z izraznimi filtri tcpdump/libpcap in omogoča obdelavo znatno večjih količin prometa na istem omrežju. Xdpcap se lahko uporablja tudi za odpravljanje napak v pogojih, kjer običajni tcpdump ni mogoč, na primer, ko delujejo sisteme filtriranja, zaščite pred napadi DoS in uravnoteženja obremenitev, ki uporabljajo podvizijo jedra Linux XDP, ki obravnava pakete pred obdelavo v omrežnem skladu jedra Linux (tcpdump ne vidi paketov, ki jih je zavrnil obdelovalec XDP).
Visoka zmogljivost se doseže s uporabo podvizij eBPF in XDP. eBPF je v jedro Linux vgrajen interpreter bajtne kode, ki omogoča ustvarjanje visoko zmogljivih obdelovalcev prihodnjih/odhodnih paketov z odločitvami o njihovi preusmeritvi ali zavrnitvi. Z uporabo JIT prevajalnika se bajtna koda eBPF v realnem času prevaja v strojne ukaze in izvaja s hitrostjo nativne kode. Podvizija XDP (eXpress Data Path) dopolnjuje eBPF z možnostjo izvajanja BPF programov na ravni omrežnega gonilnika, z neposrednim dostopom do DMA pomnilnika paketov in deluje pred dodeljevanjem pomnilnika skbuff omrežnemu skladu.
Podobno kot tcpdump, orodje xdpcap na začetku prevaža visoko nivojska pravila filtriranja prometa v klasično predstavitev BPF (cBPF) s pomočjo standardne knjižnice libpcap, nato pa jih pretvori v obliko eBPF podprogramov z uporabo prevajalnika , ki izkorišča orodja LLVM/Clang. Rezultati o prometu se shranijo v standardni obliki pcap, kar omogoča uporabo pripravljenega v xdpcap zajema prometa za poznejšo analizo v tcpdumpu in drugih obstoječih analizatorjih prometa. Na primer, za zajem podatkov o DNS prometu namesto ukaza „tcpdump ip and udp port 53“ lahko zaženete „xdpcap /pot/do/hook capture.pcap ‘ip and udp port 53’“, nato pa uporabite datoteko capture.pcap, na primer z ukazom „tcpdump -r“ ali v Wiresharku.
Izvor: opennet.ru
