Cloudflare har publisert xdpcap, en trafikkanalysator basert på XDP-undersystemet

Cloudflare Company presentert åpent prosjekt xdpcap, der det utvikles en nettverkspakkeanalysator som ligner på tcpdump, bygget på grunnlag av undersystemet XDP (eXpress Data Path). Prosjektkoden er skrevet i Go og distribuert av under BSD-lisens. Prosjektet også forberedt bibliotek for binding av eBPF-trafikkbehandlere fra Go-applikasjoner.

Xdpcap-verktøyet er kompatibelt med tcpdump/libpcap-filtreringsuttrykk og lar deg behandle betydelig større mengder trafikk på samme maskinvare. Xdpcap kan også brukes til feilsøking i miljøer der vanlig tcpdump ikke er aktuelt, for eksempel filtrering, DoS-beskyttelse og lastbalanseringssystemer som bruker Linux-kjernens XDP-delsystem, som behandler pakker før de behandles av Linux-kjernens nettverksstabel (tcpdump ser ikke pakker droppet av XDP-behandleren).

Høy ytelse oppnås gjennom bruk av eBPF- og XDP-delsystemer. eBPF er en bytekode-tolk innebygd i Linux-kjernen som lar deg lage høyytelses-behandlere av innkommende/utgående pakker med beslutninger om videresending eller forkasting. Ved å bruke en JIT-kompilator blir eBPF-bytekode oversatt til maskininstruksjoner og utført med ytelsen til opprinnelig kode. XDP (eXpress Data Path)-undersystemet utfyller eBPF med muligheten til å kjøre BPF-programmer på nettverksdrivernivå, med støtte for direkte tilgang til DMA-pakkebufferen og arbeid på stadiet før skbuff-bufferen tildeles av nettverksstakken.

I likhet med tcpdump, oversetter xdpcap-verktøyet først trafikkfiltreringsregler på høyt nivå til den klassiske BPF-representasjonen (cBPF) ved å bruke standard libpcap-biblioteket, og konverterer dem deretter til form av eBPF-rutiner ved hjelp av en kompilator cbpfc, ved hjelp av LLVM/Clang-utviklinger. Ved utgangen lagres trafikkinformasjon i standard pcap-format, som lar deg bruke en trafikkdump utarbeidet i xdpcap for etterfølgende studier i tcpdump og andre eksisterende trafikkanalysatorer. For eksempel, for å fange opp DNS-trafikkinformasjon, i stedet for å bruke kommandoen "tcpdump ip og udp port 53", kan du kjøre "xdpcap /path/to/hook capture.pcap 'ip and udp port 53'" og deretter bruke en capture .pcap-fil, for eksempel med kommandoen "tcpdump -r" eller i Wireshark.

Kilde: opennet.ru

Legg til en kommentar