Skip to content
Merged
Show file tree
Hide file tree
Changes from 4 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion Examples/IPDefragUtil/main.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -125,7 +125,7 @@ void processPackets(pcpp::IFileReaderDevice* reader, pcpp::IFileWriterDevice* wr
if (filterByBpf)
{
// check if packet matches the BPF filter supplied by the user
if (pcpp::IPcapDevice::matchPacketWithFilter(filter, &rawPacket))
if (filter.matches(rawPacket))
{
stats.ipPacketsMatchBpfFilter++;
}
Expand Down
2 changes: 1 addition & 1 deletion Examples/IPFragUtil/main.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -258,7 +258,7 @@ void processPackets(pcpp::IFileReaderDevice* reader, pcpp::IFileWriterDevice* wr
if (filterByBpf)
{
// check if packet matches the BPF filter supplied by the user
if (pcpp::IPcapDevice::matchPacketWithFilter(filter, &rawPacket))
if (filter.matches(rawPacket))
{
stats.ipPacketsMatchBpfFilter++;
}
Expand Down
2 changes: 1 addition & 1 deletion Examples/PcapSplitter/SimpleSplitters.h
Original file line number Diff line number Diff line change
Expand Up @@ -131,7 +131,7 @@ class BpfCriteriaSplitter : public Splitter
*/
int getFileNumber(pcpp::Packet& packet, std::vector<int>& filesToClose)
{
if (pcpp::IPcapDevice::matchPacketWithFilter(filter, packet.getRawPacket()))
if (packet.getRawPacket() != nullptr && filter.matches(*packet.getRawPacket()))
return 0;
return 1;
}
Expand Down
3 changes: 3 additions & 0 deletions Pcap++/header/PcapDevice.h
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
#pragma once

#include "Device.h"
#include "DeprecationUtils.h"

// forward declaration for the pcap descriptor defined in pcap.h
struct pcap;
Expand Down Expand Up @@ -159,6 +160,8 @@ namespace pcpp
/// @param[in] filter A filter class to test against
/// @param[in] rawPacket A pointer to the raw packet to match the filter with
/// @return True if raw packet matches the filter or false otherwise
/// @deprecated This method is deprecated, use GeneralFilter::matches(...) method directly.
PCPP_DEPRECATED("Prefer GeneralFilter::matches(...) method directly.")
static bool matchPacketWithFilter(GeneralFilter& filter, RawPacket* rawPacket);

// implement abstract methods
Expand Down
6 changes: 6 additions & 0 deletions Pcap++/header/PcapFilter.h
Original file line number Diff line number Diff line change
Expand Up @@ -109,6 +109,8 @@ namespace pcpp
/// @param[in] rawPacket A pointer to a raw packet which the filter will be matched against
/// @return True if the filter matches (or if it's empty). False if the packet doesn't match or if the filter
/// could not be compiled
/// @deprecated This method is deprecated, use matches(...) overload instead.
PCPP_DEPRECATED("Prefer matches(...) overload.")
bool matchPacketWithFilter(const RawPacket* rawPacket) const;

/// Match a packet data with the filter stored in this object. If the filter is empty the method returns "true".
Expand All @@ -120,6 +122,8 @@ namespace pcpp
/// @param[in] linkType The packet link type
/// @return True if the filter matches (or if it's empty). False if the packet doesn't match or if the filter
/// could not be compiled
/// @deprecated This method is deprecated, use matches(...) overload instead.
PCPP_DEPRECATED("Prefer matches(...) overload.")
bool matchPacketWithFilter(const uint8_t* packetData, uint32_t packetDataLength, timespec packetTimestamp,
uint16_t linkType) const;

Expand Down Expand Up @@ -170,6 +174,8 @@ namespace pcpp
/// Match a raw packet with a given BPF filter.
/// @param[in] rawPacket A pointer to the raw packet to match the BPF filter with
/// @return True if a raw packet matches the BPF filter or false otherwise
/// @deprecated This method is deprecated, use matches(...) overload instead.
PCPP_DEPRECATED("Prefer matches(...) overload.")
bool matchPacketWithFilter(RawPacket* rawPacket) const;

/// @brief Match a raw packet against the filter.
Expand Down
8 changes: 7 additions & 1 deletion Pcap++/src/PcapDevice.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -152,7 +152,13 @@ namespace pcpp

bool IPcapDevice::matchPacketWithFilter(GeneralFilter& filter, RawPacket* rawPacket)
{
return filter.matchPacketWithFilter(rawPacket);
if (rawPacket == nullptr)
{
PCPP_LOG_ERROR("Raw packet pointer is null");
return false;
}

return filter.matches(*rawPacket);
}

std::string IPcapDevice::getPcapLibVersionInfo()
Expand Down
5 changes: 2 additions & 3 deletions Pcap++/src/PcapFileDevice.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -581,8 +581,7 @@ namespace pcpp
return false;
}

while (!m_BpfWrapper.matchPacketWithFilter(pktData, pktHeader.captured_length, pktHeader.timestamp,
pktHeader.data_link))
while (!m_BpfWrapper.matches(pktData, pktHeader.captured_length, pktHeader.timestamp, pktHeader.data_link))
{
if (!light_get_next_packet(toLightPcapNgT(m_LightPcapNg), &pktHeader, &pktData))
{
Expand Down Expand Up @@ -722,7 +721,7 @@ namespace pcpp
return false;
}

if (!m_BpfWrapper.matchPacketWithFilter(&packet))
if (!m_BpfWrapper.matches(packet))
{
return false;
}
Expand Down
36 changes: 18 additions & 18 deletions Tests/Pcap++Test/Tests/FilterTests.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -225,12 +225,12 @@ PTF_TEST_CASE(TestPcapFilters_General_BPFStr)

int validCounter = 0;

for (pcpp::RawPacketVector::VectorIterator iter = rawPacketVec.begin(); iter != rawPacketVec.end(); iter++)
for (auto* rawPacketPtr : rawPacketVec)
{
if (bpfStringFilter.matchPacketWithFilter(*iter))
if (bpfStringFilter.matches(*rawPacketPtr))
{
++validCounter;
pcpp::Packet packet(*iter);
pcpp::Packet packet(rawPacketPtr);
pcpp::EthLayer* ethLayer = packet.getLayerOfType<pcpp::EthLayer>();
PTF_ASSERT_EQUAL(ethLayer->getDestMac(), macAddr);
}
Expand All @@ -250,13 +250,13 @@ PTF_TEST_CASE(TestPcapFilters_MatchStatic)
fileReaderDev.close();

// Test empty BPFstring (the "ALL" filter) in combination with a "-" (example wrong filter)
for (pcpp::RawPacketVector::VectorIterator iter = rawPacketVec.begin(); iter != rawPacketVec.end(); iter++)
for (auto* rawPacketPtr : rawPacketVec)
{
pcpp::BPFStringFilter emptyFilter("");
PTF_ASSERT_TRUE(emptyFilter.matchPacketWithFilter(*iter));
PTF_ASSERT_TRUE(emptyFilter.matches(*rawPacketPtr));
pcpp::BPFStringFilter wrongFilter("-");
pcpp::Logger::getInstance().suppressLogs();
PTF_ASSERT_FALSE(wrongFilter.matchPacketWithFilter(*iter));
PTF_ASSERT_FALSE(wrongFilter.matches(*rawPacketPtr));
pcpp::Logger::getInstance().enableLogs();
}

Expand Down Expand Up @@ -825,16 +825,16 @@ PTF_TEST_CASE(TestPcapFilters_LinkLayer)
fileReaderDev1.close();

int validCounter = 0;
for (pcpp::RawPacketVector::VectorIterator iter = rawPacketVec.begin(); iter != rawPacketVec.end(); iter++)
for (auto* rawPacketPtr : rawPacketVec)
{
pcpp::Packet packet(*iter);
pcpp::Packet packet(rawPacketPtr);
if (pcpp::IPv4Layer* ip4layer = packet.getLayerOfType<pcpp::IPv4Layer>())
{
pcpp::BPFStringFilter bpfStringFilter(
"host " + ip4layer->getDstIPAddress().toString()); // checking against real filter, not the "" filter
if (bpfStringFilter.matchPacketWithFilter(*iter))
if (bpfStringFilter.matches(*rawPacketPtr))
{
if ((*iter)->getLinkLayerType() == pcpp::LINKTYPE_DLT_RAW1)
if (rawPacketPtr->getLinkLayerType() == pcpp::LINKTYPE_DLT_RAW1)
{
++validCounter;
}
Expand All @@ -851,16 +851,16 @@ PTF_TEST_CASE(TestPcapFilters_LinkLayer)
fileReaderDev2.close();

validCounter = 0;
for (pcpp::RawPacketVector::VectorIterator iter = rawPacketVec.begin(); iter != rawPacketVec.end(); iter++)
for (auto* rawPacketPtr : rawPacketVec)
{
pcpp::Packet packet(*iter);
pcpp::Packet packet(rawPacketPtr);
if (pcpp::IPv4Layer* ip4layer = packet.getLayerOfType<pcpp::IPv4Layer>())
{
pcpp::BPFStringFilter bpfStringFilter(
"host " + ip4layer->getDstIPAddress().toString()); // checking against real filter, not the "" filter
if (bpfStringFilter.matchPacketWithFilter(*iter))
if (bpfStringFilter.matches(*rawPacketPtr))
{
if ((*iter)->getLinkLayerType() == pcpp::LINKTYPE_LINUX_SLL)
if (rawPacketPtr->getLinkLayerType() == pcpp::LINKTYPE_LINUX_SLL)
{
++validCounter;
}
Expand All @@ -877,16 +877,16 @@ PTF_TEST_CASE(TestPcapFilters_LinkLayer)
fileReaderDev3.close();

validCounter = 0;
for (pcpp::RawPacketVector::VectorIterator iter = rawPacketVec.begin(); iter != rawPacketVec.end(); iter++)
for (auto* rawPacketPtr : rawPacketVec)
{
pcpp::Packet packet(*iter);
pcpp::Packet packet(rawPacketPtr);
if (pcpp::IPv4Layer* ip4layer = packet.getLayerOfType<pcpp::IPv4Layer>())
{
pcpp::BPFStringFilter bpfStringFilter(
"host " + ip4layer->getDstIPAddress().toString()); // checking against real filter, not the "" filter
if (bpfStringFilter.matchPacketWithFilter(*iter))
if (bpfStringFilter.matches(*rawPacketPtr))
{
if ((*iter)->getLinkLayerType() == pcpp::LINKTYPE_ETHERNET)
if (rawPacketPtr->getLinkLayerType() == pcpp::LINKTYPE_ETHERNET)
{
++validCounter;
}
Expand Down
Loading