PcapPlusPlus 是一个多平台 C++ 库,用于捕获、解析和制作网络数据包。它旨在高效、强大且易于使用。
PcapPlusPlus 能够解码和伪造各种网络协议。它还为最流行的数据包处理引擎提供易于使用的 C++ 封装,如 libpcap、WinPcap、Npcap、DPDK、eBPF AF_XDP 和 PF_RING。
目录
下载
您可以选择从 GitHub 发布页面下载,使用包管理器或自行构建 PcapPlusPlus。更多详情请访问 PcapPlusPlus 网站的下载页面。
GitHub 发布页面
https://github.com/seladb/PcapPlusPlus/releases/latest
Homebrew
brew install pcapplusplus
Homebrew 公式:https://formulae.brew.sh/formula/pcapplusplus
Vcpkg
Windows:
.\vcpkg install pcapplusplus
MacOS/Linux:
vcpkg install pcapplusplus
Vcpkg 端口:https://github.com/microsoft/vcpkg/tree/master/ports/pcapplusplus
Conan
conan install "pcapplusplus/[>0]@" -u
ConanCenter 中的包:https://conan.io/center/pcapplusplus
自行构建
克隆 git 仓库:
git clone https://github.com/seladb/PcapPlusPlus.git
按照 PcapPlusPlus 网站上从源码构建页面中适合您平台的构建说明进行操作。
功能概览
- 通过易于使用的C++封装器实现__数据包捕获__,支持多种流行的数据包捕获引擎,如libpcap、WinPcap、Npcap、Intel DPDK、eBPF AF_XDP、ntop的PF_RING和原始套接字 [了解更多]
- 数据包解析和构建,包括对协议和层的详细分析、数据包生成和编辑,支持多种网络协议 [了解更多]
- 以__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指纹识别 - 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);
// 验证数据包是否为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网站的入门页面找到更多信息。该页面将引导你完成几个简单的步骤,让应用程序运行起来。
API文档
PcapPlusPlus由3个库组成:
- Packet++ - 用于解析、创建和编辑网络数据包的库
- Pcap++ - 用于拦截和发送数据包、提供网络和网卡信息、统计等功能的库。它实际上是多种数据包捕获引擎(如libpcap、WinPcap、Npcap、DPDK和PF_RING)的C++封装器
- Common++ - 包含一些Packet++和Pcap++共用的通用代码工具的库
你可以在PcapPlusPlus网站的API文档部分找到详细的API文档。 如果发现任何缺失的数据,请联系我们。
多平台支持
PcapPlusPlus 目前支持以下平台: Windows 、 Linux 、 MacOS 、 Android 和 FreeBSD 。 请访问 PcapPlusPlus 网站查看所有支持的平台,并参考下载部分开始在您的平台上使用 PcapPlusPlus。
支持的网络协议
PcapPlusPlus 目前支持解析、编辑和创建以下协议的数据包:
数据链路层 (L2)
- 以太网 II
- IEEE 802.3 以太网
- LLC(仅支持 BPDU)
- Null/Loopback
- 数据包尾部(又称页脚或填充)
- PPPoE
- SLL(Linux cooked capture)
- SLL2(Linux cooked capture v2)
- STP
- VLAN
- VXLAN
- Wake on LAN (WoL)
- NFLOG(Linux Netfilter NFLOG)- 仅支持解析(无编辑功能)
网络层 (L3)
- ARP
- GRE
- ICMP
- ICMPv6
- IGMP(支持 IGMPv1、IGMPv2 和 IGMPv3)
- IPv4
- IPv6
- MPLS
- NDP
- Raw IP(IPv4 和 IPv6)
- VRRP(IPv4 和 IPv6)
传输层 (L4)
- COTP
- GTP(v1)
- IPSec AH 和 ESP - 仅支持解析(无编辑功能)
- TCP
- TPKT
- UDP
会话层 (L5)
- SDP
- SIP
表示层 (L6)
- SSL/TLS - 仅支持解析(无编辑功能)
应用层 (L7)
- ASN.1 解码器和编码器
- BGP(v4)
- DHCP
- DHCPv6
- DNS
- FTP
- HTTP 头(请求和响应)
- LDAP
- NTP(v3、v4)
- Radius
- S7 通信(S7comm)
- SMTP
- SOME/IP
- SSH - 仅支持解析(无编辑功能)
- Telnet - 仅支持解析(无编辑功能)
- 通用负载
DPDK 和 PF_RING 支持
数据平面开发套件 (DPDK) 是一组用于快速数据包处理的数据平面库和网络接口控制器驱动程序。
PF_RING™ 是一种新型网络套接字,可显著提高数据包捕获速度。
这两个框架都提供非常快速的数据包处理(最高可达线速),并被用于许多网络应用,如路由器、防火墙、负载均衡器等。 PcapPlusPlus 为 DPDK 和 PF_RING 提供了 C++ 抽象层。这个抽象层提供了一个易于使用的接口,消除了使用这些框架时涉及的许多样板代码。您可以通过访问 PcapPlusPlus 网站上的 DPDK 和 PF_RING 支持页面了解更多信息。
基准测试
我们使用 Matias Fontanini 的 packet-capture-benchmarks 项目来比较 PcapPlusPlus 与其他类似 C++ 库(如 libtins
和 libcrafter
)的性能。
您可以在 PcapPlusPlus 网站的基准测试页面查看结果。
提供反馈
我们非常乐意收到反馈,请随时通过以下任何方式与我们联系:
- 在 GitHub 上提交 issue
- 在 PcapPlusPlus Google 群组中发帖:https://groups.google.com/d/forum/pcapplusplus-support
- 在 Stack Overflow 上提问:https://stackoverflow.com/questions/tagged/pcapplusplus
- 发送电子邮件至:pcapplusplus@gmail.com
- 在 X 上关注我们:https://x.com/seladb
如果您喜欢这个项目,请在 GitHub 上给我们加星 — 这对我们很有帮助!:star: :star:
请访问 PcapPlusPlus 网站了解更多信息。
贡献
我们非常感谢对这个项目的任何贡献。如果您有兴趣贡献,请访问 PcapPlusPlus 网站上的贡献页面。
许可证
PcapPlusPlus 根据 Unlicense 许可证发布。