PcapPlusPlus
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 
77  ArpLayer(ArpOpcode opCode, const MacAddress& senderMacAddr, const MacAddress& targetMacAddr, const IPv4Address senderIpAddr, const IPv4Address& targetIpAddr);
78 
79  ~ArpLayer() {}
80 
85  inline arphdr* getArpHeader() { return (arphdr*)m_Data; };
86 
91  inline MacAddress getSenderMacAddress() { return MacAddress(getArpHeader()->senderMacAddr); }
92 
97  inline MacAddress getTargetMacAddress() { return MacAddress(getArpHeader()->targetMacAddr); }
98 
103  inline IPv4Address getSenderIpAddr() { return IPv4Address(getArpHeader()->senderIpAddr); }
104 
109  inline IPv4Address getTargetIpAddr() { return IPv4Address(getArpHeader()->targetIpAddr); }
110 
111 
112  // implement abstract methods
113 
117  void parseNextLayer() {}
118 
122  inline size_t getHeaderLen() { return sizeof(arphdr); }
123 
132  void computeCalculateFields();
133 
134  std::string toString();
135 
137  };
138 
139 } // namespace pcpp
140 #endif /* PACKETPP_ARP_LAYER */
uint16_t protocolType
Definition: ArpLayer.h:26
Definition: ArpLayer.h:22
uint8_t hardwareSize
Definition: ArpLayer.h:28
uint32_t senderIpAddr
Definition: ArpLayer.h:36
size_t getHeaderLen()
Definition: ArpLayer.h:122
Definition: Packet.h:26
The main namespace for the PcapPlusPlus lib.
Definition: IpAddress.h:113
MacAddress getTargetMacAddress()
Definition: ArpLayer.h:97
void computeCalculateFields()
ArpOpcode
Definition: ArpLayer.h:47
OsiModelLayer
Definition: ProtocolType.h:208
uint16_t hardwareType
Definition: ArpLayer.h:24
uint8_t senderMacAddr[6]
Definition: ArpLayer.h:34
IPv4Address getTargetIpAddr()
Definition: ArpLayer.h:109
Definition: ProtocolType.h:71
std::string toString()
IPv4Address getSenderIpAddr()
Definition: ArpLayer.h:103
Definition: MacAddress.h:21
Definition: Layer.h:70
ARP request.
Definition: ArpLayer.h:49
void parseNextLayer()
Definition: ArpLayer.h:117
ARP reply (response)
Definition: ArpLayer.h:50
Definition: ProtocolType.h:215
uint16_t opcode
Definition: ArpLayer.h:32
uint8_t targetMacAddr[6]
Definition: ArpLayer.h:38
uint32_t targetIpAddr
Definition: ArpLayer.h:40
OsiModelLayer getOsiModelLayer()
Definition: ArpLayer.h:136
Definition: ArpLayer.h:57
uint8_t protocolSize
Definition: ArpLayer.h:30
arphdr * getArpHeader()
Definition: ArpLayer.h:85
MacAddress getSenderMacAddress()
Definition: ArpLayer.h:91
ArpLayer(uint8_t *data, size_t dataLen, Layer *prevLayer, Packet *packet)
Definition: ArpLayer.h:67