PcapPlusPlus  Next
WakeOnLanLayer.h
Go to the documentation of this file.
1 #pragma once
2 
3 #include "IpAddress.h"
4 #include "Layer.h"
5 #include "MacAddress.h"
6 
8 
11 namespace pcpp
12 {
14  class WakeOnLanLayer : public Layer
15  {
16  private:
17  void init(uint16_t len);
18 
19  public:
22 #pragma pack(push, 1)
23  struct wol_header
24  {
26  uint8_t sync[6];
28  uint8_t addrBody[6 * 16];
29  };
30 #pragma pack(pop)
31  static_assert(sizeof(wol_header) == 102, "wol_header size is not 102 bytes");
32 
38  WakeOnLanLayer(uint8_t* data, size_t dataLen, Layer* prevLayer, Packet* packet)
39  : Layer(data, dataLen, prevLayer, packet, WakeOnLan)
40  {}
41 
44  explicit WakeOnLanLayer(const pcpp::MacAddress& targetAddr);
45 
50  WakeOnLanLayer(const pcpp::MacAddress& targetAddr, uint8_t* password, uint8_t len);
51 
55  WakeOnLanLayer(const pcpp::MacAddress& targetAddr, const pcpp::MacAddress& password);
56 
60  WakeOnLanLayer(const pcpp::MacAddress& targetAddr, const IPv4Address& password);
61 
66  {
67  return reinterpret_cast<wol_header*>(m_Data);
68  }
69 
73 
76  void setTargetAddr(const pcpp::MacAddress& targetAddr);
77 
80  std::string getPassword() const;
81 
86  bool setPassword(const uint8_t* password, uint8_t len);
87 
91  bool setPassword(const std::string& password);
92 
96  bool setPassword(const MacAddress& addr);
97 
101  bool setPassword(const IPv4Address& addr);
102 
105  static bool isWakeOnLanPort(uint16_t port)
106  {
107  return (port == 0) || (port == 7) || (port == 9);
108  }
109 
114  static bool isDataValid(const uint8_t* data, size_t dataSize);
115 
116  // overridden methods
117 
119  void parseNextLayer() override
120  {}
121 
123  size_t getHeaderLen() const override
124  {
125  return m_DataLen;
126  }
127 
129  void computeCalculateFields() override
130  {}
131 
134  {
135  return OsiModelDataLinkLayer;
136  }
137 
139  std::string toString() const override;
140 
145  {
147  static std::vector<FieldDescriptor> all()
148  {
149  auto result = Layer::SerializedFields::all();
150  std::initializer_list<FieldDescriptor> extra{ TargetAddress, Password };
151  std::copy(extra.begin(), extra.end(), std::back_inserter(result));
152  return result;
153  }
154 
157 
159  static const FieldDescriptor Password;
160  };
161 
162  protected:
163  void serializeLayer(ObjectScope& serializer) const override;
164  };
165 } // namespace pcpp
Definition: IpAddress.h:30
Definition: Layer.h:117
Definition: MacAddress.h:24
Definition: Serializers.h:230
Definition: Packet.h:49
Class for representing the Wake on LAN Layer.
Definition: WakeOnLanLayer.h:15
WakeOnLanLayer(const pcpp::MacAddress &targetAddr, const IPv4Address &password)
std::string toString() const override
OsiModelLayer getOsiModelLayer() const override
Definition: WakeOnLanLayer.h:133
void computeCalculateFields() override
Does nothing for this layer.
Definition: WakeOnLanLayer.h:129
pcpp::MacAddress getTargetAddr() const
bool setPassword(const uint8_t *password, uint8_t len)
bool setPassword(const std::string &password)
WakeOnLanLayer(const pcpp::MacAddress &targetAddr)
void serializeLayer(ObjectScope &serializer) const override
wol_header * getWakeOnLanHeader() const
Definition: WakeOnLanLayer.h:65
static bool isDataValid(const uint8_t *data, size_t dataSize)
size_t getHeaderLen() const override
Definition: WakeOnLanLayer.h:123
WakeOnLanLayer(const pcpp::MacAddress &targetAddr, uint8_t *password, uint8_t len)
bool setPassword(const MacAddress &addr)
bool setPassword(const IPv4Address &addr)
WakeOnLanLayer(const pcpp::MacAddress &targetAddr, const pcpp::MacAddress &password)
void setTargetAddr(const pcpp::MacAddress &targetAddr)
static bool isWakeOnLanPort(uint16_t port)
Definition: WakeOnLanLayer.h:105
std::string getPassword() const
WakeOnLanLayer(uint8_t *data, size_t dataLen, Layer *prevLayer, Packet *packet)
Definition: WakeOnLanLayer.h:38
void parseNextLayer() override
Parses the next layer. Wake on LAN is the always last so does nothing for this layer.
Definition: WakeOnLanLayer.h:119
const ProtocolType WakeOnLan
Wake On LAN (WOL) Protocol.
Definition: ProtocolType.h:207
The main namespace for the PcapPlusPlus lib.
Definition: AssertionUtils.h:19
OsiModelLayer
An enum representing OSI model layers.
Definition: ProtocolType.h:420
@ OsiModelDataLinkLayer
Data link layer (layer 2)
Definition: ProtocolType.h:424
Definition: Serializers.h:18
Definition: Layer.h:212
static std::vector< FieldDescriptor > all()
Definition: Layer.h:214
Definition: WakeOnLanLayer.h:145
static const FieldDescriptor TargetAddress
Target MAC address that the magic packet wakes, as a string.
Definition: WakeOnLanLayer.h:156
static std::vector< FieldDescriptor > all()
Definition: WakeOnLanLayer.h:147
static const FieldDescriptor Password
Optional SecureOn password, if present.
Definition: WakeOnLanLayer.h:159
Definition: WakeOnLanLayer.h:24
uint8_t sync[6]
Sync stream (FF FF FF FF FF FF)
Definition: WakeOnLanLayer.h:26
uint8_t addrBody[6 *16]
Target MAC address repeated 16 times.
Definition: WakeOnLanLayer.h:28