PcapPlusPlus  Next
RawPacket.h
Go to the documentation of this file.
1 #pragma once
2 
3 #include <stdint.h>
4 #ifdef _MSC_VER
5 # include <winsock2.h>
6 # include <time.h>
7 #else
8 # include <sys/time.h>
9 #endif
10 #include <stddef.h>
11 
13 
16 namespace pcpp
17 {
20  {
48  LINKTYPE_RAW = 101,
248  LINKTYPE_INVALID = 0xFFFF
249  };
250 
252 #define PCPP_MAX_PACKET_SIZE 65536
253 
258  class RawPacket
259  {
260  protected:
261  uint8_t* m_RawData;
262  int m_RawDataLen;
263  int m_FrameLength;
264  timespec m_TimeStamp;
265  bool m_DeleteRawDataAtDestructor;
266  bool m_RawPacketSet;
267  LinkLayerType m_LinkLayerType;
268  void init(bool deleteRawDataAtDestructor = true);
269  void copyDataFrom(const RawPacket& other, bool allocateData = true);
270 
271  public:
282  RawPacket(const uint8_t* pRawData, int rawDataLen, timeval timestamp, bool deleteRawDataAtDestructor,
283  LinkLayerType layerType = LINKTYPE_ETHERNET);
284 
295  RawPacket(const uint8_t* pRawData, int rawDataLen, timespec timestamp, bool deleteRawDataAtDestructor,
296  LinkLayerType layerType = LINKTYPE_ETHERNET);
297 
304 
306  virtual ~RawPacket();
307 
311  RawPacket(const RawPacket& other);
312 
317  RawPacket& operator=(const RawPacket& other);
318 
321  virtual RawPacket* clone() const;
322 
324  virtual uint8_t getObjectType() const
325  {
326  return 0;
327  }
328 
339  virtual bool setRawData(const uint8_t* pRawData, int rawDataLen, timeval timestamp,
340  LinkLayerType layerType = LINKTYPE_ETHERNET, int frameLength = -1);
341 
352  virtual bool setRawData(const uint8_t* pRawData, int rawDataLen, timespec timestamp,
353  LinkLayerType layerType = LINKTYPE_ETHERNET, int frameLength = -1);
354 
363  bool initWithRawData(const uint8_t* pRawData, int rawDataLen, timespec timestamp,
364  LinkLayerType layerType = LINKTYPE_ETHERNET);
365 
368  const uint8_t* getRawData() const
369  {
370  return m_RawData;
371  }
372 
376  {
377  return m_LinkLayerType;
378  }
379 
383  static bool isLinkTypeValid(int linkTypeValue);
384 
387  int getRawDataLen() const
388  {
389  return m_RawDataLen;
390  }
391 
394  int getFrameLength() const
395  {
396  return m_FrameLength;
397  }
400  timespec getPacketTimeStamp() const
401  {
402  return m_TimeStamp;
403  }
404 
408  virtual bool setPacketTimeStamp(timeval timestamp);
409 
413  virtual bool setPacketTimeStamp(timespec timestamp);
414 
419  bool isPacketSet() const
420  {
421  return m_RawPacketSet;
422  }
423 
427  virtual void clear();
428 
434  virtual void appendData(const uint8_t* dataToAppend, size_t dataToAppendLen);
435 
443  virtual void insertData(int atIndex, const uint8_t* dataToInsert, size_t dataToInsertLen);
444 
451  virtual bool removeData(int atIndex, size_t numOfBytesToRemove);
452 
461  virtual bool reallocateData(size_t newBufferLength);
462  };
463 
464 } // namespace pcpp
Definition: RawPacket.h:259
const uint8_t * getRawData() const
Definition: RawPacket.h:368
int getRawDataLen() const
Definition: RawPacket.h:387
int getFrameLength() const
Definition: RawPacket.h:394
static bool isLinkTypeValid(int linkTypeValue)
virtual void insertData(int atIndex, const uint8_t *dataToInsert, size_t dataToInsertLen)
RawPacket(const RawPacket &other)
virtual bool setRawData(const uint8_t *pRawData, int rawDataLen, timeval timestamp, LinkLayerType layerType=LINKTYPE_ETHERNET, int frameLength=-1)
timespec getPacketTimeStamp() const
Definition: RawPacket.h:400
virtual void appendData(const uint8_t *dataToAppend, size_t dataToAppendLen)
bool initWithRawData(const uint8_t *pRawData, int rawDataLen, timespec timestamp, LinkLayerType layerType=LINKTYPE_ETHERNET)
RawPacket(const uint8_t *pRawData, int rawDataLen, timespec timestamp, bool deleteRawDataAtDestructor, LinkLayerType layerType=LINKTYPE_ETHERNET)
virtual uint8_t getObjectType() const
Definition: RawPacket.h:324
RawPacket(const uint8_t *pRawData, int rawDataLen, timeval timestamp, bool deleteRawDataAtDestructor, LinkLayerType layerType=LINKTYPE_ETHERNET)
virtual bool removeData(int atIndex, size_t numOfBytesToRemove)
virtual bool setRawData(const uint8_t *pRawData, int rawDataLen, timespec timestamp, LinkLayerType layerType=LINKTYPE_ETHERNET, int frameLength=-1)
virtual void clear()
virtual ~RawPacket()
A destructor for this class. Frees the raw data if deleteRawDataAtDestructor was set to 'true'.
virtual bool reallocateData(size_t newBufferLength)
bool isPacketSet() const
Definition: RawPacket.h:419
LinkLayerType getLinkLayerType() const
Definition: RawPacket.h:375
virtual bool setPacketTimeStamp(timespec timestamp)
virtual bool setPacketTimeStamp(timeval timestamp)
virtual RawPacket * clone() const
Clones the current packet. Caller is responsible for deallocation of the memory.
RawPacket & operator=(const RawPacket &other)
The main namespace for the PcapPlusPlus lib.
LinkLayerType
An enum describing all known link layer type. Taken from: http://www.tcpdump.org/linktypes....
Definition: RawPacket.h:20
@ LINKTYPE_NG40
Definition: RawPacket.h:204
@ LINKTYPE_PPI
Per-Packet Information information.
Definition: RawPacket.h:139
@ LINKTYPE_GPF_T
Transparent-mapped generic framing procedure.
Definition: RawPacket.h:129
@ LINKTYPE_USBPCAP
USB packets, beginning with a USBPcap header.
Definition: RawPacket.h:213
@ LINKTYPE_LOOP
OpenBSD loopback encapsulation.
Definition: RawPacket.h:56
@ LINKTYPE_BLUETOOTH_LE_LL
Bluetooth Low Energy air interface Link Layer packets.
Definition: RawPacket.h:217
@ LINKTYPE_USER15
Reserved for private use.
Definition: RawPacket.h:118
@ LINKTYPE_BLUETOOTH_LE_LL_WITH_PHDR
Bluetooth Low Energy link-layer packets.
Definition: RawPacket.h:225
@ LINKTYPE_IEEE802_15_4
IEEE 802.15.4 wireless Personal Area Network.
Definition: RawPacket.h:141
@ LINKTYPE_BLUETOOTH_BREDR_BB
Bluetooth Basic Rate and Enhanced Data Rate baseband packets.
Definition: RawPacket.h:223
@ LINKTYPE_ARCNET_BSD
ARCNET Data Packets.
Definition: RawPacket.h:30
@ LINKTYPE_USER2
Reserved for private use.
Definition: RawPacket.h:92
@ LINKTYPE_RAW
Raw IP.
Definition: RawPacket.h:48
@ LINKTYPE_MTP3
Signaling System 7 Message Transfer Part Level 3.
Definition: RawPacket.h:80
@ LINKTYPE_MTP2_WITH_PHDR
Signaling System 7 Message Transfer Part Level 2.
Definition: RawPacket.h:76
@ LINKTYPE_INVALID
Set if interface ID for a packet of a pcapng file is too high.
Definition: RawPacket.h:248
@ LINKTYPE_PROFIBUS_DL
PROFIBUS data link layer packets, as specified by IEC standard 61158-6-3.
Definition: RawPacket.h:227
@ LINKTYPE_LINUX_SLL
Linux "cooked" capture encapsulation.
Definition: RawPacket.h:58
@ LINKTYPE_SLIP
SLIP, encapsulated with a LINKTYPE_SLIP header.
Definition: RawPacket.h:32
@ LINKTYPE_LINUX_SLL2
Linux "cooked" capture encapsulation v2.
Definition: RawPacket.h:246
@ LINKTYPE_BACNET_MS_TP
BACnet MS/TP frames.
Definition: RawPacket.h:122
@ LINKTYPE_IPMI_HPM_2
IPMI trace packets, as specified by Table 3-20 "Trace Data Block Format" in the PICMG HPM....
Definition: RawPacket.h:233
@ LINKTYPE_USER7
Reserved for private use.
Definition: RawPacket.h:102
@ LINKTYPE_DOCSIS
Signaling System 7 Signalling Connection Control Part.
Definition: RawPacket.h:84
@ LINKTYPE_SCTP
SCTP packets, as defined by RFC 4960, with no lower-level protocols such as IPv4 or IPv6.
Definition: RawPacket.h:211
@ LINKTYPE_IP_OVER_FC
RFC 2625 IP-over-Fibre Channel.
Definition: RawPacket.h:66
@ LINKTYPE_BLUETOOTH_LINUX_MONITOR
Bluetooth Linux Monitor encapsulation of traffic for the BlueZ stack.
Definition: RawPacket.h:221
@ LINKTYPE_ATM_RFC1483
RFC 1483 LLC/SNAP-encapsulated ATM.
Definition: RawPacket.h:46
@ LINKTYPE_USER8
Reserved for private use.
Definition: RawPacket.h:104
@ LINKTYPE_MPEG_2_TS
MPEG-2 Transport Stream transport packets, as specified by ISO 13818-1/ITU-T Recommendation H....
Definition: RawPacket.h:201
@ LINKTYPE_FRELAY
Frame Relay.
Definition: RawPacket.h:54
@ LINKTYPE_PPP_WITH_DIR
Definition: RawPacket.h:154
@ LINKTYPE_GPRS_LLC
General Packet Radio Service Logical Link Control.
Definition: RawPacket.h:127
@ LINKTYPE_IEEE802_11_PRISM
Prism monitor mode information followed by an 802.11 header.
Definition: RawPacket.h:64
@ LINKTYPE_AX25
AX.25 packet.
Definition: RawPacket.h:26
@ LINKTYPE_EPON
Ethernet-over-passive-optical-network packets.
Definition: RawPacket.h:231
@ LINKTYPE_ETHERNET
IEEE 802.3 Ethernet.
Definition: RawPacket.h:24
@ LINKTYPE_NULL
BSD loopback encapsulation.
Definition: RawPacket.h:22
@ LINKTYPE_IEEE802_5
IEEE 802.5 Token Ring.
Definition: RawPacket.h:28
@ LINKTYPE_SITA
Various link-layer types, with a pseudo-header, for SITA.
Definition: RawPacket.h:143
@ LINKTYPE_SUNATM
ATM traffic, encapsulated as per the scheme used by SunATM devices.
Definition: RawPacket.h:68
@ LINKTYPE_IEEE802_11_RADIOTAP
Radiotap link-layer information followed by an 802.11 header.
Definition: RawPacket.h:70
@ LINKTYPE_USB_LINUX_MMAPPED
USB packets, beginning with a Linux USB header.
Definition: RawPacket.h:164
@ LINKTYPE_C_HDLC
Cisco PPP with HDLC framing.
Definition: RawPacket.h:50
@ LINKTYPE_USER12
Reserved for private use.
Definition: RawPacket.h:112
@ LINKTYPE_BLUETOOTH_HCI_H4
Bluetooth HCI UART transport layer.
Definition: RawPacket.h:135
@ LINKTYPE_RTAC_SERIAL
Serial-line packet header for the Schweitzer Engineering Laboratories "RTAC" product.
Definition: RawPacket.h:215
@ LINKTYPE_NFLOG
Linux netlink NETLINK NFLOG socket log messages.
Definition: RawPacket.h:191
@ LINKTYPE_ARCNET_LINUX
ARCNET Data Packets, as described by the ARCNET Trade Association standard ATA 878....
Definition: RawPacket.h:72
@ LINKTYPE_FC_2_WITH_FRAME_DELIMS
Fibre Channel FC-2 frames.
Definition: RawPacket.h:168
@ LINKTYPE_PFLOG
OpenBSD pflog.
Definition: RawPacket.h:62
@ LINKTYPE_FDDI
FDDI, as specified by ANSI INCITS 239-1994.
Definition: RawPacket.h:36
@ LINKTYPE_ERF
Various link-layer types, with a pseudo-header, for Endace DAG cards; encapsulates Endace ERF record.
Definition: RawPacket.h:145
@ LINKTYPE_USER5
Reserved for private use.
Definition: RawPacket.h:98
@ LINKTYPE_DLT_RAW2
Raw IP (OpenBSD)
Definition: RawPacket.h:40
@ LINKTYPE_AX25_KISS
AX.25 packet, with a 1-byte KISS header containing a type indicator.
Definition: RawPacket.h:149
@ LINKTYPE_USER13
Reserved for private use.
Definition: RawPacket.h:114
@ LINKTYPE_LINUX_IRDA
Linux-IrDA packets.
Definition: RawPacket.h:86
@ LINKTYPE_USER10
Reserved for private use.
Definition: RawPacket.h:108
@ LINKTYPE_IEEE802_15_4_NOFCS
IEEE 802.15.4 wireless Personal Area Network, without the FCS at the end of the frame.
Definition: RawPacket.h:178
@ LINKTYPE_ZWAVE_R1_R2
Per Joshua Wright jwright@hasborg.com, formats for Z-Wave RF profiles R1 and R2 captures.
Definition: RawPacket.h:235
@ LINKTYPE_FRELAY_WITH_DIR
Frame Relay.
Definition: RawPacket.h:158
@ LINKTYPE_PPP_PPPD
Definition: RawPacket.h:125
@ LINKTYPE_ZWAVE_R3
Per Joshua Wright jwright@hasborg.com, formats for Z-Wave RF profile R3 captures.
Definition: RawPacket.h:237
@ LINKTYPE_C_HDLC_WITH_DIR
Cisco PPP with HDLC framing.
Definition: RawPacket.h:156
@ LINKTYPE_APPLE_IP_OVER_IEEE1394
Apple IP-over-IEEE 1394 cooked header.
Definition: RawPacket.h:74
@ LINKTYPE_IEEE802_11
IEEE 802.11 wireless LAN.
Definition: RawPacket.h:52
@ LINKTYPE_PKTAP
Apple PKTAP capture encapsulation.
Definition: RawPacket.h:229
@ LINKTYPE_NETLINK
Linux Netlink capture encapsulation.
Definition: RawPacket.h:219
@ LINKTYPE_IPNET
Solaris ipnet pseudo-header.
Definition: RawPacket.h:170
@ LINKTYPE_IPOIB
IP-over-InfiniBand, as specified by RFC 4391 section 6.
Definition: RawPacket.h:199
@ LINKTYPE_USB_LINUX
USB packets, beginning with a Linux USB header.
Definition: RawPacket.h:137
@ LINKTYPE_USER6
Reserved for private use.
Definition: RawPacket.h:100
@ LINKTYPE_LINUX_LAPD
Link Access Procedures on the D Channel (LAPD) frames.
Definition: RawPacket.h:133
@ LINKTYPE_FC_2
Fibre Channel FC-2 frames, beginning with a Frame_Header.
Definition: RawPacket.h:166
@ LINKTYPE_INFINIBAND
Raw InfiniBand frames, starting with the Local Routing Header.
Definition: RawPacket.h:209
@ LINKTYPE_LAPD
Link Access Procedures on the D Channel (LAPD) frames.
Definition: RawPacket.h:151
@ LINKTYPE_DLT_RAW1
Raw IP.
Definition: RawPacket.h:38
@ LINKTYPE_USER4
Reserved for private use.
Definition: RawPacket.h:96
@ LINKTYPE_IPV4
Raw IPv4; the packet begins with an IPv4 header.
Definition: RawPacket.h:174
@ LINKTYPE_BLUETOOTH_HCI_H4_WITH_PHDR
Bluetooth HCI UART transport layer.
Definition: RawPacket.h:147
@ LINKTYPE_USER14
Reserved for private use.
Definition: RawPacket.h:116
@ LINKTYPE_IEEE802_15_4_NONASK_PHY
IEEE 802.15.4 wireless Personal Area Network.
Definition: RawPacket.h:162
@ LINKTYPE_NFC_LLCP
Definition: RawPacket.h:207
@ LINKTYPE_USER9
Reserved for private use.
Definition: RawPacket.h:106
@ LINKTYPE_DVB_CI
Definition: RawPacket.h:184
@ LINKTYPE_DBUS
Definition: RawPacket.h:181
@ LINKTYPE_STANAG_5066_D_PDU
Definition: RawPacket.h:189
@ LINKTYPE_GPF_F
Frame-mapped generic framing procedure.
Definition: RawPacket.h:131
@ LINKTYPE_SCCP
Signaling System 7 Signalling Connection Control Part.
Definition: RawPacket.h:82
@ LINKTYPE_MUX27010
Variant of 3GPP TS 27.010 multiplexing protocol (similar to, but not the same as, 27....
Definition: RawPacket.h:186
@ LINKTYPE_USER11
Reserved for private use.
Definition: RawPacket.h:110
@ LINKTYPE_NETANALYZER_TRANSPARENT
Definition: RawPacket.h:197
@ LINKTYPE_WATTSTOPPER_DLM
Definition: RawPacket.h:240
@ LINKTYPE_IEEE802_11_AVS
AVS monitor mode information followed by an 802.11 header.
Definition: RawPacket.h:120
@ LINKTYPE_USER3
Reserved for private use.
Definition: RawPacket.h:94
@ LINKTYPE_USER1
Reserved for private use.
Definition: RawPacket.h:90
@ LINKTYPE_CAN_SOCKETCAN
CAN (Controller Area Network) frames, with a pseudo-header as supplied by Linux SocketCAN.
Definition: RawPacket.h:172
@ LINKTYPE_PPP
PPP, as per RFC 1661 and RFC 1662.
Definition: RawPacket.h:34
@ LINKTYPE_ISO_14443
Definition: RawPacket.h:244
@ LINKTYPE_MTP2
Signaling System 7 Message Transfer Part Level 2.
Definition: RawPacket.h:78
@ LINKTYPE_PPP_HDLC
PPP in HDLC-like framing, as per RFC 1662, or Cisco PPP with HDLC framing, as per section 4....
Definition: RawPacket.h:42
@ LINKTYPE_LTALK
Apple LocalTalk.
Definition: RawPacket.h:60
@ LINKTYPE_PPP_ETHER
PPPoE.
Definition: RawPacket.h:44
@ LINKTYPE_USER0
Reserved for private use.
Definition: RawPacket.h:88
@ LINKTYPE_IPMB_LINUX
IPMB over an I2C circuit.
Definition: RawPacket.h:160
@ LINKTYPE_IPV6
Raw IPv6; the packet begins with an IPv6 header.
Definition: RawPacket.h:176
@ LINKTYPE_NETANALYZER
Definition: RawPacket.h:194