PcapPlusPlus เป็นไลบรารี C++ หลายแพลตฟอร์มสำหรับการจับ แยกวิเคราะห์ และสร้างแพ็กเก็ตเครือข่าย ได้รับการออกแบบให้มีประสิทธิภาพ ทรงพลัง และใช้งานง่าย
PcapPlusPlus ช่วยให้สามารถถอดรหัสและปลอมแปลงสำหรับโปรโตคอลเครือข่ายที่หลากหลาย นอกจากนี้ยังมีตัวห่อ C++ ที่ใช้งานง่ายสำหรับกลไกการประมวลผลแพ็คเก็ตยอดนิยม เช่น libpcap, WinPcap, Npcap, DPDK, eBPF AF_XDP และ PF_RING
สารบัญ
ดาวน์โหลด
หน้าเผยแพร่ GitHub
โฮมบรูว์
วีซีพีกก
โคนัน
สร้างมันขึ้นมาเอง
ตรวจสอบแพ็คเกจของคุณ
ภาพรวมคุณสมบัติ
เริ่มต้นใช้งาน
เอกสาร API
รองรับหลายแพลตฟอร์ม
โปรโตคอลเครือข่ายที่รองรับ
ดาต้าลิงค์เลเยอร์ (L2)
เลเยอร์เครือข่าย (L3)
ชั้นขนส่ง (L4)
เซสชันเลเยอร์ (L5)
เลเยอร์การนำเสนอ (L6)
ชั้นแอปพลิเคชัน (L7)
รองรับ DPDK และ PF_RING
เกณฑ์มาตรฐาน
ให้ข้อเสนอแนะ
มีส่วนร่วม
ใบอนุญาต
คุณสามารถเลือกระหว่างการดาวน์โหลดจากหน้าเผยแพร่ GitHub ใช้ตัวจัดการแพ็คเกจ หรือสร้าง PcapPlusPlus ด้วยตัวเอง สำหรับรายละเอียดเพิ่มเติม กรุณาเยี่ยมชมหน้าดาวน์โหลดในเว็บไซต์ PcapPlusPlus
https://github.com/seladb/PcapPlusPlus/releases/latest
ชงติดตั้ง pcapplusplus
สูตรโฮมบรูว์: https://formulae.brew.sh/formula/pcapplusplus
หน้าต่าง:
.vcpkg install pcapplusplus
MacOS/ลินุกซ์:
vcpkg install pcapplusplus
พอร์ต Vcpkg: https://github.com/microsoft/vcpkg/tree/master/ports/pcapplusplus
conan install "pcapplusplus/[>0]@" -u
แพ็คเกจใน ConanCenter: https://conan.io/center/pcapplusplus
โคลนที่เก็บ git:
โคลนคอมไพล์ https://github.com/seladb/PcapPlusPlus.git
ปฏิบัติตามคำแนะนำในการสร้างตามแพลตฟอร์มของคุณในหน้า Build From Source ในเว็บไซต์ PcapPlusPlus
PcapPlusPlus รีลีสซึ่งใหม่กว่า v23.09 ได้รับการลงนามด้วยการรับรอง GitHub การรับรองทั้งหมดสามารถพบได้ที่นี่ คุณสามารถตรวจสอบการรับรองแพ็คเกจเหล่านี้ได้ด้วย GitHub CLI หากต้องการตรวจสอบแพ็กเกจ คุณสามารถปฏิบัติตามคำแนะนำล่าสุดจากการตรวจสอบยืนยัน gh สำหรับคำแนะนำง่ายๆ คุณสามารถใช้คำสั่งต่อไปนี้:
การรับรองความถูกต้อง gh ตรวจสอบ <path-to-package-file> --repository seladb/PcapPlusPlus
และคุณควรเห็นผลลัพธ์ต่อไปนี้ในเทอร์มินัลของคุณ:
✓ การยืนยันสำเร็จแล้ว!
การจับแพ็คเก็ต ผ่าน wrapper C++ ที่ใช้งานง่ายสำหรับกลไกการจับแพ็คเก็ตยอดนิยม เช่น libpcap, WinPcap, Npcap, Intel DPDK, eBPF AF_XDP, PF_RING ของ ntop และซ็อกเก็ตดิบ [เรียนรู้เพิ่มเติม]
การแยกวิเคราะห์และการสร้างแพ็กเก็ต รวมถึงการวิเคราะห์โปรโตคอลและเลเยอร์โดยละเอียด การสร้างแพ็กเก็ต และการแก้ไขแพ็กเก็ตสำหรับโปรโตคอลเครือข่ายที่หลากหลาย [เรียนรู้เพิ่มเติม]
อ่านและเขียนแพ็กเก็ตจาก/ไปยังไฟล์ ทั้งในรูปแบบ PCAP และ PCAPNG [เรียนรู้เพิ่มเติม]
การประมวลผลแพ็กเก็ตในอัตราบรรทัด ผ่านตัวห่อ C++ ที่มีประสิทธิภาพและใช้งานง่ายสำหรับ DPDK, eBPF AF_XDP และ PF_RING [เรียนรู้เพิ่มเติม]
รองรับหลายแพลตฟอร์ม - PcapPlusPlus รองรับ Linux, MacOS, Windows, Android และ FreeBSD อย่างสมบูรณ์
การประกอบแพ็คเก็ต ใหม่ - การใช้งานที่ไม่ซ้ำกันของ การประกอบ TCP ซ้ำซึ่งรวมถึงการส่ง TCP ใหม่, แพ็คเก็ต TCP ที่ไม่อยู่ในลำดับและข้อมูล TCP ที่หายไป และการกระจายตัวของ IP และการจัดเรียงข้อมูล เพื่อสร้างและประกอบชิ้นส่วน IPv4 และ IPv6 ใหม่ [เรียนรู้เพิ่มเติม]
การกรองแพ็คเก็ต ที่ทำให้ตัวกรอง BPF ของ libpcap ใช้งานง่ายมากขึ้น [เรียนรู้เพิ่มเติม]
การพิมพ์ลายนิ้วมือ TLS - การใช้งาน C++ ของการพิมพ์ลายนิ้วมือ JA3 และ JA3S TLS [เรียนรู้เพิ่มเติม]
การเขียนแอปพลิเคชันด้วย PcapPlusPlus นั้นง่ายและใช้งานง่ายมาก นี่คือแอปพลิเคชันง่ายๆ ที่แสดงวิธีอ่านแพ็กเก็ตจากไฟล์ PCAP และแยกวิเคราะห์:
#include <iostream>#include "IPv4Layer.h"#include "Packet.h"#include "PcapFileDevice.h"int main(int argc, char* argv[]) {// เปิดไฟล์ pcap เพื่ออ่าน pcpp::PcapFileReaderDevice reader("1_packet.pcap");if (!reader.open()) - std::cerr << "เกิดข้อผิดพลาดในการเปิดไฟล์ pcap" << std::endl;return 1; }// อ่านแพ็กเก็ตแรก (และเท่านั้น) จาก filepcpp::RawPacket rawPacket;if (!reader.getNextPacket(rawPacket)) - std::cerr << "ไม่สามารถอ่านแพ็กเก็ตแรกในไฟล์ได้" << std::endl;return 1; }// แยกแพ็กเก็ตดิบเป็นแพ็กเก็ตที่แยกวิเคราะห์pcpp::Packet parsedPacket(&rawPacket);// ตรวจสอบว่าแพ็กเก็ตเป็น IPv4if (parsedPacket.isPacketOfType(pcpp::IPv4)) // แยกแหล่งที่มาและปลายทาง IPspcpp::IPv4Address srcIP = parsedPacket.getLayerOfType<pcpp::IPv4Layer>()->getSrcIPv4Address(); pcpp::IPv4Address destIP = parsedPacket.getLayerOfType<pcpp::IPv4Layer>()->getDstIPv4Address();// แหล่งการพิมพ์และปลายทาง IPsstd::cout << "Source IP is '" << srcIP << "'; Dest IP คือ '" << destIP << "'" << std::endl; }// ปิด filereader.close();return 0; -
คุณสามารถค้นหาข้อมูลเพิ่มเติมได้ในหน้าเริ่มต้นใช้งานในเว็บไซต์ PcapPlusPlus หน้านี้จะแสดงขั้นตอนง่ายๆ ไม่กี่ขั้นตอนในการติดตั้งและใช้งานแอป
PcapPlusPlus ประกอบด้วย 3 ไลบรารี:
Packet++ - ไลบรารีสำหรับแยกวิเคราะห์ สร้าง และแก้ไขแพ็กเก็ตเครือข่าย
Pcap++ - ไลบรารีสำหรับการสกัดกั้นและส่งแพ็กเก็ต ให้ข้อมูลเครือข่ายและ NIC สถิติ ฯลฯ จริงๆ แล้วมันคือตัวห่อหุ้ม C++ สำหรับกลไกการจับแพ็กเก็ต เช่น libpcap, WinPcap, Npcap, DPDK และ PF_RING
Common++ - ไลบรารีที่มียูทิลิตี้โค้ดทั่วไปที่ใช้ทั้ง Packet++ และ Pcap++
คุณสามารถค้นหาเอกสาร API ที่ครอบคลุมได้ในส่วนเอกสารประกอบ API ในเว็บไซต์ PcapPlusPlus หากคุณเห็นข้อมูลที่ขาดหายไปโปรดติดต่อเรา
ปัจจุบัน PcapPlusPlus รองรับบน Windows
ปัจจุบัน PcapPlusPlus รองรับการแยกวิเคราะห์ การแก้ไข และสร้างแพ็กเก็ตของโปรโตคอลต่อไปนี้:
อีเทอร์เน็ต II
อีเธอร์เน็ต IEEE 802.3
LLC (รองรับ BPDU เท่านั้น)
ค่าว่าง/ลูปแบ็ค
ตัวอย่างแพ็คเก็ต (หรือที่เรียกว่าส่วนท้ายหรือส่วนเสริม)
พีพีโปอี
SLL (การจับภาพ Linux ที่ปรุงสุก)
SLL2 (การจับภาพ Linux ที่ปรุงสุก v2)
สทีพี
วีแลน
วีเอ็กซ์แลน
ปลุกบน LAN (WoL)
NFLOG (Linux Netfilter NFLOG) - แยกวิเคราะห์เท่านั้น (ไม่มีความสามารถในการแก้ไข)
เออาร์พี
GRE
ไอซีเอ็มพี
ไอซีเอ็มพีเวอร์ชัน 6
IGMP (รองรับ IGMPv1, IGMPv2 และ IGMPv3)
IPv4
IPv6
MPLS
นปช
IP ดิบ (IPv4 และ IPv6)
VRRP (IPv4 และ IPv6)
WireGuard
อปท
จีทีพี (v1)
IPSec AH & ESP - แยกวิเคราะห์เท่านั้น (ไม่มีความสามารถในการแก้ไข)
TCP
ทีพีเคที
ยูดีพี
สปป
จิบ
SSL/TLS - แยกวิเคราะห์เท่านั้น (ไม่มีความสามารถในการแก้ไข)
ตัวถอดรหัสและตัวเข้ารหัส ASN.1
บีจีพี (v4)
ดีเอชซีพี
DHCPv6
DNS
เอฟทีพี
ส่วนหัว HTTP (คำขอและการตอบกลับ)
แอลดีเอพี
เอ็นทีพี (v3, v4)
รัศมี
การสื่อสาร S7 (S7comm)
SMTP
บางส่วน/ไอพี
SSH - แยกวิเคราะห์เท่านั้น (ไม่มีความสามารถในการแก้ไข)
Telnet - แยกวิเคราะห์เท่านั้น (ไม่มีความสามารถในการแก้ไข)
เพย์โหลดทั่วไป
Data Plane Development Kit (DPDK) คือชุดของไลบรารี Data Plane และไดรเวอร์ตัวควบคุมอินเทอร์เฟซเครือข่ายสำหรับการประมวลผลแพ็กเก็ตที่รวดเร็ว
PF_RING™ เป็นซ็อกเก็ตเครือข่ายรูปแบบใหม่ที่ปรับปรุงความเร็วการจับแพ็คเก็ตได้อย่างมาก
เฟรมเวิร์กทั้งสองให้การประมวลผลแพ็กเก็ตที่รวดเร็วมาก (สูงสุดความเร็วบรรทัด) และใช้ในแอปพลิเคชันเครือข่ายจำนวนมาก เช่น เราเตอร์ ไฟร์วอลล์ โหลดบาลานเซอร์ ฯลฯ PcapPlusPLus มอบเลเยอร์นามธรรม C++ บน DPDK และ PF_RING เลเยอร์นามธรรมนี้มอบอินเทอร์เฟซที่ใช้งานง่าย ซึ่งจะลบส่วนสำเร็จรูปจำนวนมากที่เกี่ยวข้องกับการใช้เฟรมเวิร์กเหล่านี้ คุณสามารถเรียนรู้เพิ่มเติมได้โดยไปที่หน้าสนับสนุน DPDK & PF_RING ในเว็บไซต์ PcapPlusPlus
เราใช้โปรเจ็กต์ packet-capture-benchmarks ของ Matias Fontanini เพื่อเปรียบเทียบประสิทธิภาพของ PcapPlusPlus กับไลบรารี C++ อื่นๆ ที่คล้ายกัน (เช่น libtins
และ libcrafter
)
คุณสามารถดูผลลัพธ์ได้ในหน้า Benchmarks ในเว็บไซต์ PcapPlusPlus
เรายินดีอย่างยิ่งที่จะได้รับคำติชม โปรดติดต่อเราด้วยวิธีใดวิธีหนึ่งต่อไปนี้:
เปิดตั๋ว GitHub
โพสข้อความในกลุ่ม PcapPlusPlus Google: https://groups.google.com/d/forum/pcapplusplus-support
ถามคำถามเกี่ยวกับ Stack Overflow: https://stackoverflow.com/questions/tagged/pcapplusplus
ส่งอีเมลไปที่: [email protected]
ติดตามเราบน X: https://x.com/seladb
หากคุณชอบโปรเจ็กต์นี้ โปรด ติดดาวเราบน GitHub — มันช่วยได้!
กรุณาเยี่ยมชมเว็บไซต์ PcapPlusPlus เพื่อเรียนรู้เพิ่มเติม
เราขอขอบคุณเป็นอย่างยิ่งสำหรับการมีส่วนร่วมในโครงการนี้ หากคุณสนใจที่จะมีส่วนร่วม กรุณาเยี่ยมชมหน้าการมีส่วนร่วมในเว็บไซต์ PcapPlusPlus
PcapPlusPlus ได้รับการเผยแพร่ภายใต้ใบอนุญาต Unlicense