Cloudflare avatud projekt , mille raames arendatakse tcpdumpile sarnast võrgu paketianalüsaatorit, mis on ehitatud aluseks (eXpress Data Path). Projekti kood on kirjutatud Go keeles ja ja BSD litsentsi alusel. Projekt on samuti raamatukogu eBPF liiklusprotsessorite sidumiseks Go keeles kirjutatud rakendustest.
Utiliit xdpcap on ühilduv tcpdump/libpcap filtreerimisavaldistega ja võimaldab oluliselt suuremaid andmevooge käsitleda samal riistvaral. Xdpcap-d saab kasutada ka tõrkeotsinguks tingimustes, kus tavapärane tcpdump ei sobi, näiteks, kui kasutatakse filtreerimis- ja DoS-rünnakute kaitsesüsteemide, koormuse tasakaalustamissüsteemide, mis kasutavad Linuxi tuuma XDP süsteemi, mis töötleb pakette enne nende töötlemist Linuxi võrgu stackis (tcpdump ei näe pakette, mida XDP töötleja on tagasi lükanud).
Suure jõudluse saavutamine on võimalik eBPF ja XDP süsteemide kasutamise tõttu. eBPF on Linuxi tuuma sisse ehitatud baitekoodi tõlkija, mis võimaldab luua kõrge jõudlusega sisenevate/väljuvate pakettide töötlejaid, mis teevad otsuseid nende suunamise või tagasi lükkamise kohta. JIT-compilatori abil tõlgitakse eBPF baitekood reaalajas masinakeele käsklusteks ja seda täidetakse kohaliku koodi kiirusel. XDP süsteem (eXpress Data Path) täiendab eBPF-i võimalusega käivitada BPF-programme võrgu draiveri tasemel, toetades otsepääsu DMA-paketivõrku ja töötlemist enne skbuff-iblioteegi eraldamist võrgu stackis.
Nagu tcpdump, tõlgib utiliit xdpcap esmalt kõrgema taseme liiklusfiltreerimise reeglid klassikaliseks BPF (cBPF) esinduseks, kasutades põhi biblioteegi libpcap, seejärel muundab need eBPF alamprogrammide vormi, kasutades kompilaatorit , mis põhineb LLVM/Clang arendustel. Lõpptulemusena salvestatakse liiklusandmed standardvormingus pcap, mis võimaldab kasutada xdpcap-s loodud andmevoogu hilisemaks uurimiseks tcpdumpis ja teistes olemasolevates paketianalüsaatorites. Näiteks, et saada DNS liiklusandmeid, võib käivitada käsu "xdpcap /path/to/hook capture.pcap 'ip and udp port 53'", mille järel saab kasutada faili capture.pcap, näiteks käsuga "tcpdump -r" või Wiresharkis.
Allikas: opennet.ru
