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.
<div align="center">
[](https://pcapplusplus.github.io)
[](https://github.com/seladb/PcapPlusPlus/actions?query=workflow%3A%22Build+and+test%22)
[](https://github.com/seladb/PcapPlusPlus/actions?query=workflow%3A%22CodeQL%22)
[](https://app.codecov.io/github/seladb/PcapPlusPlus)
[](https://scorecard.dev/viewer/?uri=github.com/seladb/PcapPlusPlus)
[](https://github.com/seladb/PcapPlusPlus/graphs/contributors)
[](https://x.com/intent/follow?screen_name=seladb)
[]()
</div>
[PcapPlusPlus](https://pcapplusplus.github.io/) é 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 possibilita recursos de decodificação e forja 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](https://www.tcpdump.org/), [WinPcap](https://www.winpcap.org/), [Npcap](https://nmap.org/npcap/), [DPDK](https://www.dpdk.org/), [eBPF AF_XDP](https://www.kernel.org/doc/html/next/networking/af_xdp.html), [WinDivert](https://reqrypt.org/windivert.html) e [PF_RING](https://www.ntop.org/products/packet-capture/pf_ring/).
Traduções: Inglês · [正體中文](https://github.com/seladb/pcapplusplus/blob/master/translation/README-zh-tw.md) · [한국어](https://github.com/seladb/pcapplusplus/blob/master/translation/README-kor.md) · [日本語](https://github.com/seladb/pcapplusplus/blob/master/translation/README-ja.md) · [Русский](https://github.com/seladb/pcapplusplus/blob/master/translation/README-rus.md)
## Índice
- [Índice](#índice)
- [Download](#download)
- [Página de Releases do GitHub](#página-de-releases-do-github)
- [Homebrew](#homebrew)
- [Vcpkg](#vcpkg)
- [Conan](#conan)
- [Compile Você Mesmo](#compile-você-mesmo)
- [Verifique seus pacotes](#verifique-seus-pacotes)
- [Visão Geral dos Recursos](#visão-geral-dos-recursos)
- [Primeiros Passos](#primeiros-passos)
- [Documentação da API](#documentação-da-api)
- [Suporte Multiplataforma](#suporte-multiplataforma)
- [Protocolos de Rede Suportados](#protocolos-de-rede-suportados)
- [Camada de Enlace de Dados (L2)](#camada-de-enlace-de-dados-l2)
- [Camada de Rede (L3)](#camada-de-rede-l3)
- [Camada de Transporte (L4)](#camada-de-transporte-l4)
- [Camada de Sessão (L5)](#camada-de-sessão-l5)
- [Camada de Apresentação (L6)](#camada-de-apresentação-l6)
- [Camada de Aplicação (L7)](#camada-de-aplicação-l7)
- [Suporte a DPDK e PF_RING](#suporte-a-dpdk-e-pf_ring)
- [Benchmarks](#benchmarks)
- [Envie seu Feedback](#envie-seu-feedback)
- [Contribuindo](#contribuindo)
- [Licença](#licença)
## Download
Você pode escolher entre baixar da página de releases do GitHub, usar um gerenciador de pacotes ou compilar o PcapPlusPlus você mesmo. Para mais detalhes, visite a página [Download](https://pcapplusplus.github.io/docs/install) no site do PcapPlusPlus.
[](https://tooomm.github.io/github-release-stats/?username=seladb&repository=PcapPlusPlus)
### Página de Releases do GitHub
<https://github.com/seladb/PcapPlusPlus/releases/latest>
### Homebrew
```shell
brew install pcapplusplus
```
Fórmulas do Homebrew: <https://formulae.brew.sh/formula/pcapplusplus>
### Vcpkg
Windows:
```text
.\vcpkg install pcapplusplus
```
MacOS/Linux:
```text
vcpkg install pcapplusplus
```
Port do Vcpkg: <https://github.com/microsoft/vcpkg/tree/master/ports/pcapplusplus>
### Conan
```text
conan install "pcapplusplus/[>0]@" -u
```
O pacote no ConanCenter: <https://conan.io/center/pcapplusplus>
### Compile Você Mesmo
Clone o repositório git:
```shell
git clone https://github.com/seladb/PcapPlusPlus.git
```
Siga as instruções de compilação de acordo com sua plataforma na página [Build From Source](https://pcapplusplus.github.io/docs/install#build-from-source) no site do PcapPlusPlus.
### Verifique seus pacotes
As versões do PcapPlusPlus posteriores à v23.09 são assinadas com atestação do GitHub. Todas as atestações podem ser encontradas [aqui](https://github.com/seladb/PcapPlusPlus/attestations). Você pode verificar a atestação desses pacotes com o GitHub CLI. Para verificar os pacotes, você pode seguir as instruções mais recentes de [gh attestation verify](https://cli.github.com/manual/gh_attestation_verify). Para instruções simples, você pode usar o seguinte comando:
```shell
gh attestation verify <path-to-package-file> --repository seladb/PcapPlusPlus
```
e você deverá ver a seguinte saída no seu terminal:
```shell
✓ Verification succeeded!
```
## Visão Geral dos Recursos
- __Captura de pacotes__ através de um wrapper C++ fácil de usar para mecanismos populares de captura de pacotes, como [libpcap](https://www.tcpdump.org/), [WinPcap](https://www.winpcap.org/), [Npcap](https://nmap.org/npcap/), [Intel DPDK](https://www.dpdk.org/), [eBPF AF_XDP](https://www.kernel.org/doc/html/next/networking/af_xdp.html), [WinDivert](https://reqrypt.org/windivert.html), [PF_RING da ntop](https://www.ntop.org/products/packet-capture/pf_ring/) e [raw sockets](https://en.wikipedia.org/wiki/Network_socket#Raw_socket) [[Saiba mais](https://pcapplusplus.github.io/docs/features#packet-capture)]
- __Análise e criação de pacotes__ incluindo análise detalhada de protocolos e camadas, geração de pacotes e edição de pacotes para uma grande variedade de [protocolos de rede](https://pcapplusplus.github.io/docs/features#supported-network-protocols) [[Saiba mais](https://pcapplusplus.github.io/docs/features#packet-parsing-and-crafting)]
- __Leitura e escrita de pacotes de/para arquivos__ nos formatos __PCAP__ e __PCAPNG__ [[Saiba mais](https://pcapplusplus.github.io/docs/features#read-and-write-packets-fromto-files)]
- __Processamento de pacotes em taxa de linha__ através de um wrapper C++ eficiente e fácil de usar para [DPDK](https://www.dpdk.org/), [eBPF AF_XDP](https://www.kernel.org/doc/html/next/networking/af_xdp.html) e [PF_RING](https://www.ntop.org/products/packet-capture/pf_ring/) [[Saiba mais](https://pcapplusplus.github.io/docs/features#dpdk-support)]
- __Suporte multiplataforma__ - o PcapPlusPlus é totalmente suportado em Linux, MacOS, Windows, Android e FreeBSD
- __Remontagem de pacotes__ - implementação única de __TCP Reassembly__ 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](https://pcapplusplus.github.io/docs/features#packet-reassembly)]
- __Filtragem de pacotes__ que torna os filtros BPF do libpcap muito mais amigáveis ao usuário [[Saiba mais](https://pcapplusplus.github.io/docs/features#packet-filtering)]
- __TLS Fingerprinting__ - uma implementação C++ de fingerprinting TLS [JA3 e JA3S](https://github.com/salesforce/ja3) [[Saiba mais](https://pcapplusplus.github.io/docs/features#tls-fingerprinting)]
## Primeiros Passos
Escrever aplicações com o PcapPlusPlus é muito fácil e intuitivo. Aqui está uma aplicação simples que mostra como ler um pacote de um arquivo PCAP e analisá-lo:
```cpp
#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;
}
```
Você pode encontrar muito mais informações na página [Getting Started](https://pcapplusplus.github.io/docs/quickstart) no site do PcapPlusPlus. Esta página irá guiá-lo por alguns passos fáceis para ter uma aplicação funcionando.
## Documentação da API
O PcapPlusPlus é composto por 3 bibliotecas:
1. __Packet++__ - uma biblioteca para análise, criação e edição de pacotes de rede
2. __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, AF_XDP, WinDivert e PF_RING
3. __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](https://pcapplusplus.github.io/docs/api) no site do PcapPlusPlus.
Se você encontrar algum dado faltante, por favor [entre em contato conosco](#envie-seu-feedback).
## Suporte Multiplataforma
O PcapPlusPlus é atualmente suportado em
__Windows__
<picture>
<img src="https://raw.githubusercontent.com/PcapPlusPlus/pcapplusplus.github.io/master/static/img/os-logos/logo-windows.png" alt="" width="16" height="16"/>
</picture>,
__Linux__
<picture>
<img src="https://raw.githubusercontent.com/PcapPlusPlus/pcapplusplus.github.io/master/static/img/os-logos/logo-linux.png" alt="" width="16" height="16"/>
</picture>,
__MacOS__
<picture><source media="(prefers-color-scheme: dark)" srcset="https://github.com/PcapPlusPlus/pcapplusplus.github.io/raw/master/static/img/os-logos/logo-apple-dark.png"/>
<img src="https://raw.githubusercontent.com/PcapPlusPlus/pcapplusplus.github.io/master/static/img/os-logos/logo-apple.png" alt="" width="16" height="16"/>
</picture>,
__Android__
<picture>
<img src="https://raw.githubusercontent.com/PcapPlusPlus/pcapplusplus.github.io/master/static/img/os-logos/logo-android.png" alt="" width="16" height="16"/>
</picture> e
__FreeBSD__
<picture>
<img src="https://raw.githubusercontent.com/PcapPlusPlus/pcapplusplus.github.io/master/static/img/os-logos/logo-freebsd.png" alt="" width="16" height="16"/>
</picture>.
Por favor, visite o site do PcapPlusPlus para ver todas as [plataformas suportadas](https://pcapplusplus.github.io/docs/platforms) e consulte a seção [Download](#download) para começar a usar o PcapPlusPlus na sua plataforma.
## Protocolos de Rede Suportados
O PcapPlusPlus atualmente suporta análise, edição e criação de pacotes dos seguintes protocolos:
### Camada de Enlace de Dados (L2)
1. Cisco HDLC
2. Ethernet II
3. IEEE 802.3 Ethernet
4. LLC (Apenas BPDU suportado)
5. Null/Loopback
6. Packet trailer (também conhecido como footer ou padding)
7. PPPoE
8. SLL (Linux cooked capture)
9. SLL2 (Linux cooked capture v2)
10. STP
11. VLAN
12. VXLAN
13. Wake on LAN (WoL)
14. NFLOG (Linux Netfilter NFLOG) - apenas análise (sem capacidades de edição)
### Camada de Rede (L3)
15. ARP
16. GRE
17. ICMP
18. ICMPv6
19. IGMP (IGMPv1, IGMPv2 e IGMPv3 são suportados)
20. IPv4
21. IPv6
22. MPLS
23. NDP
24. Raw IP (IPv4 e IPv6)
25. VRRP (IPv4 e IPv6)
26. WireGuard
### Camada de Transporte (L4)
27. COTP
28. GTP (v1 e v2)
29. IPSec AH e ESP - apenas análise (sem capacidades de edição)
30. QUIC v1 - apenas análise (sem capacidades de edição)
31. TCP
32. TPKT
33. UDP
### Camada de Sessão (L5)
34. SDP
35. SIP
### Camada de Apresentação (L6)
36. SSL/TLS - apenas análise (sem capacidades de edição)
### Camada de Aplicação (L7)
37. Decodificador e codificador ASN.1
38. BGP (v4)
38. Decodificadores de chaves criptográficas
40. DHCP
41. DHCPv6
42. DNS
43. DoIP
44. FTP
45. GVCP
46. Cabeçalhos HTTP (requisição e resposta)
47. LDAP
48. Modbus
49. MySQL - apenas análise (sem capacidades de edição)
50. NTP (v3, v4)
51. Decodificador e codificador PEM
52. PostgreSQL Wire Protocol (PGWire) - apenas análise (sem capacidades de edição)
53. Radius
54. S7 Communication (S7comm)
55. SMTP
56. SOME/IP
57. SSH - apenas análise (sem capacidades de edição)
58. Telnet - apenas análise (sem capacidades de edição)
59. Certificados X509 - apenas análise (sem capacidades de edição)
60. Payload genérico
## Suporte a DPDK e PF_RING
[O Data Plane Development Kit (DPDK)](https://www.dpdk.org/) é um conjunto de bibliotecas de plano de dados e drivers de controlador de interface de rede para processamento rápido de pacotes.
[PF_RING™](https://www.ntop.org/products/packet-capture/pf_ring/) é um novo tipo de socket de rede que melhora drasticamente a velocidade de captura de pacotes.
Ambos os frameworks fornecem processamento de pacotes muito rápido (até a velocidade de linha) e são usados em muitas aplicações de rede, como roteadores, firewalls, balanceadores de carga, etc.
O 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 elimina muito do código boilerplate envolvido no uso desses frameworks. Você pode aprender mais visitando as páginas de suporte a [DPDK](https://pcapplusplus.github.io/docs/dpdk) e [PF_RING](https://pcapplusplus.github.io/docs/features#pf_ring-support) no site do PcapPlusPlus.
## Benchmarks
Usamos o projeto [packet-capture-benchmarks](https://github.com/mfontanini/packet-capture-benchmarks) de Matias Fontanini para comparar o desempenho do PcapPlusPlus com outras bibliotecas C++ similares (como `libtins` e `libcrafter`).
Você pode ver os resultados na página [Benchmarks](https://pcapplusplus.github.io/docs/benchmark) no site do PcapPlusPlus.
## Envie seu Feedback
Ficaríamos muito felizes em receber feedback, por favor sinta-se à vontade para entrar em contato conosco de qualquer uma das seguintes formas:
- Abra um ticket no GitHub
- Poste uma mensagem no grupo do Google do PcapPlusPlus: <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, por favor __nos dê uma estrela no GitHub — isso ajuda!__ :star: :star:
Por favor, visite o [site do PcapPlusPlus](https://pcapplusplus.github.io/community) para saber mais.
## Contribuindo
Agradeceríamos muito qualquer contribuição para este projeto. Se você estiver interessado em contribuir, por favor visite a [página de contribuição](https://pcapplusplus.github.io/community#contribute) no site do PcapPlusPlus.
## Licença
O PcapPlusPlus é distribuído sob a [licença Unlicense](https://choosealicense.com/licenses/unlicense/).
[](https://choosealicense.com/licenses/unlicense/)