Libreria C++ multipiattaforma per cattura, parsing, creazione e analisi di pacchetti di rete ad alte prestazioni. Supporta libpcap, DPDK, AF_XDP, PF_RING e include riassemblaggio TCP, fingerprinting TLS e decodifica di protocolli.
<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/) è una libreria C++ multipiattaforma per la cattura, l'analisi e la creazione di pacchetti di rete. È progettata per essere efficiente, potente e facile da usare.
PcapPlusPlus offre capacità di decodifica e forgiatura per una grande varietà di protocolli di rete. Fornisce inoltre wrapper C++ facili da usare per i più popolari motori di elaborazione dei pacchetti come [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/).
Traduzioni: Inglese · [正體中文](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)
## Indice
- [Indice](#indice)
- [Download](#download)
- [Pagina delle Release su GitHub](#pagina-delle-release-su-github)
- [Homebrew](#homebrew)
- [Vcpkg](#vcpkg)
- [Conan](#conan)
- [Compilarlo da soli](#compilarlo-da-soli)
- [Verificare i pacchetti](#verificare-i-pacchetti)
- [Panoramica delle funzionalità](#panoramica-delle-funzionalità)
- [Per iniziare](#per-iniziare)
- [Documentazione API](#documentazione-api)
- [Supporto multipiattaforma](#supporto-multipiattaforma)
- [Protocolli di rete supportati](#protocolli-di-rete-supportati)
- [Livello di collegamento dati (L2)](#livello-di-collegamento-dati-l2)
- [Livello di rete (L3)](#livello-di-rete-l3)
- [Livello di trasporto (L4)](#livello-di-trasporto-l4)
- [Livello di sessione (L5)](#livello-di-sessione-l5)
- [Livello di presentazione (L6)](#livello-di-presentazione-l6)
- [Livello applicativo (L7)](#livello-applicativo-l7)
- [Supporto DPDK e PF_RING](#supporto-dpdk-e-pf_ring)
- [Benchmark](#benchmark)
- [Inviare feedback](#inviare-feedback)
- [Contribuire](#contribuire)
- [Licenza](#licenza)
## Download
Puoi scegliere tra scaricare dalla pagina delle release su GitHub, usare un gestore di pacchetti oppure compilare PcapPlusPlus da solo. Per maggiori dettagli visita la pagina [Download](https://pcapplusplus.github.io/docs/install) nel sito web di PcapPlusPlus.
[](https://tooomm.github.io/github-release-stats/?username=seladb&repository=PcapPlusPlus)
### Pagina delle Release su GitHub
<https://github.com/seladb/PcapPlusPlus/releases/latest>
### Homebrew
```shell
brew install pcapplusplus
```
Formule Homebrew: <https://formulae.brew.sh/formula/pcapplusplus>
### Vcpkg
Windows:
```text
.\vcpkg install pcapplusplus
```
MacOS/Linux:
```text
vcpkg install pcapplusplus
```
Port Vcpkg: <https://github.com/microsoft/vcpkg/tree/master/ports/pcapplusplus>
### Conan
```text
conan install "pcapplusplus/[>0]@" -u
```
Il pacchetto in ConanCenter: <https://conan.io/center/pcapplusplus>
### Compilarlo da soli
Clona il repository git:
```shell
git clone https://github.com/seladb/PcapPlusPlus.git
```
Segui le istruzioni di compilazione in base alla tua piattaforma nella pagina [Build From Source](https://pcapplusplus.github.io/docs/install#build-from-source) nel sito web di PcapPlusPlus.
### Verificare i pacchetti
Le release di PcapPlusPlus successive alla v23.09 sono firmate con l'attestazione di GitHub. Tutte le attestazioni sono disponibili [qui](https://github.com/seladb/PcapPlusPlus/attestations). Puoi verificare l'attestazione di questi pacchetti con la GitHub CLI. Per verificare i pacchetti puoi seguire le istruzioni più recenti di [gh attestation verify](https://cli.github.com/manual/gh_attestation_verify). Per istruzioni semplici puoi usare il seguente comando:
```shell
gh attestation verify <path-to-package-file> --repository seladb/PcapPlusPlus
```
e dovresti vedere il seguente output nel tuo terminale:
```shell
✓ Verification succeeded!
```
## Panoramica delle funzionalità
- __Cattura dei pacchetti__ tramite un wrapper C++ facile da usare per i più popolari motori di cattura dei pacchetti come [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), [ntop’s PF_RING](https://www.ntop.org/products/packet-capture/pf_ring/) e [raw sockets](https://en.wikipedia.org/wiki/Network_socket#Raw_socket) [[Scopri di più](https://pcapplusplus.github.io/docs/features#packet-capture)]
- __Analisi e creazione dei pacchetti__ inclusa l'analisi dettagliata di protocolli e livelli, la generazione e la modifica dei pacchetti per una grande varietà di [protocolli di rete](https://pcapplusplus.github.io/docs/features#supported-network-protocols) [[Scopri di più](https://pcapplusplus.github.io/docs/features#packet-parsing-and-crafting)]
- __Lettura e scrittura di pacchetti da/verso file__ nei formati __PCAP__ e __PCAPNG__ [[Scopri di più](https://pcapplusplus.github.io/docs/features#read-and-write-packets-fromto-files)]
- __Elaborazione dei pacchetti a velocità di linea__ tramite un wrapper C++ efficiente e facile da usare per [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/) [[Scopri di più](https://pcapplusplus.github.io/docs/features#dpdk-support)]
- __Supporto multipiattaforma__ - PcapPlusPlus è completamente supportato su Linux, MacOS, Windows, Android e FreeBSD
- __Riassemblaggio dei pacchetti__ - implementazione unica del __TCP Reassembly__ che include la ritrasmissione TCP, i pacchetti TCP fuori ordine e i dati TCP mancanti, e la __Frammentazione e Deframmentazione IP__ per creare e riassemblare frammenti IPv4 e IPv6 [[Scopri di più](https://pcapplusplus.github.io/docs/features#packet-reassembly)]
- __Filtraggio dei pacchetti__ che rende i filtri BPF di libpcap molto più intuitivi [[Scopri di più](https://pcapplusplus.github.io/docs/features#packet-filtering)]
- __TLS Fingerprinting__ - un'implementazione C++ del fingerprinting TLS [JA3 e JA3S](https://github.com/salesforce/ja3) [[Scopri di più](https://pcapplusplus.github.io/docs/features#tls-fingerprinting)]
## Per iniziare
Scrivere applicazioni con PcapPlusPlus è molto semplice e intuitivo. Ecco una semplice applicazione che mostra come leggere un pacchetto da un file PCAP e analizzarlo:
```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;
}
```
Puoi trovare molte più informazioni nella pagina [Getting Started](https://pcapplusplus.github.io/docs/quickstart) nel sito web di PcapPlusPlus. Questa pagina ti guiderà attraverso alcuni semplici passaggi per avere un'app funzionante.
## Documentazione API
PcapPlusPlus è composto da 3 librerie:
1. __Packet++__ - una libreria per l'analisi, la creazione e la modifica di pacchetti di rete
2. __Pcap++__ - una libreria per intercettare e inviare pacchetti, fornendo informazioni sulla rete e sulla NIC, statistiche, ecc. È in realtà un wrapper C++ per motori di cattura dei pacchetti come libpcap, WinPcap, Npcap, DPDK, AF_XDP, WinDivert e PF_RING
3. __Common++__ - una libreria con alcune utilità di codice comuni usate sia da Packet++ che da Pcap++
Puoi trovare un'ampia documentazione API nella [sezione documentazione API](https://pcapplusplus.github.io/docs/api) nel sito web di PcapPlusPlus.
Se noti dati mancanti, ti preghiamo di [contattarci](#inviare-feedback).
## Supporto multipiattaforma
PcapPlusPlus è attualmente supportato su
__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>.
Visita il sito web di PcapPlusPlus per vedere tutte le [piattaforme supportate](https://pcapplusplus.github.io/docs/platforms) e fai riferimento alla sezione [Download](#download) per iniziare a usare PcapPlusPlus sulla tua piattaforma.
## Protocolli di rete supportati
PcapPlusPlus attualmente supporta l'analisi, la modifica e la creazione di pacchetti dei seguenti protocolli:
### Livello di collegamento dati (L2)
1. Cisco HDLC
2. Ethernet II
3. IEEE 802.3 Ethernet
4. LLC (solo BPDU supportato)
5. Null/Loopback
6. Packet trailer (noto anche come footer o 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) - solo analisi (nessuna capacità di modifica)
### Livello di rete (L3)
15. ARP
16. GRE
17. ICMP
18. ICMPv6
19. IGMP (IGMPv1, IGMPv2 e IGMPv3 sono supportati)
20. IPv4
21. IPv6
22. MPLS
23. NDP
24. Raw IP (IPv4 e IPv6)
25. VRRP (IPv4 e IPv6)
26. WireGuard
### Livello di trasporto (L4)
27. COTP
28. GTP (v1 e v2)
29. IPSec AH e ESP - solo analisi (nessuna capacità di modifica)
30. QUIC v1 - solo analisi (nessuna capacità di modifica)
31. TCP
32. TPKT
33. UDP
### Livello di sessione (L5)
34. SDP
35. SIP
### Livello di presentazione (L6)
36. SSL/TLS - solo analisi (nessuna capacità di modifica)
### Livello applicativo (L7)
37. Decoder e encoder ASN.1
38. BGP (v4)
38. Decoder di chiavi crittografiche
40. DHCP
41. DHCPv6
42. DNS
43. DoIP
44. FTP
45. GVCP
46. Header HTTP (richiesta e risposta)
47. LDAP
48. Modbus
49. MySQL - solo analisi (nessuna capacità di modifica)
50. NTP (v3, v4)
51. Decoder e encoder PEM
52. PostgreSQL Wire Protocol (PGWire) - solo analisi (nessuna capacità di modifica)
53. Radius
54. S7 Communication (S7comm)
55. SMTP
56. SOME/IP
57. SSH - solo analisi (nessuna capacità di modifica)
58. Telnet - solo analisi (nessuna capacità di modifica)
59. Certificati X509 - solo analisi (nessuna capacità di modifica)
60. Payload generico
## Supporto DPDK e PF_RING
[Il Data Plane Development Kit (DPDK)](https://www.dpdk.org/) è un insieme di librerie del data plane e driver per controller di interfaccia di rete per l'elaborazione veloce dei pacchetti.
[PF_RING™](https://www.ntop.org/products/packet-capture/pf_ring/) è un nuovo tipo di socket di rete che migliora drasticamente la velocità di cattura dei pacchetti.
Entrambi i framework forniscono un'elaborazione dei pacchetti molto veloce (fino alla velocità di linea) e sono usati in molte applicazioni di rete come router, firewall, load balancer, ecc.
PcapPlusPlus fornisce un livello di astrazione C++ sopra DPDK e PF_RING. Questo livello di astrazione fornisce un'interfaccia facile da usare che elimina gran parte del codice ripetitivo coinvolto nell'uso di questi framework. Puoi saperne di più visitando le pagine di supporto [DPDK](https://pcapplusplus.github.io/docs/dpdk) e [PF_RING](https://pcapplusplus.github.io/docs/features#pf_ring-support) nel sito web di PcapPlusPlus.
## Benchmark
Abbiamo usato il progetto [packet-capture-benchmarks](https://github.com/mfontanini/packet-capture-benchmarks) di Matias Fontanini per confrontare le prestazioni di PcapPlusPlus con altre librerie C++ simili (come `libtins` e `libcrafter`).
Puoi vedere i risultati nella pagina [Benchmarks](https://pcapplusplus.github.io/docs/benchmark) nel sito web di PcapPlusPlus.
## Inviare feedback
Saremmo più che felici di ricevere feedback, non esitare a contattarci in uno dei seguenti modi:
- Apri un ticket su GitHub
- Pubblica un messaggio nel gruppo Google di PcapPlusPlus: <https://groups.google.com/d/forum/pcapplusplus-support>
- Fai una domanda su Stack Overflow: <https://stackoverflow.com/questions/tagged/pcapplusplus>
- Invia un'email a: <[email protected]>
- Seguici su X: <https://x.com/seladb>
Se ti piace questo progetto, __metti una stella su GitHub — aiuta!__ :star: :star:
Visita il [sito web di PcapPlusPlus](https://pcapplusplus.github.io/community) per saperne di più.
## Contribuire
Apprezzeremmo molto qualsiasi contributo a questo progetto. Se sei interessato a contribuire, visita la [pagina dei contributi](https://pcapplusplus.github.io/community#contribute) nel sito web di PcapPlusPlus.
## Licenza
PcapPlusPlus è rilasciato sotto la [licenza Unlicense](https://choosealicense.com/licenses/unlicense/).
[](https://choosealicense.com/licenses/unlicense/)