73 void operator()(bpf_program* ptr)
const noexcept;
82 using BpfProgramUPtr = std::unique_ptr<bpf_program, internal::BpfProgramDeleter>;
84 std::string m_FilterStr;
86 mutable BpfProgramUPtr m_CachedProgram;
88 static BpfProgramUPtr compileFilter(std::string
const& filter,
LinkLayerType linkType);
113 PCPP_DEPRECATED("Prefer
matches(...) overload.")
126 PCPP_DEPRECATED("Prefer
matches(...) overload.")
128 uint16_t linkType) const;
150 bool matches(const uint8_t* packetData, uint32_t packetDataLength, timespec timestamp, uint16_t linkType) const;
161 mutable bool m_CachedFilter =
false;
178 PCPP_DEPRECATED(
"Prefer matches(...) overload.")
189 bool cacheFilter() const;
192 void invalidateCache()
const
194 m_CachedFilter =
false;
203 const std::string m_FilterStr;
206 explicit BPFStringFilter(
const std::string& filterStr) : m_FilterStr(filterStr)
233 void parseDirection(std::string& directionAsString)
const;
264 std::string parseOperator()
const;
398 m_Address = ipAddress;
400 if (m_Address.
isIPv4() && newPrefixLen > 32u)
405 m_Network =
IPNetwork(m_Address, newPrefixLen);
419 m_Network =
IPNetwork(m_Address, netmask);
484 uint16_t m_TotalLength;
500 m_TotalLength = totalLength;
513 void portToString(uint16_t portAsInt);
559 m_FromPort = fromPort;
595 m_MacAddress = address;
608 uint16_t m_EtherType;
622 m_EtherType = etherType;
635 std::vector<GeneralFilter*> m_FilterList;
649 m_FilterList.push_back(filter);
664 m_FilterList.clear();
686 template <> constexpr
const char* getCompositeLogicOpDelimiter<CompositeLogicFilterOp::AND>()
690 template <> constexpr
const char* getCompositeLogicOpDelimiter<CompositeLogicFilterOp::OR>()
708 for (
auto it = m_FilterList.cbegin(); it != m_FilterList.cend(); ++it)
710 std::string innerFilter;
711 (*it)->parseToString(innerFilter);
712 result +=
'(' + innerFilter +
')';
713 if (m_FilterList.cend() - 1 != it)
715 result += internal::getCompositeLogicOpDelimiter<op>();
753 m_FilterToInverse = filterToInverse;
762 m_FilterToInverse = filterToInverse;
801 m_ProtoFamily = proto;
811 m_ProtoFamily = protoFamily;
905 uint8_t m_TcpFlagsBitMask;
906 MatchOptions m_MatchOption;
916 : m_TcpFlagsBitMask(tcpFlagBitMask), m_MatchOption(matchOption)
926 m_TcpFlagsBitMask = tcpFlagBitMask;
927 m_MatchOption = matchOption;
941 uint16_t m_WindowSize;
957 m_WindowSize = windowSize;
constexpr const char * getCompositeLogicOpDelimiter()=delete
Definition: PcapFilter.h:822
ArpFilter(ArpOpcode opCode)
Definition: PcapFilter.h:829
void setOpCode(ArpOpcode opCode)
Definition: PcapFilter.h:836
void parseToString(std::string &result) const override
Definition: PcapFilter.h:201
void parseToString(std::string &result) const override
Definition: PcapFilter.h:80
bool matches(const RawPacket &rawPacket) const
Match a packet with the filter stored in this object.
bool matchPacketWithFilter(const RawPacket *rawPacket) const
BpfFilterWrapper()=default
Creates a new instance with no filter.
bool setFilter(const std::string &filter, LinkLayerType linkType=LINKTYPE_ETHERNET)
Definition: PcapFilter.h:633
CompositeFilter()=default
An empty constructor for this class. Use addFilter() to add filters to the composite filter.
void removeFilter(GeneralFilter *filter)
void addFilter(GeneralFilter *filter)
Definition: PcapFilter.h:647
CompositeFilter(const std::vector< GeneralFilter * > &filters)
void setFilters(const std::vector< GeneralFilter * > &filters)
void clearAllFilters()
Remove all filters from the composite filter.
Definition: PcapFilter.h:662
Definition: PcapFilter.h:701
void parseToString(std::string &result) const override
Definition: PcapFilter.h:705
Definition: PcapFilter.h:606
EtherTypeFilter(uint16_t etherType)
Definition: PcapFilter.h:613
void setEtherType(uint16_t etherType)
Definition: PcapFilter.h:620
void parseToString(std::string &result) const override
Definition: PcapFilter.h:158
virtual void parseToString(std::string &result) const =0
virtual ~GeneralFilter()=default
Virtual destructor, frees the bpf program.
Definition: PcapFilter.h:228
void setDirection(Direction dir)
Definition: PcapFilter.h:246
Definition: PcapFilter.h:259
void setOperator(FilterOperator op)
Definition: PcapFilter.h:277
Definition: IpAddress.h:318
bool isIPv4() const
Definition: IpAddress.h:373
Definition: PcapFilter.h:289
void setMask(const std::string &netmask)
Definition: PcapFilter.h:417
void clearMask()
Clears the subnet mask.
Definition: PcapFilter.h:424
void setAddr(const std::string &ipAddress)
Definition: PcapFilter.h:385
void setLen(const int len)
Definition: PcapFilter.h:434
IPFilter(const IPAddress &ipAddress, Direction dir, int len)
Definition: PcapFilter.h:359
IPFilter(const std::string &ipAddress, Direction dir, const std::string &netmask)
Definition: PcapFilter.h:320
IPFilter(const IPNetwork &network, Direction dir)
Definition: PcapFilter.h:367
void setNetwork(const IPNetwork &network)
Definition: PcapFilter.h:375
IPFilter(const std::string &ipAddress, Direction dir, int len)
Definition: PcapFilter.h:347
void clearLen()
Clears the subnet mask length.
Definition: PcapFilter.h:441
IPFilter(const std::string &ipAddress, Direction dir)
Definition: PcapFilter.h:300
IPFilter(const IPAddress &ipAddress, Direction dir)
Definition: PcapFilter.h:306
IPFilter(const IPAddress &ipAddress, Direction dir, const std::string &netmask)
Definition: PcapFilter.h:333
void setAddr(const IPAddress &ipAddress)
Definition: PcapFilter.h:396
void parseToString(std::string &result) const override
Definition: IpAddress.h:651
IPAddress getNetworkPrefix() const
Definition: IpAddress.h:787
uint8_t getPrefixLen() const
Definition: IpAddress.h:773
Definition: IpAddress.h:30
Definition: PcapFilter.h:454
void parseToString(std::string &result) const override
IPv4IDFilter(uint16_t ipID, FilterOperator op)
Definition: PcapFilter.h:462
void setIpID(uint16_t ipID)
Definition: PcapFilter.h:469
Definition: PcapFilter.h:482
void setTotalLength(uint16_t totalLength)
Definition: PcapFilter.h:498
IPv4TotalLengthFilter(uint16_t totalLength, FilterOperator op)
Definition: PcapFilter.h:490
void parseToString(std::string &result) const override
Definition: PcapFilter.h:578
void parseToString(std::string &result) const override
void setMacAddress(MacAddress address)
Definition: PcapFilter.h:593
MacAddressFilter(MacAddress address, Direction dir)
Definition: PcapFilter.h:586
Definition: MacAddress.h:24
Definition: PcapFilter.h:744
void parseToString(std::string &result) const override
void setFilter(GeneralFilter *filterToInverse)
Definition: PcapFilter.h:760
NotFilter(GeneralFilter *filterToInverse)
Definition: PcapFilter.h:751
Definition: PcapFilter.h:510
PortFilter(uint16_t port, Direction dir)
void parseToString(std::string &result) const override
void setPort(uint16_t port)
Definition: PcapFilter.h:525
Definition: PcapFilter.h:539
PortRangeFilter(uint16_t fromPort, uint16_t toPort, Direction dir)
Definition: PcapFilter.h:549
void parseToString(std::string &result) const override
void setToPort(uint16_t toPort)
Definition: PcapFilter.h:565
void setFromPort(uint16_t fromPort)
Definition: PcapFilter.h:557
Definition: PcapFilter.h:777
void setProto(ProtocolType proto)
Definition: PcapFilter.h:799
ProtoFilter(ProtocolTypeFamily protoFamily)
Definition: PcapFilter.h:791
void setProto(ProtocolTypeFamily protoFamily)
Definition: PcapFilter.h:809
ProtoFilter(ProtocolType proto)
Definition: PcapFilter.h:785
void parseToString(std::string &result) const override
Definition: RawPacket.h:259
Definition: PcapFilter.h:875
TcpFlags
An enum of all TCP flags that can be use in the filter.
Definition: PcapFilter.h:879
void parseToString(std::string &result) const override
MatchOptions
Definition: PcapFilter.h:897
@ MatchAll
Match only packets that contain all flags defined in the filter.
Definition: PcapFilter.h:899
void setTcpFlagsBitMask(uint8_t tcpFlagBitMask, MatchOptions matchOption)
Definition: PcapFilter.h:924
TcpFlagsFilter(uint8_t tcpFlagBitMask, MatchOptions matchOption)
Definition: PcapFilter.h:915
Definition: PcapFilter.h:939
void setWindowSize(uint16_t windowSize)
Definition: PcapFilter.h:955
void parseToString(std::string &result) const override
TcpWindowSizeFilter(uint16_t windowSize, FilterOperator op)
Definition: PcapFilter.h:948
Definition: PcapFilter.h:967
void setLength(uint16_t length)
Definition: PcapFilter.h:983
void parseToString(std::string &result) const override
UdpLengthFilter(uint16_t length, FilterOperator op)
Definition: PcapFilter.h:976
Definition: PcapFilter.h:849
VlanFilter(uint16_t vlanId)
Definition: PcapFilter.h:856
void setVlanID(uint16_t vlanId)
Definition: PcapFilter.h:863
void parseToString(std::string &result) const override
uint8_t ProtocolType
Definition: ProtocolType.h:35
uint32_t ProtocolTypeFamily
Definition: ProtocolType.h:39
The main namespace for the PcapPlusPlus lib.
Definition: AssertionUtils.h:19
ArpOpcode
An enum for ARP message type.
Definition: ArpLayer.h:45
FilterOperator
Supported operators enum.
Definition: PcapFilter.h:52
@ GREATER_THAN
Greater than.
Definition: PcapFilter.h:58
@ EQUALS
Equals.
Definition: PcapFilter.h:54
@ GREATER_OR_EQUAL
Greater or equal.
Definition: PcapFilter.h:60
@ LESS_THAN
Less than.
Definition: PcapFilter.h:62
@ NOT_EQUALS
Not equals.
Definition: PcapFilter.h:56
@ LESS_OR_EQUAL
Less or equal.
Definition: PcapFilter.h:64
Direction
An enum that contains direction (source or destination)
Definition: PcapFilter.h:41
@ SRC_OR_DST
Source or destination.
Definition: PcapFilter.h:47
@ DST
Destination.
Definition: PcapFilter.h:45
@ SRC
Source.
Definition: PcapFilter.h:43
CompositeLogicFilterOp
Supported composite logic filter operators enum.
Definition: PcapFilter.h:671
@ OR
Logical OR operation.
@ AND
Logical AND operation.
LinkLayerType
An enum describing all known link layer type. Taken from: http://www.tcpdump.org/linktypes....
Definition: RawPacket.h:20
@ LINKTYPE_ETHERNET
IEEE 802.3 Ethernet.
Definition: RawPacket.h:24
Definition: PcapFilter.h:72