PcapPlusPlus  20.08
ArpLayer.h
Go to the documentation of this file.
1 #ifndef PACKETPP_ARP_LAYER
2 #define PACKETPP_ARP_LAYER
3 
4 #include "Layer.h"
5 #include "IpAddress.h"
6 #include "MacAddress.h"
7 
9 
14 namespace pcpp
15 {
16 
21 #pragma pack(push, 1)
22  struct arphdr {
24  uint16_t hardwareType;
26  uint16_t protocolType;
28  uint8_t hardwareSize;
30  uint8_t protocolSize;
32  uint16_t opcode;
34  uint8_t senderMacAddr[6];
36  uint32_t senderIpAddr;
38  uint8_t targetMacAddr[6];
40  uint32_t targetIpAddr;
41  };
42 #pragma pack(pop)
43 
47  enum ArpOpcode
48  {
49  ARP_REQUEST = 0x0001,
50  ARP_REPLY = 0x0002
51  };
52 
57  class ArpLayer : public Layer
58  {
59  public:
67  ArpLayer(uint8_t* data, size_t dataLen, Layer* prevLayer, Packet* packet) : Layer(data, dataLen, prevLayer, packet) { m_Protocol = ARP; m_DataLen = sizeof(arphdr); }
68 
78 
79  ~ArpLayer() {}
80 
85  arphdr* getArpHeader() const { return (arphdr*)m_Data; }
86 
91  MacAddress getSenderMacAddress() const { return MacAddress(getArpHeader()->senderMacAddr); }
92 
97  MacAddress getTargetMacAddress() const { return MacAddress(getArpHeader()->targetMacAddr); }
98 
103  IPv4Address getSenderIpAddr() const { return getArpHeader()->senderIpAddr; }
104 
109  IPv4Address getTargetIpAddr() const { return getArpHeader()->targetIpAddr; }
110 
111 
112  // implement abstract methods
113 
117  void parseNextLayer() {}
118 
122  size_t getHeaderLen() const { return sizeof(arphdr); }
123 
132  void computeCalculateFields();
133 
134  std::string toString() const;
135 
137  };
138 
139 } // namespace pcpp
140 #endif /* PACKETPP_ARP_LAYER */
The main namespace for the PcapPlusPlus lib.
OsiModelLayer
Definition: ProtocolType.h:233
IPv4Address getTargetIpAddr() const
Definition: ArpLayer.h:109
uint32_t senderIpAddr
Definition: ArpLayer.h:36
uint8_t targetMacAddr[6]
Definition: ArpLayer.h:38
Definition: Layer.h:70
ARP request.
Definition: ArpLayer.h:49
Definition: Packet.h:26
Definition: ArpLayer.h:57
uint16_t opcode
Definition: ArpLayer.h:32
ArpOpcode
Definition: ArpLayer.h:47
uint32_t targetIpAddr
Definition: ArpLayer.h:40
uint8_t hardwareSize
Definition: ArpLayer.h:28
OsiModelLayer getOsiModelLayer() const
Definition: ArpLayer.h:136
Definition: ProtocolType.h:240
uint16_t hardwareType
Definition: ArpLayer.h:24
Definition: IpAddress.h:26
IPv4Address getSenderIpAddr() const
Definition: ArpLayer.h:103
uint8_t senderMacAddr[6]
Definition: ArpLayer.h:34
size_t getHeaderLen() const
Definition: ArpLayer.h:122
uint16_t protocolType
Definition: ArpLayer.h:26
ARP reply (response)
Definition: ArpLayer.h:50
void parseNextLayer()
Definition: ArpLayer.h:117
ArpLayer(uint8_t *data, size_t dataLen, Layer *prevLayer, Packet *packet)
Definition: ArpLayer.h:67
Definition: ArpLayer.h:22
MacAddress getSenderMacAddress() const
Definition: ArpLayer.h:91
Definition: MacAddress.h:27
const ProtocolType ARP
Definition: ProtocolType.h:73
arphdr * getArpHeader() const
Definition: ArpLayer.h:85
uint8_t protocolSize
Definition: ArpLayer.h:30
MacAddress getTargetMacAddress() const
Definition: ArpLayer.h:97