74 void operator()(bpf_program* ptr)
const noexcept;
83 using BpfProgramUPtr = std::unique_ptr<bpf_program, internal::BpfProgramDeleter>;
85 std::string m_FilterStr;
87 mutable BpfProgramUPtr m_CachedProgram;
89 static BpfProgramUPtr compileFilter(std::string
const& filter,
LinkLayerType linkType);
129 uint16_t linkType) const;
151 bool matches(const uint8_t* packetData, uint32_t packetDataLength, timespec timestamp, uint16_t linkType) const;
162 mutable bool m_CachedFilter =
false;
190 bool cacheFilter() const;
193 void invalidateCache()
const
195 m_CachedFilter =
false;
204 const std::string m_FilterStr;
207 explicit BPFStringFilter(
const std::string& filterStr) : m_FilterStr(filterStr)
234 void parseDirection(std::string& directionAsString)
const;
265 std::string parseOperator()
const;
399 m_Address = ipAddress;
401 if (m_Address.
isIPv4() && newPrefixLen > 32u)
406 m_Network =
IPNetwork(m_Address, newPrefixLen);
420 m_Network =
IPNetwork(m_Address, netmask);
485 uint16_t m_TotalLength;
501 m_TotalLength = totalLength;
514 void portToString(uint16_t portAsInt);
560 m_FromPort = fromPort;
596 m_MacAddress = address;
609 uint16_t m_EtherType;
623 m_EtherType = etherType;
636 std::vector<GeneralFilter*> m_FilterList;
650 m_FilterList.push_back(filter);
665 m_FilterList.clear();
687 template <> constexpr
const char* getCompositeLogicOpDelimiter<CompositeLogicFilterOp::AND>()
691 template <> constexpr
const char* getCompositeLogicOpDelimiter<CompositeLogicFilterOp::OR>()
709 for (
auto it = m_FilterList.cbegin(); it != m_FilterList.cend(); ++it)
711 std::string innerFilter;
712 (*it)->parseToString(innerFilter);
713 result +=
'(' + innerFilter +
')';
714 if (m_FilterList.cend() - 1 != it)
716 result += internal::getCompositeLogicOpDelimiter<op>();
754 m_FilterToInverse = filterToInverse;
763 m_FilterToInverse = filterToInverse;
802 m_ProtoFamily = proto;
812 m_ProtoFamily = protoFamily;
906 uint8_t m_TcpFlagsBitMask;
907 MatchOptions m_MatchOption;
917 : m_TcpFlagsBitMask(tcpFlagBitMask), m_MatchOption(matchOption)
927 m_TcpFlagsBitMask = tcpFlagBitMask;
928 m_MatchOption = matchOption;
942 uint16_t m_WindowSize;
958 m_WindowSize = windowSize;
constexpr const char * getCompositeLogicOpDelimiter()=delete
Definition: PcapFilter.h:823
ArpFilter(ArpOpcode opCode)
Definition: PcapFilter.h:830
void setOpCode(ArpOpcode opCode)
Definition: PcapFilter.h:837
void parseToString(std::string &result) const override
Definition: PcapFilter.h:202
void parseToString(std::string &result) const override
Definition: PcapFilter.h:81
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:634
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:648
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:663
Definition: PcapFilter.h:702
void parseToString(std::string &result) const override
Definition: PcapFilter.h:706
Definition: PcapFilter.h:607
EtherTypeFilter(uint16_t etherType)
Definition: PcapFilter.h:614
void setEtherType(uint16_t etherType)
Definition: PcapFilter.h:621
void parseToString(std::string &result) const override
Definition: PcapFilter.h:159
virtual void parseToString(std::string &result) const =0
virtual ~GeneralFilter()=default
Virtual destructor, frees the bpf program.
Definition: PcapFilter.h:229
void setDirection(Direction dir)
Definition: PcapFilter.h:247
Definition: PcapFilter.h:260
void setOperator(FilterOperator op)
Definition: PcapFilter.h:278
Definition: IpAddress.h:318
bool isIPv4() const
Definition: IpAddress.h:373
Definition: PcapFilter.h:290
void setMask(const std::string &netmask)
Definition: PcapFilter.h:418
void clearMask()
Clears the subnet mask.
Definition: PcapFilter.h:425
void setAddr(const std::string &ipAddress)
Definition: PcapFilter.h:386
void setLen(const int len)
Definition: PcapFilter.h:435
IPFilter(const IPAddress &ipAddress, Direction dir, int len)
Definition: PcapFilter.h:360
IPFilter(const std::string &ipAddress, Direction dir, const std::string &netmask)
Definition: PcapFilter.h:321
IPFilter(const IPNetwork &network, Direction dir)
Definition: PcapFilter.h:368
void setNetwork(const IPNetwork &network)
Definition: PcapFilter.h:376
IPFilter(const std::string &ipAddress, Direction dir, int len)
Definition: PcapFilter.h:348
void clearLen()
Clears the subnet mask length.
Definition: PcapFilter.h:442
IPFilter(const std::string &ipAddress, Direction dir)
Definition: PcapFilter.h:301
IPFilter(const IPAddress &ipAddress, Direction dir)
Definition: PcapFilter.h:307
IPFilter(const IPAddress &ipAddress, Direction dir, const std::string &netmask)
Definition: PcapFilter.h:334
void setAddr(const IPAddress &ipAddress)
Definition: PcapFilter.h:397
void parseToString(std::string &result) const override
Definition: IpAddress.h:651
IPAddress getNetworkPrefix() const
Definition: IpAddress.h:779
uint8_t getPrefixLen() const
Definition: IpAddress.h:753
Definition: IpAddress.h:30
Definition: PcapFilter.h:455
void parseToString(std::string &result) const override
IPv4IDFilter(uint16_t ipID, FilterOperator op)
Definition: PcapFilter.h:463
void setIpID(uint16_t ipID)
Definition: PcapFilter.h:470
Definition: PcapFilter.h:483
void setTotalLength(uint16_t totalLength)
Definition: PcapFilter.h:499
IPv4TotalLengthFilter(uint16_t totalLength, FilterOperator op)
Definition: PcapFilter.h:491
void parseToString(std::string &result) const override
Definition: PcapFilter.h:579
void setMacAddress(MacAddress const &address)
Definition: PcapFilter.h:594
MacAddressFilter(MacAddress const &address, Direction dir)
Definition: PcapFilter.h:587
void parseToString(std::string &result) const override
Definition: MacAddress.h:24
Definition: PcapFilter.h:745
void parseToString(std::string &result) const override
void setFilter(GeneralFilter *filterToInverse)
Definition: PcapFilter.h:761
NotFilter(GeneralFilter *filterToInverse)
Definition: PcapFilter.h:752
Definition: PcapFilter.h:511
PortFilter(uint16_t port, Direction dir)
void parseToString(std::string &result) const override
void setPort(uint16_t port)
Definition: PcapFilter.h:526
Definition: PcapFilter.h:540
PortRangeFilter(uint16_t fromPort, uint16_t toPort, Direction dir)
Definition: PcapFilter.h:550
void parseToString(std::string &result) const override
void setToPort(uint16_t toPort)
Definition: PcapFilter.h:566
void setFromPort(uint16_t fromPort)
Definition: PcapFilter.h:558
Definition: PcapFilter.h:778
void setProto(ProtocolType proto)
Definition: PcapFilter.h:800
ProtoFilter(ProtocolTypeFamily protoFamily)
Definition: PcapFilter.h:792
void setProto(ProtocolTypeFamily protoFamily)
Definition: PcapFilter.h:810
ProtoFilter(ProtocolType proto)
Definition: PcapFilter.h:786
void parseToString(std::string &result) const override
Definition: RawPacket.h:290
Definition: PcapFilter.h:876
TcpFlags
An enum of all TCP flags that can be use in the filter.
Definition: PcapFilter.h:880
void parseToString(std::string &result) const override
MatchOptions
Definition: PcapFilter.h:898
@ MatchAll
Match only packets that contain all flags defined in the filter.
Definition: PcapFilter.h:900
void setTcpFlagsBitMask(uint8_t tcpFlagBitMask, MatchOptions matchOption)
Definition: PcapFilter.h:925
TcpFlagsFilter(uint8_t tcpFlagBitMask, MatchOptions matchOption)
Definition: PcapFilter.h:916
Definition: PcapFilter.h:940
void setWindowSize(uint16_t windowSize)
Definition: PcapFilter.h:956
void parseToString(std::string &result) const override
TcpWindowSizeFilter(uint16_t windowSize, FilterOperator op)
Definition: PcapFilter.h:949
Definition: PcapFilter.h:968
void setLength(uint16_t length)
Definition: PcapFilter.h:984
void parseToString(std::string &result) const override
UdpLengthFilter(uint16_t length, FilterOperator op)
Definition: PcapFilter.h:977
Definition: PcapFilter.h:850
VlanFilter(uint16_t vlanId)
Definition: PcapFilter.h:857
void setVlanID(uint16_t vlanId)
Definition: PcapFilter.h:864
void parseToString(std::string &result) const override
uint8_t ProtocolType
Definition: ProtocolType.h:37
uint32_t ProtocolTypeFamily
Definition: ProtocolType.h:41
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:53
@ GREATER_THAN
Greater than.
Definition: PcapFilter.h:59
@ EQUALS
Equals.
Definition: PcapFilter.h:55
@ GREATER_OR_EQUAL
Greater or equal.
Definition: PcapFilter.h:61
@ LESS_THAN
Less than.
Definition: PcapFilter.h:63
@ NOT_EQUALS
Not equals.
Definition: PcapFilter.h:57
@ LESS_OR_EQUAL
Less or equal.
Definition: PcapFilter.h:65
@ PCPP_DEPRECATED
Deprecated typo, use OsiModelSessionLayer instead.
Definition: ProtocolType.h:284
Direction
An enum that contains direction (source or destination)
Definition: PcapFilter.h:42
@ SRC_OR_DST
Source or destination.
Definition: PcapFilter.h:48
@ DST
Destination.
Definition: PcapFilter.h:46
@ SRC
Source.
Definition: PcapFilter.h:44
CompositeLogicFilterOp
Supported composite logic filter operators enum.
Definition: PcapFilter.h:672
@ 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:22
@ LINKTYPE_ETHERNET
IEEE 802.3 Ethernet.
Definition: RawPacket.h:26
Definition: PcapFilter.h:73