PcapPlusPlus adalah pustaka C++ multiplatform untuk menangkap, menguraikan, dan membuat paket jaringan. Ini dirancang agar efisien, kuat, dan mudah digunakan.
PcapPlusPlus memungkinkan kemampuan decoding dan forging untuk berbagai macam protokol jaringan. Ini juga menyediakan pembungkus C++ yang mudah digunakan untuk mesin pemrosesan paket paling populer seperti libpcap, WinPcap, Npcap, DPDK, eBPF AF_XDP dan PF_RING.
Daftar isi
Unduh
Halaman Rilis GitHub
minuman rumahan
Vcpkg
Conan
Bangun Sendiri
Verifikasi paket Anda
Ikhtisar Fitur
Memulai
Dokumentasi API
Dukungan Multi Platform
Protokol Jaringan yang Didukung
Lapisan Tautan Data (L2)
Lapisan Jaringan (L3)
Lapisan Transportasi (L4)
Lapisan Sesi (L5)
Lapisan Presentasi (L6)
Lapisan Aplikasi (L7)
Dukungan DPDK Dan PF_RING
Tolok ukur
Berikan Umpan Balik
Berkontribusi
Lisensi
Anda dapat memilih antara mengunduh dari halaman rilis GitHub, menggunakan manajer paket, atau membuat PcapPlusPlus sendiri. Untuk lebih jelasnya silakan kunjungi halaman Download di situs web PcapPlusPlus.
https://github.com/seladb/PcapPlusPlus/releases/latest
buatan instal pcapplusplus
Rumus buatan sendiri: https://formulae.brew.sh/formula/pcapplusplus
jendela:
.vcpkg install pcapplusplus
MacOS/Linux:
vcpkg install pcapplusplus
Pelabuhan Vcpkg: https://github.com/microsoft/vcpkg/tree/master/ports/pcapplusplus
conan install "pcapplusplus/[>0]@" -u
Paket di ConanCenter: https://conan.io/center/pcapplusplus
Kloning repositori git:
git klon https://github.com/seladb/PcapPlusPlus.git
Ikuti instruksi pembuatan sesuai platform Anda di halaman Build From Source di situs web PcapPlusPlus.
Rilis PcapPlusPlus yang lebih baru dari v23.09 ditandatangani dengan pengesahan GitHub. Semua pengesahan dapat ditemukan di sini. Anda dapat memverifikasi pengesahan paket-paket ini dengan GitHub CLI. Untuk memverifikasi paket, Anda dapat mengikuti instruksi terbaru dari verifikasi pengesahan gh. Untuk instruksi sederhana Anda dapat menggunakan perintah berikut:
verifikasi pengesahan gh <path-to-package-file> --repository seladb/PcapPlusPlus
dan Anda akan melihat output berikut di terminal Anda:
✓ Verifikasi berhasil!
Pengambilan paket melalui pembungkus C++ yang mudah digunakan untuk mesin penangkap paket populer seperti libpcap, WinPcap, Npcap, Intel DPDK, eBPF AF_XDP, PF_RING ntop, dan soket mentah [Pelajari lebih lanjut]
Penguraian dan pembuatan paket termasuk analisis rinci tentang protokol dan lapisan, pembuatan paket, dan pengeditan paket untuk berbagai macam protokol jaringan [Pelajari lebih lanjut]
Membaca dan menulis paket dari/ke file dalam format PCAP dan PCAPNG [Pelajari lebih lanjut]
Pemrosesan paket dalam kecepatan baris melalui wrapper C++ yang efisien dan mudah digunakan untuk DPDK, eBPF AF_XDP, dan PF_RING [Pelajari lebih lanjut]
Dukungan multiplatform - PcapPlusPlus didukung penuh di Linux, MacOS, Windows, Android dan FreeBSD
Perakitan ulang paket - implementasi unik dari Perakitan Ulang TCP yang mencakup transmisi ulang TCP, paket TCP yang rusak dan data TCP yang hilang, serta Fragmentasi dan Defragmentasi IP untuk membuat dan merakit kembali fragmen IPv4 dan IPv6 [Pelajari lebih lanjut]
Pemfilteran paket yang membuat filter BPF libpcap lebih ramah pengguna [Pelajari lebih lanjut]
TLS Fingerprinting - implementasi C++ dari sidik jari TLS JA3 dan JA3S [Pelajari lebih lanjut]
Menulis aplikasi dengan PcapPlusPlus sangat mudah dan intuitif. Berikut adalah aplikasi sederhana yang menunjukkan cara membaca paket dari file PCAP dan menguraikannya:
#include <iostream>#include "IPv4Layer.h"#include "Packet.h"#include "PcapFileDevice.h"int main(int argc, char* argv[]) {// buka file pcap untuk dibacapcpp::PcapFileReaderDevice reader("1_packet.pcap");if (!reader.open()) { std::cerr << "Kesalahan membuka file pcap" << std::endl;return 1; }// membaca paket pertama (dan satu-satunya) dari filepcpp::RawPacket rawPacket;if (!reader.getNextPacket(rawPacket)) { std::cerr << "Tidak dapat membaca paket pertama dalam file" << std::endl;return 1; }// parsing paket mentah menjadi paket yang telah diuraipcpp::Paket parsedPacket(&rawPacket);// verifikasi bahwa paket tersebut adalah IPv4if (parsedPacket.isPacketOfType(pcpp::IPv4)) {// ekstrak sumber dan tujuan IPspcpp::IPv4Address srcIP = parsedPacket.getLayerOfType<pcpp::IPv4Layer>()->getSrcIPv4Address(); pcpp::IPv4Address destIP = parsedPacket.getLayerOfType<pcpp::IPv4Layer>()->getDstIPv4Address();// sumber cetak dan dest IPsstd::cout << "IP Sumber adalah '" << srcIP << "'; Dest IP adalah '" << tujuanIP << "'" << std::endl; }// tutup filereader.close();return 0; }
Anda dapat menemukan informasi lebih lanjut di halaman Memulai di situs web PcapPlusPlus. Halaman ini akan memandu Anda melalui beberapa langkah mudah untuk mengaktifkan dan menjalankan aplikasi.
PcapPlusPlus terdiri dari 3 perpustakaan:
Packet++ - perpustakaan untuk parsing, membuat dan mengedit paket jaringan
Pcap++ - perpustakaan untuk mencegat dan mengirim paket, menyediakan informasi jaringan dan NIC, statistik, dll. Ini sebenarnya adalah pembungkus C++ untuk mesin penangkap paket seperti libpcap, WinPcap, Npcap, DPDK dan PF_RING
Common++ - perpustakaan dengan beberapa utilitas kode umum yang digunakan oleh Packet++ dan Pcap++
Anda dapat menemukan dokumentasi API ekstensif di bagian dokumentasi API di situs web PcapPlusPlus. Jika Anda melihat data yang hilang, silakan hubungi kami.
PcapPlusPlus saat ini didukung di Windows
PcapPlusPlus saat ini mendukung penguraian, pengeditan, dan pembuatan paket protokol berikut:
Ethernet II
IEEE 802.3 Ethernet
LLC (Hanya BPDU yang didukung)
Null/Loopback
Trailer paket (alias footer atau padding)
PPPoE
SLL (Tangkapan matang Linux)
SLL2 (pengambilan masak Linux v2)
STP
VLAN
VXLAN
Bangun di LAN (WoL)
NFLOG (Linux Netfilter NFLOG) - hanya parsing (tidak ada kemampuan pengeditan)
ARP
GRE
ICMP
ICMPv6
IGMP (IGMPv1, IGMPv2 dan IGMPv3 didukung)
IPv4
IPv6
MPLS
NDP
IP mentah (IPv4 & IPv6)
VRRP (IPv4 & IPv6)
Penjaga Kawat
COTP
GTP (v1)
IPSec AH & ESP - hanya parsing (tidak ada kemampuan pengeditan)
TCP
TPKT
UDP
SDP
MENYESAP
SSL/TLS - hanya parsing (tidak ada kemampuan pengeditan)
Dekoder dan encoder ASN.1
BGP (v4)
DHCP
DHCPv6
DNS
FTP
Header HTTP (permintaan & respons)
LDAP
NTP (v3, v4)
Radius
Komunikasi S7 (S7comm)
SMTP
BEBERAPA/IP
SSH - hanya parsing (tidak ada kemampuan pengeditan)
Telnet - hanya parsing (tidak ada kemampuan pengeditan)
Muatan umum
Data Plane Development Kit (DPDK) adalah sekumpulan pustaka data plane dan driver pengontrol antarmuka jaringan untuk pemrosesan paket yang cepat.
PF_RING™ adalah soket jaringan jenis baru yang secara dramatis meningkatkan kecepatan penangkapan paket.
Kedua kerangka kerja ini menyediakan pemrosesan paket yang sangat cepat (hingga kecepatan saluran) dan digunakan di banyak aplikasi jaringan seperti router, firewall, penyeimbang beban, dll. PcapPlusPLus menyediakan lapisan abstraksi C++ melalui DPDK & PF_RING. Lapisan abstraksi ini menyediakan antarmuka yang mudah digunakan yang menghilangkan banyak boilerplate yang terlibat dalam penggunaan kerangka kerja ini. Anda dapat mempelajari lebih lanjut dengan mengunjungi halaman dukungan DPDK & PF_RING di situs web PcapPlusPlus.
Kami menggunakan proyek benchmark pengambilan paket Matias Fontanini untuk membandingkan kinerja PcapPlusPlus dengan pustaka C++ serupa lainnya (seperti libtins
dan libcrafter
).
Anda dapat melihat hasilnya pada halaman Benchmarks di website PcapPlusPlus.
Kami akan dengan senang hati menerima masukan, jangan ragu untuk menghubungi kami melalui salah satu cara berikut:
Buka tiket GitHub
Posting pesan di grup Google PcapPlusPlus: https://groups.google.com/d/forum/pcapplusplus-support
Ajukan pertanyaan tentang Stack Overflow: https://stackoverflow.com/questions/tagged/pcapplusplus
Kirim email ke: [email protected]
Ikuti kami di X: https://x.com/seladb
Jika Anda menyukai proyek ini, silakan Bintangi kami di GitHub — ini membantu! ⭐ ⭐
Silakan kunjungi situs web PcapPlusPlus untuk mempelajari lebih lanjut.
Kami akan sangat menghargai kontribusi apa pun terhadap proyek ini. Jika Anda tertarik untuk berkontribusi silakan kunjungi halaman kontribusi di situs PcapPlusPlus.
PcapPlusPlus dirilis di bawah lisensi Unlicense.