September 2024 release of PcapPlusPlus (v24.09)
Binaries included in this release
- Binaries compiled for Ubuntu 24.04 LTS, 22.04 LTS, 20.04 LTS
- Binaries compiled for RHEL 9.4
- Binaries compiled for Fedora 39
- Binaries compiled for Alpine 3.17.2
- Binaries compiled for macOS Intel and Apple Silicon with Xcode 15.4 and 14.3.1
- Binaries compiled for Android with all 4 ABIs:
arm64-v8a
,armeabi-v7a
,x86
,x86_64
- Binaries compiled for FreeBSD 14.0 and 13.2
- Binaries compiled for Windows using MinGW-w64 14.2.0 (32bit + 64bit)
- Binaries compiled for Windows using Microsoft Visual Studio 2022, 2019 (32bit + 64bit, Debug + Release configurations)
- Full documentation (both PcapPlusPlus website and API doxygen documentation) is available here: https://pcapplusplus.github.io/docs/quickstart
What's changed (changes from v23.09)
- Added support for eBPF AF_XDP
- New protocols:
- DPDK improvements:
- DPDK 22.11 support (thanks @clementperon !)
- Jumbo frames support (thanks @gyl30 !)
- Added an option to disable hugepages and driver verification on initialization (thanks @MatteO-Matic !)
- NUMA awareness (thanks @SesomB !)
- Examples and utils:
- Added
XdpExample-FilterTraffic
to demonstrateXdpDevice
usage PcapSplitter
: updated output filenames with 5-tuple information (thanks @hidd3ncod3s !)
- Added
- Added support for nanosecond precision in reading and writing pcap files (thanks @egecetin !)
- Blocking mode packet capture now uses
poll()
(thanks @tigercosmos !) - Added millisecond precision timeout in
RawSocketDevice
(thanks @tigercosmos !) - Extended
IPFilter
to support IPv6 where possible (thanks @Dimi1010 !) - Boosted build time with Ccache (thanks @clementperon !)
- Fixed precision issue in pcapng file reader (thanks @mserdarsanli !)
- Improved method for retrieving the default gateway on macOS (thanks @zhengfeihe !)
- Added security and code of conduct guidelines (thanks @egecetin !)
- Refactoring and modernization of the code base:
- Refactored and cleaned up live devices (thanks @Dimi1010 !)
- Added a getter for fetching all IP addresses as
IPAddress
objects.
- Added a getter for fetching all IP addresses as
- Refactored IP address classes
IPv4Address
,IPv6Address
,IPAddress
(thanks @tigercosmos , @Dimi1010 !)- Added equality operators between
IPAddress
andin_addr
types
- Added equality operators between
- Refactored the MAC address class
MacAddress
(thanks @tigercosmos !) - Ported PcapPlusPlus libraries to C++11 (thanks @Dimi1010 , @tigercosmos , @egecetin , @WojtekMs , @rtmeng, @DeepakReddy1999 !)
- Ported most of the examples and tutorials to C++11 (thanks @jpcofr , @merttozer !)
- Refactored and cleaned up PF_RING devices (thanks @Dimi1010 !)
- Refactored and cleaned up the
PointerVector
class (thanks @Dimi1010 !) - Converted Macro Guard to
pragma once
(thanks @clementperon !) - Replaced
std::map
withstd::unordered_map
(thanks @tigercosmos !) - Refactored large parts of the packet filtering code (thanks @Dimi1010 !)
- Refactored and cleaned up live devices (thanks @Dimi1010 !)
- Supported platforms update:
- Ubuntu: added 24.04 LTS and dropped 18.04 LTS (thanks @tigercosmos !)
- Added support for RHEL 9.4 (thanks @clementperon !)
- Fedora: added support for 39 and removed 37 (thanks @clementperon !)
- Removed support for CentOS 7
- FreeBSD: added support for 14.0 and dropped 12 (thanks @clementperon !)
- Internal tools:
- Reformatted the entire code base using
clang-format
(thanks @tigercosmos , @Dimi1010 !) - Added
dependabot
to keep GitHub Actions and Python packages up-to-date (thanks @egecetin !) - Added OpenSSF Scorecard automation to monitor and enhance security (thanks @egecetin !)
- Transitioned from CirrusCI to GitHub Actions for all workflows (thanks @tigercosmos !)
- Scheduled regular CI builds (thanks @tigercosmos !)
- Replaced deprecated
netifaces
byscapy
(thanks @zhengfeihe !) - Improved fuzzing coverage and added Fuzz CI (thanks @sashashura !)
- Added a template for opening GitHub issues (thanks @tigercosmos !)
- Upgraded
LightPcapNg
to the latest frommaster
(thanks @tigercosmos !) - Fixed unhandled exceptions crashing the entire test suite (thanks @Dimi1010 !)
- Reformatted the entire code base using
- Tons of bug fixes, security fixes and small improvements (thanks @sashashura , @tigercosmos , @clementperon , @egecetin , @kraj , @liu0hy , @lucashc , @axmahr, @Double0101, @prudens , @MCredbear, @rahagal, @nadongjun !)
Breaking changes
This version includes a small number of breaking changes:
- Removed
isValid()
fromMacAddress,
IPAddress
,IPv4Address
,IPv6Address
, instead they throw an exception if the input argument is invalid - Introduced a new
TcpOptionEnumType
- Removed the
dummy
argument inPayloadLayer
's constructor
Deprecation list
The following methods that were marked as deprecated in previous versions were removed:
IPv4Address::matchSubnet()
The following methods are now marked as deprecated and will be removed in future versions:
PointerVector::getAndRemoveFromVector()
-> replaced byPointerVector::getAndDetach()
HttpResponseLayer::HttpResponseLayer(version, statusCode, statusCodeString)
-> use other constructorsHttpResponseLayer::setStatusCode(newStatusCode, statusCodeString)
-> use the other overloadTcpOptionType
enum -> replaced byTcpOptionEnumType
TcpOption::getTcpOptionType()
-> replaced byTcpOption::getTcpOptionEnumType()
TcpOptionBuilder::TcpOptionBuilder()
-> use other constructorsTcpLayer::getTcpOption(TcpOptionType option)
-> use the other overloadTcpLayer::addTcpOptionAfter()
-> replaced byTcpLayer::insertTcpOptionAfter()
TcpLayer::removeTcpOption()
-> use the other overloadPcapLiveDevice::getAddresses()
-> replaced byPcapLiveDevice::getIPAddresses()
PcapRemoteDeviceList::getRemoteDeviceList()
-> replaced byPcapRemoteDeviceList::createRemoteDeviceList()
Collaborators
Full Changelog: v23.09...v24.09