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; }
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 */
IPv4Address getSenderIpAddr()
Definition: ArpLayer.h:103
uint32_t senderIpAddr
Definition: ArpLayer.h:36
uint16_t hardwareType
Definition: ArpLayer.h:24
uint8_t protocolSize
Definition: ArpLayer.h:30
std::string toString()
ArpLayer(uint8_t *data, size_t dataLen, Layer *prevLayer, Packet *packet)
Definition: ArpLayer.h:67
arphdr * getArpHeader()
Definition: ArpLayer.h:85
ARP reply (response)
Definition: ArpLayer.h:50
ARP request.
Definition: ArpLayer.h:49
uint32_t targetIpAddr
Definition: ArpLayer.h:40
Definition: ProtocolType.h:210
MacAddress getSenderMacAddress()
Definition: ArpLayer.h:91
Definition: MacAddress.h:21
Definition: IpAddress.h:99
Definition: ArpLayer.h:57
OsiModelLayer
Definition: ProtocolType.h:203
IPv4Address getTargetIpAddr()
Definition: ArpLayer.h:109
Definition: Packet.h:26
uint8_t senderMacAddr[6]
Definition: ArpLayer.h:34
uint8_t targetMacAddr[6]
Definition: ArpLayer.h:38
Definition: ArpLayer.h:22
uint8_t hardwareSize
Definition: ArpLayer.h:28
Definition: Layer.h:52
MacAddress getTargetMacAddress()
Definition: ArpLayer.h:97
uint16_t protocolType
Definition: ArpLayer.h:26
OsiModelLayer getOsiModelLayer()
Definition: ArpLayer.h:136
size_t getHeaderLen()
Definition: ArpLayer.h:122
uint16_t opcode
Definition: ArpLayer.h:32
The main namespace for the PcapPlusPlus lib.
void parseNextLayer()
Definition: ArpLayer.h:117
Definition: ProtocolType.h:71
ArpOpcode
Definition: ArpLayer.h:47
void computeCalculateFields()