Description
PcapPlusPlus is a multiplatform C++ library for capturing, parsing and crafting of network packets. It is designed to be efficient, powerful and easy to use. It provides C++ wrappers for the most popular packet processing engines such as libpcap, WinPcap, DPDK and PF_RING.
PcapPlusPlus alternatives and similar libraries
Based on the "Networking" category.
Alternatively, view PcapPlusPlus alternatives based on common mentions on social networks and blogs.
-
libcurl
A command line tool and library for transferring data with URL syntax, supporting DICT, FILE, FTP, FTPS, GOPHER, GOPHERS, HTTP, HTTPS, IMAP, IMAPS, LDAP, LDAPS, MQTT, POP3, POP3S, RTMP, RTMPS, RTSP, SCP, SFTP, SMB, SMBS, SMTP, SMTPS, TELNET, TFTP, WS and WSS. libcurl offers a myriad of powerful features -
Muduo
Event-driven network library for multi-threaded Linux server in C++11 -
uWebSockets
Simple, secure & standards compliant web server for the most demanding of applications -
C++ Workflow
C++ Parallel Computing and Asynchronous Networking Engine -
cpp-httplib
A C++ header-only HTTP/HTTPS server and client library -
POCO
The POCO C++ Libraries are powerful cross-platform C++ libraries for building network- and internet-based applications that run on desktop, server, mobile, IoT, and embedded systems. -
Proxygen
A collection of C++ HTTP libraries including an easy to use HTTP server. -
C++ REST SDK
The C++ REST SDK is a Microsoft project for cloud-based client-server communication in native code using a modern asynchronous C++ API design. This project aims to help C++ developers connect to and interact with services. -
libwebsockets
canonical libwebsockets.org networking library -
cpr
C++ Requests: Curl for People, a spiritual port of Python Requests. -
RakNet
RakNet is a cross platform, open source, C++ networking engine for game programmers. -
evpp
A modern C++ network library for developing high performance network services in TCP/UDP/HTTP protocols. -
boost.beast(new repo)
HTTP and WebSocket built on Boost.Asio in C++11 -
Simple-Web-Server
A very simple, fast, multithreaded, platform independent HTTP and HTTPS server and client library implemented using C++11 and Boost.Asio. Created to be an easy way to make REST resources available from C++ applications. -
wdt
Warp speed Data Transfer (WDT) is an embeddedable library (and command line tool) aiming to transfer data between 2 systems as fast as possible over multiple TCP paths. -
cpp-netlib
The C++ Network Library Project -- cross-platform, standards compliant networking library. -
netcode.io
A protocol for secure client/server connections over UDP -
Restbed
Corvusoft's Restbed framework brings asynchronous RESTful functionality to C++14 applications. -
Onion
C library to create simple HTTP servers and Web Applications. -
Silicon
A high performance, middleware oriented C++14 http web framework please use matt-42/lithium instead -
dotenv-linter
⚡️Lightning-fast linter for .env files. Written in Rust 🦀 -
Simple-WebSocket-Server
A very simple, fast, multithreaded, platform independent WebSocket (WS) and WebSocket Secure (WSS) server and client library implemented using C++11, Boost.Asio and OpenSSL. Created to be an easy way to make WebSocket endpoints in C++. -
RESTinio
Cross-platform, efficient, customizable, and robust asynchronous HTTP/WebSocket server C++14 library with the right balance between performance and ease of use -
libhttpserver
C++ library for creating an embedded Rest HTTP server (and more) -
nope.c
WAFer is a C language-based software platform for scalable server-side and networking applications. Think node.js for C programmers. -
net_skeleton
Async non-blocking multi-protocol networking library for C/C++ -
Seasocks
Simple, small, C++ embeddable webserver with WebSockets support -
D++
C++ Discord API Bot Library - D++ is Lightweight and scalable for small and huge bots! -
verdigris
Qt without moc: set of macros to use Qt without needing moc -
IXWebSocket
websocket and http client and server library, with TLS support and very few dependencies -
tntnet
Tntnet is a web application server for web applications written in C++. -
QuantumGate
QuantumGate is a peer-to-peer (P2P) communications protocol, library and API written in C++. -
nanoMODBUS
A compact MODBUS RTU/TCP C library for embedded/microcontrollers -
Barracuda App Server
Embedded Web Server Library with Integrated Scripting Engine -
NetIF
Header-only C++14 library for getting addresses associated with network interfaces without name lookups on Windows, macOS, Linux, and FreeBSD
Write Clean C++ Code. Always.
* Code Quality Rankings and insights are calculated and provided by Lumnify.
They vary from L1 to L5 with "L5" being the highest.
Do you think we are missing an alternative of PcapPlusPlus or a related project?
README
PcapPlusPlus is a multiplatform C++ library for capturing, parsing and crafting of network packets. It is designed to be efficient, powerful and easy to use.
PcapPlusPlus enables decoding and forging capabilities for a large variety of network protocols. It also provides easy to use C++ wrappers for the most popular packet processing engines such as libpcap, WinPcap, Npcap, DPDK and PF_RING.
Table Of Contents
- Download
- Feature Overview
- Getting Started
- API Documentation
- Multi Platform Support
- Supported Network Protocols
- DPDK And PF_RING Support
- Benchmarks
- Provide Feedback
- Contributing
- License
Download
You can choose between downloading pre-compiled binaries and build PcapPlusPlus yourself. For more details please visit the Download page in PcapPlusPlus web-site.
Pre Compiled Binaries
From Homebrew:
brew install pcapplusplus
From Conan:
conan remote add public-conan https://api.bintray.com/conan/bincrafters/public-conan
conan install pcapplusplus/[email protected]/stable -r public-conan
From GitHub release page:
https://github.com/seladb/PcapPlusPlus/releases/latest
Build It Yourself
Clone the git repository:
git clone https://github.com/seladb/PcapPlusPlus.git
Follow the build instructions according to your platform in the Build From Source page in PcapPlusPlus web-site.
Feature Overview
- Packet capture through an easy to use C++ wrapper for popular packet capture engines such as libpcap, WinPcap, Npcap, Intel DPDK, ntop’s PF_RING and raw sockets [Learn more]
- Packet parsing and crafting including detailed analysis of protocols and layers, packet generation and packet edit for a large variety of network protocols [Learn more]
- Read and write packets from/to files in both PCAP and PCAPNG formats [Learn more]
- Packet processing in line rate through an efficient and easy to use C++ wrapper for DPDK and PF_RING [Learn more]
- Multiplatform support - PcapPlusPlus is fully supported on Linux, MacOS, Windows, Android and FreeBSD
- Packet reassembly - unique implementation of TCP Reassembly which includes TCP retransmission, out-of-order TCP packets and missing TCP data, and IP Fragmentation and Defragmentation to create and reassemble IPv4 and IPv6 fragments [Learn more]
- Packet filtering that makes libpcap's BPF filters a lot more user-friendly [Learn more]
- TLS Fingerprinting - a C++ implementation of JA3 and JA3S TLS fingerprinting [Learn more]
Getting Started
Writing applications with PcapPlusPlus is very easy and intuitive. Here is a simple application that shows how to read a packet from a PCAP file and parse it:
#include "IPv4Layer.h"
#include "Packet.h"
#include "PcapFileDevice.h"
int main(int argc, char* argv[])
{
// open a pcap file for reading
pcpp::PcapFileReaderDevice reader("1_packet.pcap");
if (!reader.open())
{
printf("Error opening the pcap file\n");
return 1;
}
// read the first (and only) packet from the file
pcpp::RawPacket rawPacket;
if (!reader.getNextPacket(rawPacket))
{
printf("Couldn't read the first packet in the file\n");
return 1;
}
// parse the raw packet into a parsed packet
pcpp::Packet parsedPacket(&rawPacket);
// verify the packet is IPv4
if (parsedPacket.isPacketOfType(pcpp::IPv4))
{
// extract source and dest IPs
pcpp::IPv4Address srcIP = parsedPacket.getLayerOfType<pcpp::IPv4Layer>()->getSrcIPv4Address();
pcpp::IPv4Address destIP = parsedPacket.getLayerOfType<pcpp::IPv4Layer>()->getDstIPv4Address();
// print source and dest IPs
printf("Source IP is '%s'; Dest IP is '%s'\n", srcIP.toString().c_str(), destIP.toString().c_str());
}
// close the file
reader.close();
return 0;
}
You can find much more information in the Getting Started page in PcapPlusPlus web-site. This page will walk you through few easy steps to have an app up and running.
API Documentation
PcapPlusPlus consists of 3 libraries:
- Packet++ - a library for parsing, creating and editing network packets
- Pcap++ - a library for intercepting and sending packets, providing network and NIC info, stats, etc. It is actually a C++ wrapper for packet capturing engines such as libpcap, WinPcap, Npcap, DPDK and PF_RING
- Common++ - a library with some common code utilities used by both Packet++ and Pcap++
You can find an extensive API documentation in the API documentation section in PcapPlusPlus web-site. If you see any missing data please contact us.
Multi Platform Support
PcapPlusPlus is currently supported on Windows, Linux, MacOS, Android and FreeBSD. Please visit PcapPlusPlus web-site to see all of the supported platforms and refer to the Download section to start using PcapPlusPlus on your platform.
Supported Network Protocols
PcapPlusPlus currently supports parsing, editing and creation of packets of the following protocols:
- Ethernet II
- IEEE 802.3 Ethernet
- SLL (Linux cooked capture)
- Null/Loopback
- Raw IP (IPv4 & IPv6)
- IPv4
- IPv6
- ARP
- VLAN
- VXLAN
- MPLS
- PPPoE
- GRE
- TCP
- UDP
- GTP (v1)
- ICMP
- IGMP (IGMPv1, IGMPv2 and IGMPv3 are supported)
- IPSec AH & ESP - parsing only (no editing capabilities)
- SIP
- SDP
- Radius
- DNS
- DHCP
- BGP (v4)
- SSH - parsing only (no editing capabilities)
- HTTP headers (request & response)
- SSL/TLS - parsing only (no editing capabilities)
- Packet trailer (a.k.a footer or padding)
- Generic payload
DPDK And PF_RING Support
The Data Plane Development Kit (DPDK) is a set of data plane libraries and network interface controller drivers for fast packet processing.
PF_RING™ is a new type of network socket that dramatically improves the packet capture speed.
Both frameworks provide very fast packets processing (up to line speed) and are used in many network applications such as routers, firewalls, load balancers, etc. PcapPlusPLus provides a C++ abstraction layer over DPDK & PF_RING. This abstraction layer provides an easy to use interface that removes a lot of the boilerplate involved in using these frameworks. You can learn more by visiting the DPDK & PF_RING support pages in PcapPlusPlus web-site.
Benchmarks
We used Matias Fontanini's packet-capture-benchmarks project to compare the performance of PcapPlusPlus with other similar C++ libraries (such as libtins
and libcrafter
).
You can see the results in the Benchmarks page in PcapPlusPlus web-site.
Provide Feedback
We'd be more than happy to get feedback, please feel free to reach out to us in any of the following ways:
- Open a GitHub ticket
- Post a message in PcapPlusPlus Google group: https://groups.google.com/d/forum/pcapplusplus-support
- Ask a question on Stack Overflow: https://stackoverflow.com/questions/tagged/pcapplusplus
- Send an email to: [email protected]
- Follow us on Twitter: https://twitter.com/seladb
If you like this project please Star us on GitHub — it helps! :star: :star:
Please visit the PcapPlusPlus web-site to learn more.
Contributing
We would very much appreciate any contribution to this project. If you're interested in contributing please visit the contribution page in PcapPlusPlus web-site.
License
PcapPlusPlus is released under the Unlicense license.
*Note that all licence references and agreements mentioned in the PcapPlusPlus README section above
are relevant to that project's source code only.