PcapPlusPlus é uma biblioteca C++ multiplataforma para captura, análise e elaboração de pacotes de rede. Ele foi projetado para ser eficiente, poderoso e fácil de usar.
PcapPlusPlus permite recursos de decodificação e forjamento para uma grande variedade de protocolos de rede. Ele também fornece wrappers C++ fáceis de usar para os mecanismos de processamento de pacotes mais populares, como libpcap, WinPcap, Npcap, DPDK, eBPF AF_XDP e PF_RING.
Índice
Download
Página de lançamento do GitHub
Cerveja caseira
Vcpkg
Conan
Construa você mesmo
Verifique seus pacotes
Visão geral dos recursos
Começando
Documentação da API
Suporte multiplataforma
Protocolos de rede suportados
Camada de enlace de dados (L2)
Camada de Rede (L3)
Camada de Transporte (L4)
Camada de Sessão (L5)
Camada de Apresentação (L6)
Camada de Aplicação (L7)
Suporte DPDK e PF_RING
Referências
Fornecer comentários
Contribuindo
Licença
Você pode escolher entre fazer download da página de lançamento do GitHub, usar um gerenciador de pacotes ou construir você mesmo o PcapPlusPlus. Para mais detalhes, visite a página de download no site do PcapPlusPlus.
https://github.com/seladb/PcapPlusPlus/releases/latest
preparar instalar pcapplusplus
Fórmulas de homebrew: https://formulae.brew.sh/formula/pcapplusplus
Windows:
.vcpkg install pcapplusplus
MacOS/Linux:
vcpkg install pcapplusplus
Porta Vcpkg: https://github.com/microsoft/vcpkg/tree/master/ports/pcapplusplus
conan install "pcapplusplus/[>0]@" -u
O pacote no ConanCenter: https://conan.io/center/pcapplusplus
Clone o repositório git:
clone do git https://github.com/seladb/PcapPlusPlus.git
Siga as instruções de construção de acordo com sua plataforma na página Build From Source no site PcapPlusPlus.
As versões PcapPlusPlus mais recentes que a v23.09 são assinadas com atestado GitHub. Todos os atestados podem ser encontrados aqui. Você pode verificar o atestado desses pacotes com GitHub CLI. Para verificar os pacotes, você pode seguir as instruções mais recentes do gh attestation verify. Para obter instruções simples, você pode usar o seguinte comando:
gh atestado verificar <caminho para o arquivo do pacote> --repositório seladb/PcapPlusPlus
e você deverá ver a seguinte saída em seu terminal:
✓ Verificação bem-sucedida!
Captura de pacotes por meio de um wrapper C++ fácil de usar para mecanismos populares de captura de pacotes, como libpcap, WinPcap, Npcap, Intel DPDK, eBPF AF_XDP, PF_RING do ntop e soquetes brutos [Saiba mais]
Análise e elaboração de pacotes, incluindo análise detalhada de protocolos e camadas, geração e edição de pacotes para uma grande variedade de protocolos de rede [Saiba mais]
Ler e gravar pacotes de/para arquivos nos formatos PCAP e PCAPNG [Saiba mais]
Processamento de pacotes em taxa de linha através de um wrapper C++ eficiente e fácil de usar para DPDK, eBPF AF_XDP e PF_RING [Saiba mais]
Suporte multiplataforma - PcapPlusPlus é totalmente compatível com Linux, MacOS, Windows, Android e FreeBSD
Remontagem de pacotes - implementação exclusiva de Remontagem TCP que inclui retransmissão TCP, pacotes TCP fora de ordem e dados TCP ausentes, e Fragmentação e Desfragmentação IP para criar e remontar fragmentos IPv4 e IPv6 [Saiba mais]
Filtragem de pacotes que torna os filtros BPF da libpcap muito mais fáceis de usar [Saiba mais]
TLS Fingerprinting - uma implementação C++ de impressão digital JA3 e JA3S TLS [Saiba mais]
Escrever aplicações com PcapPlusPlus é muito fácil e intuitivo. Aqui está um aplicativo simples que mostra como ler um pacote de um arquivo PCAP e analisá-lo:
#include <iostream>#include "IPv4Layer.h"#include "Packet.h"#include "PcapFileDevice.h"int main(int argc, char* argv[]) {// abra um arquivo pcap para leiturapcpp::PcapFileReaderDevice reader("1_packet.pcap");if (!reader.open()) { std::cerr << "Erro ao abrir o arquivo pcap" << std::endl;return 1; }// lê o primeiro (e único) pacote do filepcpp::RawPacket rawPacket;if (!reader.getNextPacket(rawPacket)) { std::cerr << "Não foi possível ler o primeiro pacote no arquivo" << std::endl;return 1; }// analisa o pacote bruto em um pacote analisadopcpp::Packet parsedPacket(&rawPacket);// verifica se o pacote é IPv4if (parsedPacket.isPacketOfType(pcpp::IPv4)) {// extrair origem e destino IPspcpp::IPv4Address srcIP = parsedPacket.getLayerOfType<pcpp::IPv4Layer>()->getSrcIPv4Address(); pcpp::IPv4Address destIP = parsedPacket.getLayerOfType<pcpp::IPv4Layer>()->getDstIPv4Address();// imprime origem e destino IPsstd::cout << "O IP de origem é '" << srcIP << "'; Dest IP é '" << destIP << "'" << std::endl; }//fecha o arquivoreader.close();return 0; }
Você pode encontrar muito mais informações na página Primeiros passos no site PcapPlusPlus. Esta página orientará você em algumas etapas fáceis para ter um aplicativo instalado e funcionando.
PcapPlusPlus consiste em 3 bibliotecas:
Packet++ - uma biblioteca para analisar, criar e editar pacotes de rede
Pcap++ - uma biblioteca para interceptar e enviar pacotes, fornecendo informações de rede e NIC, estatísticas, etc. Na verdade, é um wrapper C++ para mecanismos de captura de pacotes como libpcap, WinPcap, Npcap, DPDK e PF_RING
Common++ - uma biblioteca com alguns utilitários de código comuns usados tanto pelo Packet++ quanto pelo Pcap++
Você pode encontrar uma extensa documentação da API na seção de documentação da API no site PcapPlusPlus. Se você encontrar algum dado faltante, entre em contato conosco.
PcapPlusPlus é atualmente compatível com Windows
PcapPlusPlus atualmente suporta análise, edição e criação de pacotes dos seguintes protocolos:
EthernetII
Ethernet IEEE 802.3
LLC (somente BPDU compatível)
Nulo/Loopback
Trailer do pacote (também conhecido como rodapé ou preenchimento)
PPPoE
SLL (captura cozida em Linux)
SLL2 (captura cozida em Linux v2)
STP
VLAN
VXLAN
Wake on LAN (WoL)
NFLOG (Linux Netfilter NFLOG) - apenas análise (sem recursos de edição)
ARP
GR
ICMP
ICMPv6
IGMP (IGMPv1, IGMPv2 e IGMPv3 são suportados)
IPv4
IPv6
MPLS
PND
IP bruto (IPv4 e IPv6)
VRRP (IPv4 e IPv6)
WireGuard
COTP
GTP (v1)
IPSec AH e ESP - apenas análise (sem recursos de edição)
TCP
TPKT
UDP
PSD
SIP
SSL/TLS - apenas análise (sem recursos de edição)
Decodificador e codificador ASN.1
BGP (v4)
DHCP
DHCPv6
DNS
FTP
Cabeçalhos HTTP (solicitação e resposta)
LDAP
NTP (v3, v4)
Raio
Comunicação S7 (S7comm)
SMTP
ALGUM/IP
SSH - apenas análise (sem recursos de edição)
Telnet - apenas análise (sem recursos de edição)
Carga genérica
O Data Plane Development Kit (DPDK) é um conjunto de bibliotecas de plano de dados e drivers de controlador de interface de rede para processamento rápido de pacotes.
PF_RING™ é um novo tipo de soquete de rede que melhora drasticamente a velocidade de captura de pacotes.
Ambas as estruturas fornecem processamento de pacotes muito rápido (até a velocidade da linha) e são usadas em muitos aplicativos de rede, como roteadores, firewalls, balanceadores de carga, etc. PcapPlusPLus fornece uma camada de abstração C++ sobre DPDK e PF_RING. Essa camada de abstração fornece uma interface fácil de usar que remove muitos dos clichês envolvidos no uso dessas estruturas. Você pode aprender mais visitando as páginas de suporte DPDK e PF_RING no site PcapPlusPlus.
Usamos o projeto de benchmarks de captura de pacotes de Matias Fontanini para comparar o desempenho do PcapPlusPlus com outras bibliotecas C++ semelhantes (como libtins
e libcrafter
).
Você pode ver os resultados na página Benchmarks no site PcapPlusPlus.
Teremos o maior prazer em receber feedback. Sinta-se à vontade para entrar em contato conosco de uma das seguintes maneiras:
Abra um tíquete GitHub
Poste uma mensagem no grupo PcapPlusPlus do Google: https://groups.google.com/d/forum/pcapplusplus-support
Faça uma pergunta no Stack Overflow: https://stackoverflow.com/questions/tagged/pcapplusplus
Envie um e-mail para: [email protected]
Siga-nos no X: https://x.com/seladb
Se você gosta deste projeto , marque-nos com uma estrela no GitHub - isso ajuda! ⭐ ⭐
Visite o site do PcapPlusPlus para saber mais.
Agradeceríamos muito qualquer contribuição para este projeto. Se você estiver interessado em contribuir, visite a página de contribuição no site do PcapPlusPlus.
PcapPlusPlus é lançado sob a licença Unlicense.