PcapPlusPlus 是一個跨平台的 C++ 函式庫,提供高效、強大且易於使用的功能,來進行網路封包的擷取、解析和生成。
PcapPlusPlus 支援對多種網路協議進行解析和建構,並對常見的封包處理函式庫(如 libpcap、WinPcap、Npcap、DPDK、eBPF AF_XDP 和 PF_RING)提供 C++ 的封裝函式。
您可以從 GitHub 發佈頁面下載,使用套件管理器來下載,或自行建構 PcapPlusPlus。更多詳情請參考 下載 頁面。
https://github.com/seladb/PcapPlusPlus/releases/latest
brew install pcapplusplus
Homebrew 套件頁面: https://formulae.brew.sh/formula/pcapplusplus
Windows:
.\vcpkg install pcapplusplus
MacOS/Linux:
vcpkg install pcapplusplus
Vcpkg 套件頁面: https://github.com/microsoft/vcpkg/tree/master/ports/pcapplusplus
conan install "pcapplusplus/[>0]@" -u
Conan 套件頁面: https://conan.io/center/pcapplusplus
取得 git repo:
git clone https://github.com/seladb/PcapPlusPlus.git
根據您的平台,請遵循 從原始碼建置 頁面中的指示進行建置。
PcapPlusPlus 發佈的版本自 v23.09 以後都已通過 GitHub 驗證簽署。所有的驗證文件都可以在 這裡 找到。您可以使用 GitHub CLI 驗證這些套件的簽署。要驗證套件,您可以參考 gh attestation verify 的最新說明。以下是簡單的操作命令:
gh attestation verify <path-to-package-file> --repository seladb/PcapPlusPlus
執行後,您應該會在終端機中看到以下輸出:
✓ Verification succeeded!
- 封包捕獲:提供簡單易用的 C++ 封裝函式來使用常見的封包捕獲引擎,如 libpcap、WinPcap、Npcap、Intel DPDK、eBPF AF_XDP、ntop 的 PF_RING 以及 raw sockets [了解更多]
- 解析與建構:包含網路協定解析、網路封包建構與編輯,支援各種類型的 網路協定 [了解更多]
- 從檔案讀寫封包:支援 PCAP 和 PCAPNG 格式 [了解更多]
- 封包處理:以線性速度提供高效且易用的 C++ 封裝函式來使用 DPDK、eBPF AF_XDP 和 PF_RING [了解更多]
- 多平台支援:PcapPlusPlus 完全支援 Linux、MacOS、Windows、Android 和 FreeBSD
- 封包重組:包含 TCP 重組 的獨特實現,處理 TCP 重傳、亂序的 TCP 封包及遺失的 TCP 資料,並支援 IP 分片與重組,可生成並重組 IPv4 和 IPv6 的分片 [了解更多]
- 封包過濾:讓 libpcap 的 BPF 過濾器變得更加易用 [了解更多]
- 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;
}
// 從檔案中讀取第一個(也是唯一的)封包
pcpp::RawPacket rawPacket;
if (!reader.getNextPacket(rawPacket))
{
std::cerr << "無法讀取檔案中的第一個封包" << std::endl;
return 1;
}
// 將原始封包解析為已解析的封包
pcpp::Packet parsedPacket(&rawPacket);
// 確認封包是 IPv4 封包
if (parsedPacket.isPacketOfType(pcpp::IPv4))
{
// 提取源 IP 和目的 IP
pcpp::IPv4Address srcIP = parsedPacket.getLayerOfType<pcpp::IPv4Layer>()->getSrcIPv4Address();
pcpp::IPv4Address destIP = parsedPacket.getLayerOfType<pcpp::IPv4Layer>()->getDstIPv4Address();
// 輸出源 IP 和目的 IP
std::cout << "來源 IP: '" << srcIP << "'; 目的 IP: '" << destIP << "'" << std::endl;
}
// 關閉檔案
reader.close();
return 0;
}
您可以在 PcapPlusPlus 網站的 快速入門指南 中找到更多資訊。該頁面會帶您通過幾個簡單的步驟,讓您的應用程式快速運行起來。
PcapPlusPlus 包含三個函式庫:
- Packet++ - 用於解析、創建和編輯網路封包的函式庫
- Pcap++ - 用於攔截和發送封包、提供網路和網卡資訊、統計等功能的函式庫。實際上是對封包擷取引擎(如 libpcap、WinPcap、Npcap、DPDK 和 PF_RING)的 C++ 封裝
- Common++ - 包含 Packet++ 和 Pcap++ 共用的一些通用程式碼工具函式庫
您可以在 PcapPlusPlus 網站的 API 文件區 找到詳細的 API 文件。如果您發現有任何遺漏的資料,請聯繫我們。
PcapPlusPlus 目前支援以下平台:
Windows
PcapPlusPlus 目前支援解析、編輯和建構以下網路協定的封包:
- Ethernet II
- IEEE 802.3 Ethernet
- LLC(僅支援 BPDU)
- Null/Loopback
- Packet trailer(又稱 footer 或 padding)
- PPPoE
- SLL(Linux 擷取協定)
- SLL2(Linux 擷取協定 v2)
- STP
- VLAN
- VXLAN
- Wake on LAN (WoL)
- NFLOG(Linux Netfilter NFLOG)- 僅支援解析(不支援編輯)
- ARP
- GRE
- ICMP
- ICMPv6
- IGMP(支援 IGMPv1、IGMPv2 和 IGMPv3)
- IPv4
- IPv6
- MPLS
- NDP
- Raw IP(IPv4 和 IPv6)
- VRRP(IPv4 和 IPv6)
- WireGuard
- COTP
- GTP (v1 & v2)
- IPSec AH 和 ESP - 僅支援解析(不支援編輯)
- TCP
- TPKT
- UDP
- SDP
- SIP
- SSL/TLS - 僅支援解析(不支援編輯)
- ASN.1 編碼器與解碼器
- BGP (v4)
- DHCP
- DHCPv6
- DNS
- FTP
- HTTP 標頭(請求和響應)
- LDAP
- NTP (v3, v4)
- Radius
- S7 通訊(S7comm)
- SMTP
- SOME/IP
- SSH - 僅支援解析(不支援編輯)
- Telnet - 僅支援解析(不支援編輯)
- 通用酬載(Generic Payload)
DPDK (The Data Plane Development Kit) 是一套用於高速封包處理的資料平面函式庫和網路介面卡驅動。
PF_RING™ 是一種新型網路套接字,能顯著提升封包擷取速度。
這兩個框架提供了非常快速的封包處理(幾乎是線性的),並廣泛應用於路由器、防火牆、負載平衡器等網路應用中。PcapPlusPlus 提供了對 DPDK 和 PF_RING 的 C++ 抽象層,這個抽象層簡化了使用這些框架的繁瑣流程。您可以在 PcapPlusPlus 網站的 DPDK 和 PF_RING 支援頁面了解更多資訊。
我們使用了 Matias Fontanini 的 packet-capture-benchmarks 專案來比較 PcapPlusPlus 與其他類似的 C++ 函式庫(如 libtins
和 libcrafter
)的效能。
您可以在 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 授權條款 發佈的。