A empresa Cloudflare projeto aberto , no qual é desenvolvido um analisador de pacotes de rede semelhante ao tcpdump, baseado no subsistema (eXpress Data Path). O código do projeto é escrito na linguagem Go e licenciado sob a licença BSD. O projeto também inclui uma biblioteca para vinculação de manipuladores de tráfego eBPF de aplicações em Go.
A ferramenta xdpcap é compatível com expressões de filtragem tcpdump/libpcap e permite processar volumes de tráfego significativamente maiores no mesmo hardware. O xdpcap também pode ser utilizado para depuração em condições onde o tcpdump convencional não é aplicável, por exemplo, quando sistemas de filtragem, proteção contra ataques DoS e balanceamento de carga que utilizam o subsistema XDP do núcleo Linux estão em uso, processando pacotes antes que sejam tratados pela pilha de rede do núcleo Linux (tcpdump não vê pacotes descartados pelo manipulador XDP).
Desempenho elevado é alcançado através da aplicação dos subsistemas eBPF e XDP. O eBPF é um interpretador de bytecode embutido no núcleo Linux que permite criar manipuladores de pacotes de entrada/saída de alto desempenho, tomando decisões sobre seu redirecionamento ou descarte. Com um compilador JIT, o bytecode eBPF é traduzido em instruções de máquina em tempo real e executado com desempenho de código nativo. O subsistema XDP (eXpress Data Path) complementa o eBPF, permitindo a execução de programas BPF no nível do driver de rede, com suporte ao acesso direto ao buffer DMA de pacotes e operação antes da alocação do buffer skbuff pela pilha de rede.
Assim como o tcpdump, a ferramenta xdpcap inicialmente traduz regras de filtragem de tráfego de alto nível para a representação BPF clássica (cBPF) usando a biblioteca padrão libpcap, em seguida transforma-as em forma de subprogramas eBPF, utilizando o compilador , que aproveita a infraestrutura do LLVM/Clang. No final, as informações sobre o tráfego são salvas no formato padrão pcap, o que permite que o dump de tráfego preparado no xdpcap seja utilizado para estudo posterior no tcpdump e em outros analisadores de tráfego existentes. Por exemplo, para capturar informações sobre tráfego DNS, ao invés do comando "tcpdump ip and udp port 53", pode-se executar "xdpcap /path/to/hook capture.pcap 'ip and udp port 53'", depois usar o arquivo capture.pcap, por exemplo, com o comando "tcpdump -r" ou no Wireshark.
Fonte: opennet.ru
