Ettevõte Cloudflare avatud projekt , mille raames arendatakse tcpdumpi sarnast võrgu paketianalüsaatorit, mis on loodud aluseks olevate süsteemide põhjal (eXpress Data Path). Projekti kood on kirjutatud Go keeles ja BSD litsentsi alusel. Projekti käigus raamatukogu eBPF-töötlejate sidumiseks liiklusest Go keeles kirjutatud rakendustes.
Tööriist xdpcap on ühilduv tcpdump/libpcap filtreerimise väljenditega ja võimaldab samal riistvaral töödelda oluliselt suuremaid andmevooge. Xdpcap'i saab kasutada ka silumise jaoks olukordades, kus tavaline tcpdump ei toimi, näiteks kui kasutatakse filtreerimise, DoS-rünnakute kaitse ja koormuse jaotamise süsteeme, mis kasutavad Linuxi tuuma XDP alamsüsteemi, mis töötleb pakette enne nende töötlemist Linuxi tuuma võrgustiku soojendusse. (tcpdump ei näe pakette, mille XDP töötleja on kõrvald mõenud).
Kõrge jõudlus saavutatakse eBPF ja XDP alamsüsteemide kasutamise kaudu. eBPF on Linuxi tuuma integreeritud tõlgendaja, mis võimaldab luua kõrge jõudlusega sisenevate/väljuvate paketide töötlejate, kes otsustavad nende suunamise või kõrvaldamise üle. JIT-kompilaatori abil muudetakse eBPFi vahefail jooksvalt masina käskudeks ja täidetakse kohaliku koodi jõudlusega. XDP alamsüsteem (eXpress Data Path) täiendab eBPF-i võimalusega käivitada BPF-programme võrgu draiveri tasemel, pakkudes otsest juurdepääsu DMA-pakettide puhvri ja töötades enne skbuff puhvri eraldamist võrgu kihist.
Nii nagu tcpdump, translateerib tööriist xdpcap alguses kõrgema taseme liiklusfiltratsiooni reeglid klassikalisse BPF (cBPF) esitusse, kasutades tavalist libpcap raamatukogu, seejärel muundab need eBPF alamsubprogrammideks, kasutades kompilaatorit , mis kasutab LLVM/Clang'i arendusi. Väljundina salvestatakse liiklussisend standardsetesse pcap formaatidesse, mis võimaldab xdpcapi kaudu valmistatud andmevoo saadetust hiljem uurida tcpdumpi ja teiste olemasolevate paketianalüsaatorite abil. Näiteks DNS liiklussisendi püüdmiseks võib kasutada käsku «tcpdump ip and udp port 53» asemel «xdpcap /path/to/hook capture.pcap 'ip and udp port 53'», mille järel saab faili capture.pcap näiteks kasutada käsklusega «tcpdump -r» või Wiresharkis.
Allikas: opennet.ru
