PcapPlusPlus 是一个多平台 C++ 库,用于捕获、解析和制作网络数据包。它被设计为高效、强大且易于使用。
PcapPlusPlus 支持多种网络协议的解码和伪造功能。它还为最流行的数据包处理引擎(例如 libpcap、WinPcap、Npcap、DPDK、eBPF AF_XDP 和 PF_RING)提供易于使用的 C++ 包装器。
目录
下载
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/Linux:
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 存储库:
git 克隆 https://github.com/seladb/PcapPlusPlus.git
根据您的平台,按照 PcapPlusPlus 网站的“从源代码构建”页面中的构建说明进行操作。
更新于 v23.09 的 PcapPlusPlus 版本已使用 GitHub 证明进行签名。所有的证明都可以在这里找到。您可以使用 GitHub CLI 验证这些包的证明。要验证软件包,您可以按照 gh attestation verify 的最新说明进行操作。对于简单的说明,您可以使用以下命令:
gh 证明验证 <包文件路径> --repository seladb/PcapPlusPlus
您应该在终端中看到以下输出:
✓ 验证成功!
通过易于使用的 C++ 包装器进行数据包捕获,适用于流行的数据包捕获引擎,例如 libpcap、WinPcap、Npcap、Intel DPDK、eBPF AF_XDP、ntop 的 PF_RING 和原始套接字 [了解更多]
数据包解析和制作,包括对各种网络协议的协议和层的详细分析、数据包生成和数据包编辑 [了解更多]
以PCAP和PCAPNG格式从文件读取数据包或将数据包写入文件[了解更多]
通过适用于 DPDK、eBPF AF_XDP 和 PF_RING 的高效且易于使用的 C++ 包装器以线速进行数据包处理[了解更多]
多平台支持- PcapPlusPlus 完全支持 Linux、MacOS、Windows、Android 和 FreeBSD
数据包重组- TCP 重组的独特实现,包括 TCP 重传、乱序 TCP 数据包和丢失的 TCP 数据,以及用于创建和重组 IPv4 和 IPv6 片段的IP 碎片和碎片整理[了解更多]
数据包过滤使 libpcap 的 BPF 过滤器更加用户友好 [了解更多]
TLS 指纹识别- JA3 和 JA3S TLS 指纹识别的 C++ 实现 [了解更多]
使用 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);// 验证数据包是 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 信息、统计信息等的库。它实际上是用于数据包捕获引擎(如 libpcap、WinPcap、Npcap、DPDK 和 PF_RING)的 C++ 包装器
Common++ - 一个包含 Packet++ 和 Pcap++ 使用的一些通用代码实用程序的库
您可以在 PcapPlusPlus 网站的 API 文档部分找到丰富的 API 文档。如果您发现任何缺失数据,请联系我们。
PcapPlusPlus 目前在Windows上受支持
PcapPlusPlus目前支持以下协议的数据包的解析、编辑和创建:
以太网II
IEEE 802.3 以太网
LLC(仅支持 BPDU)
空/环回
数据包尾部(又称页脚或填充)
PPPoE
SLL(Linux 熟捕获)
SLL2(Linux 熟捕获 v2)
直通车
虚拟局域网
VXLAN
局域网唤醒 (WoL)
NFLOG (Linux Netfilter NFLOG) - 仅解析(无编辑功能)
ARP
GRE
ICMP
ICMPv6
IGMP(支持IGMPv1、IGMPv2和IGMPv3)
IPv4
IPv6
多协议标签交换
新民主党
原始 IP(IPv4 和 IPv6)
VRRP(IPv4 和 IPv6)
线卫
COTP
GTP(v1)
IPSec AH 和 ESP - 仅解析(无编辑功能)
传输控制协议
TPKT
UDP协议
社会发展计划
啜饮
SSL/TLS - 仅解析(无编辑功能)
ASN.1 解码器和编码器
BGP(v4)
动态主机配置协议
DHCPv6
域名系统
文件传输协议
HTTP 标头(请求和响应)
LDAP
NTP(v3、v4)
半径
S7通讯(S7comm)
邮件传输协议
一些/IP
SSH - 仅解析(无编辑功能)
Telnet - 仅解析(无编辑功能)
通用有效负载
数据平面开发套件 (DPDK) 是一组用于快速数据包处理的数据平面库和网络接口控制器驱动程序。
PF_RING™ 是一种新型网络套接字,可显着提高数据包捕获速度。
这两个框架都提供非常快的数据包处理(达到线速),并用于许多网络应用程序,例如路由器、防火墙、负载平衡器等。PcapPlusPLus 在 DPDK 和 PF_RING 上提供 C++ 抽象层。该抽象层提供了一个易于使用的界面,消除了使用这些框架时涉及的大量样板文件。您可以通过访问 PcapPlusPlus 网站中的 DPDK 和 PF_RING 支持页面了解更多信息。
我们使用 Matias Fontanini 的数据包捕获基准项目来比较 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 许可证下发布的。