Biblioteca C++ multiplataforma para captura, análise, construção e parsing de pacotes de rede de alto desempenho. Suporta libpcap, DPDK, AF_XDP, PF_RING, e inclui remontagem TCP, fingerprinting TLS e decodificação de protocolos.
PcapPlusPlus é uma biblioteca C++ multiplataforma para captura, análise e criação de pacotes de rede. Foi projetada para ser eficiente, poderosa e fácil de usar.
O PcapPlusPlus permite capacidades de decodificação e forjamento para uma grande variedade de protocolos de rede. Também fornece wrappers C++ fáceis de usar para os motores de processamento de pacotes mais populares, como libpcap, WinPcap, Npcap, DPDK, eBPF AF_XDP, WinDivert e PF_RING.
Podes escolher entre descarregar da página de lançamento do GitHub, usar um gestor de pacotes ou compilar o PcapPlusPlus tu mesmo. Para mais detalhes, visita a página Download no site do PcapPlusPlus.
brew install pcapplusplus
Homebrew formulae: https://formulae.brew.sh/formula/pcapplusplus
Windows:
.\vcpkg install pcapplusplus
MacOS/Linux:
vcpkg install pcapplusplus
conan install "pcapplusplus/[>0]@" -u
O pacote no ConanCenter: https://conan.io/center/pcapplusplus
Clona o repositório git:
git clone https://github.com/seladb/PcapPlusPlus.git
Segue as instruções de compilação de acordo com a tua plataforma na página Build From Source no site do PcapPlusPlus.
Lançamentos do PcapPlusPlus mais recentes que v23.09 são assinados com atestação do GitHub. Todas as atestações podem ser encontradas aqui. Podes verificar a atestação destes pacotes com a CLI do GitHub. Para verificar pacotes, podes seguir as instruções mais recentes de gh attestation verify. Para instruções simples, podes usar o seguinte comando:
gh attestation verify <caminho-para-o-arquivo-do-pacote> --repository seladb/PcapPlusPlus
e deves ver a seguinte saída no teu terminal:
✓ Verificação bem-sucedida!
Escrever aplicações com PcapPlusPlus é muito fácil e intuitivo. Aqui está uma aplicação simples que mostra como ler um pacote de um ficheiro PCAP e analisá-lo:
#include <iostream>
#include "IPv4Layer.h"
#include "Packet.h"
#include "PcapFileDevice.h"
int main(int argc, char* argv[])
{
// open a pcap file for reading
pcpp::PcapFileReaderDevice reader("1_packet.pcap");
if (!reader.open())
{
std::cerr << "Error opening the pcap file" << std::endl;
return 1;
}
// read the first (and only) packet from the file
pcpp::RawPacket rawPacket;
if (!reader.getNextPacket(rawPacket))
{
std::cerr << "Couldn't read the first packet in the file" << std::endl;
return 1;
}
// parse the raw packet into a parsed packet
pcpp::Packet parsedPacket(&rawPacket);
// verify the packet is IPv4
if (parsedPacket.isPacketOfType(pcpp::IPv4))
{
// extract source and dest IPs
pcpp::IPv4Address srcIP = parsedPacket.getLayerOfType<pcpp::IPv4Layer>()->getSrcIPv4Address();
pcpp::IPv4Address destIP = parsedPacket.getLayerOfType<pcpp::IPv4Layer>()->getDstIPv4Address();
// print source and dest IPs
std::cout << "Source IP is '" << srcIP << "'; Dest IP is '" << destIP << "'" << std::endl;
}
// close the file
reader.close();
return 0;
}
Podes encontrar muito mais informação na página Getting Started no site do PcapPlusPlus. Esta página guiar-te-á por alguns passos fáceis para teres uma aplicação a funcionar.
O PcapPlusPlus consiste em 3 bibliotecas:
Podes encontrar uma documentação extensa da API na secção de documentação da API no site do PcapPlusPlus. Se vires algum dado em falta, por favor contacta-nos.
O PcapPlusPlus é atualmente suportado em
Windows
O PcapPlusPlus suporta atualmente a análise, edição e criação de pacotes dos seguintes protocolos:
The Data Plane Development Kit (DPDK) é um conjunto de bibliotecas de plano de dados e controladores de interface de rede para processamento rápido de pacotes.
PF_RING™ é um novo tipo de socket de rede que melhora dramaticamente a velocidade de captura de pacotes.
Ambos os frameworks fornecem processamento muito rápido de pacotes (até à velocidade da linha) e são usados em muitas aplicações de rede, como routers, firewalls, balanceadores de carga, etc. O PcapPlusPLus fornece uma camada de abstração C++ sobre DPDK e PF_RING. Esta camada de abstração fornece uma interface fácil de usar que remove grande parte do trabalho repetitivo envolvido na utilização destes frameworks. Podes saber mais visitando as páginas de suporte DPDK e PF_RING no site do PcapPlusPlus.
Usámos o projeto packet-capture-benchmarks de Matias Fontanini para comparar o desempenho do PcapPlusPlus com outras bibliotecas C++ semelhantes (como libtins e libcrafter).
Podes ver os resultados na página Benchmarks no site do PcapPlusPlus.
Ficaríamos muito felizes em receber feedback; por favor, não hesites em contactar-nos de qualquer uma das seguintes formas:
Se gostas deste projeto, por favor Dá-nos uma estrela no GitHub — isso ajuda! ⭐ ⭐
Visita o site do PcapPlusPlus para saberes mais.
Agradecemos muito qualquer contribuição para este projeto. Se estás interessado em contribuir, visita a página de contribuição no site do PcapPlusPlus.
O PcapPlusPlus é lançado sob a licença Unlicense.