/src/PcapPlusPlus/Tests/Fuzzers/ReadParsedPacket.h
Line | Count | Source |
1 | | #pragma once |
2 | | |
3 | | #include <Packet.h> |
4 | | #include <IPv4Layer.h> |
5 | | #include <TelnetLayer.h> |
6 | | #include <BgpLayer.h> |
7 | | #include <DhcpLayer.h> |
8 | | #include <DhcpV6Layer.h> |
9 | | #include <DnsLayer.h> |
10 | | #include <IcmpLayer.h> |
11 | | #include <NtpLayer.h> |
12 | | #include <SSLLayer.h> |
13 | | #include <SSLHandshake.h> |
14 | | #include <TcpLayer.h> |
15 | | #include <SdpLayer.h> |
16 | | #include <VrrpLayer.h> |
17 | | #include <Sll2Layer.h> |
18 | | #include <FtpLayer.h> |
19 | | #include <GreLayer.h> |
20 | | #include <GtpLayer.h> |
21 | | #include <SomeIpSdLayer.h> |
22 | | |
23 | | // Call some pcpp::Packet methods that are not invoked from general virtual methods |
24 | | // as `pcpp::Packet::toString` or `pcpp::Packet::computeCalculateFields` to trigger possible crashes. |
25 | | // The general rule is the functions do not modify the `parsedPacket`. |
26 | | // If you made changes to PcapPlusPlus and the code doesn't compile - fix the method call as any other unit test |
27 | | static void readParsedPacket(pcpp::Packet parsedPacket, pcpp::Layer* layer) |
28 | 1.06M | { |
29 | 1.06M | if (parsedPacket.isPacketOfType(pcpp::Telnet)) |
30 | 8.58k | { |
31 | 8.58k | if (auto telnetLayer = dynamic_cast<pcpp::TelnetLayer*>(layer)) |
32 | 1.81k | { |
33 | 1.81k | telnetLayer->getFirstCommand(); |
34 | 1.81k | telnetLayer->getTotalNumberOfCommands(); |
35 | | |
36 | 1.81k | pcpp::TelnetLayer::TelnetCommand commandVal; |
37 | 1.81k | do |
38 | 29.0k | { |
39 | 29.0k | commandVal = telnetLayer->getNextCommand(); |
40 | 29.0k | std::cout << "Telnet command is '" << telnetLayer->getTelnetCommandAsString(commandVal) << "'" |
41 | 29.0k | << std::endl; |
42 | 29.0k | pcpp::TelnetLayer::TelnetOption option = telnetLayer->getOption(); |
43 | 29.0k | std::cout << "Telnet option is '" << telnetLayer->getTelnetOptionAsString(option) << "'" << std::endl; |
44 | | |
45 | 29.0k | telnetLayer->getDataAsString(true); |
46 | 29.0k | telnetLayer->getNumberOfCommands(commandVal); |
47 | 29.0k | telnetLayer->getOption(commandVal); |
48 | 29.0k | size_t length = 0; |
49 | 29.0k | telnetLayer->getOptionData(length); |
50 | 29.0k | telnetLayer->getOptionData(commandVal, length); |
51 | 29.0k | } while (commandVal != pcpp::TelnetLayer::TelnetCommand::TelnetCommandEndOfPacket); |
52 | 1.81k | } |
53 | 8.58k | } |
54 | 1.06M | if (parsedPacket.isPacketOfType(pcpp::ARP)) |
55 | 19.8k | { |
56 | 19.8k | if (auto arpLayer = dynamic_cast<pcpp::ArpLayer*>(layer)) |
57 | 6.99k | { |
58 | 6.99k | arpLayer->isReply(); |
59 | 6.99k | arpLayer->isRequest(); |
60 | 6.99k | } |
61 | 19.8k | } |
62 | 1.06M | if (parsedPacket.isPacketOfType(pcpp::SomeIP)) |
63 | 55.9k | { |
64 | 55.9k | if (auto someipLayer = dynamic_cast<pcpp::SomeIpSdLayer*>(layer)) |
65 | 10.5k | { |
66 | 10.5k | auto entries = someipLayer->getEntries(); |
67 | 10.5k | if (!entries.empty()) |
68 | 10.5k | { |
69 | 10.5k | auto opts = someipLayer->getOptionsFromEntry(0); |
70 | 10.5k | for (auto opt : opts) |
71 | 6.21k | delete opt; |
72 | 10.5k | } |
73 | | |
74 | 10.5k | for (auto entry : entries) |
75 | 10.8k | { |
76 | 10.8k | entry->getNumOptions(); |
77 | 10.8k | entry->getServiceId(); |
78 | 10.8k | entry->getInstanceId(); |
79 | 10.8k | entry->getMajorVersion(); |
80 | 10.8k | entry->getMinorVersion(); |
81 | 10.8k | entry->getCounter(); |
82 | 10.8k | entry->getEventgroupId(); |
83 | 10.8k | delete entry; |
84 | 10.8k | } |
85 | | |
86 | 10.5k | someipLayer->getFlags(); |
87 | 10.5k | auto opts = someipLayer->getOptions(); |
88 | 10.5k | for (auto opt : opts) |
89 | 7.80k | { |
90 | 7.80k | opt->getType(); |
91 | 7.80k | if (auto v4opt = dynamic_cast<pcpp::SomeIpSdIPv4Option*>(opt)) |
92 | 7.66k | { |
93 | 7.66k | v4opt->getIpAddress(); |
94 | 7.66k | v4opt->getPort(); |
95 | 7.66k | v4opt->getProtocol(); |
96 | 7.66k | } |
97 | 132 | else if (auto v6opt = dynamic_cast<pcpp::SomeIpSdIPv6Option*>(opt)) |
98 | 28 | { |
99 | 28 | v6opt->getIpAddress(); |
100 | 28 | v6opt->getPort(); |
101 | 28 | v6opt->getProtocol(); |
102 | 28 | } |
103 | 7.80k | delete opt; |
104 | 7.80k | } |
105 | 10.5k | } |
106 | 55.9k | } |
107 | 1.06M | if (parsedPacket.isPacketOfType(pcpp::GTP)) |
108 | 12.6k | { |
109 | 12.6k | if (auto gtpLayer = dynamic_cast<pcpp::GtpV1Layer*>(layer)) |
110 | 2.12k | { |
111 | 2.12k | uint16_t value16 = 0; |
112 | 2.12k | gtpLayer->getSequenceNumber(value16); |
113 | 2.12k | uint8_t value8; |
114 | 2.12k | gtpLayer->getNpduNumber(value8); |
115 | 2.12k | gtpLayer->getMessageType(); |
116 | 2.12k | gtpLayer->getMessageTypeAsString(); |
117 | 2.12k | gtpLayer->isGTPUMessage(); |
118 | 2.12k | gtpLayer->isGTPCMessage(); |
119 | 2.12k | auto ext = gtpLayer->getNextExtension(); |
120 | 2.12k | ext.getExtensionType(); |
121 | 2.12k | ext.getContent(); |
122 | 2.12k | ext.getContentLength(); |
123 | 2.12k | ext.getNextExtension(); |
124 | 2.12k | } |
125 | 12.6k | } |
126 | 1.06M | if (parsedPacket.isPacketOfType(pcpp::GRE)) |
127 | 20.9k | { |
128 | 20.9k | if (auto greLayer = dynamic_cast<pcpp::GreLayer*>(layer)) |
129 | 3.27k | { |
130 | 3.27k | uint32_t value32 = 0; |
131 | 3.27k | greLayer->getSequenceNumber(value32); |
132 | 3.27k | } |
133 | 20.9k | } |
134 | 1.06M | if (parsedPacket.isPacketOfType(pcpp::GREv0)) |
135 | 5.78k | { |
136 | 5.78k | if (auto greLayer = dynamic_cast<pcpp::GREv0Layer*>(layer)) |
137 | 1.25k | { |
138 | 1.25k | uint16_t value16 = 0; |
139 | 1.25k | greLayer->getChecksum(value16); |
140 | 1.25k | greLayer->getOffset(value16); |
141 | 1.25k | uint32_t value32 = 0; |
142 | 1.25k | greLayer->getKey(value32); |
143 | 1.25k | } |
144 | 5.78k | } |
145 | 1.06M | if (parsedPacket.isPacketOfType(pcpp::GREv1)) |
146 | 15.1k | { |
147 | 15.1k | if (auto greLayer = dynamic_cast<pcpp::GREv1Layer*>(layer)) |
148 | 2.02k | { |
149 | 2.02k | uint32_t value32 = 0; |
150 | 2.02k | greLayer->getAcknowledgmentNum(value32); |
151 | 2.02k | } |
152 | 15.1k | } |
153 | 1.06M | if (parsedPacket.isPacketOfType(pcpp::FTP)) |
154 | 11.7k | { |
155 | 11.7k | if (auto ftpLayer = dynamic_cast<pcpp::FtpRequestLayer*>(layer)) |
156 | 833 | { |
157 | 833 | ftpLayer->getCommandOption(false); |
158 | 833 | ftpLayer->getCommandOption(true); |
159 | 833 | } |
160 | 10.9k | else if (auto ftpLayer = dynamic_cast<pcpp::FtpResponseLayer*>(layer)) |
161 | 1.65k | { |
162 | 1.65k | ftpLayer->getStatusCode(); |
163 | 1.65k | ftpLayer->getStatusOption(false); |
164 | 1.65k | ftpLayer->getStatusOption(true); |
165 | 1.65k | } |
166 | 11.7k | } |
167 | 1.06M | if (parsedPacket.isPacketOfType(pcpp::SLL2)) |
168 | 7.19k | { |
169 | 7.19k | if (auto sllLayer = dynamic_cast<pcpp::Sll2Layer*>(layer)) |
170 | 2.28k | { |
171 | 2.28k | sllLayer->getLinkLayerAsMacAddress(); |
172 | 2.28k | sllLayer->getProtocolType(); |
173 | 2.28k | sllLayer->getInterfaceIndex(); |
174 | 2.28k | sllLayer->getArphrdType(); |
175 | 2.28k | sllLayer->getPacketType(); |
176 | 2.28k | } |
177 | 7.19k | } |
178 | 1.06M | if (parsedPacket.isPacketOfType(pcpp::VRRP)) |
179 | 8.24k | { |
180 | 8.24k | if (auto vrrpLayer = dynamic_cast<pcpp::VrrpLayer*>(layer)) |
181 | 2.27k | { |
182 | 2.27k | vrrpLayer->getIPAddresses(); |
183 | 2.27k | vrrpLayer->isChecksumCorrect(); |
184 | 2.27k | vrrpLayer->getChecksum(); |
185 | 2.27k | vrrpLayer->getPriorityAsEnum(); |
186 | 2.27k | vrrpLayer->getPriority(); |
187 | 2.27k | vrrpLayer->getType(); |
188 | 2.27k | } |
189 | 8.24k | } |
190 | 1.06M | if (parsedPacket.isPacketOfType(pcpp::VRRPv2)) |
191 | 4.43k | { |
192 | 4.43k | if (auto vrrpLayer = dynamic_cast<pcpp::VrrpV2Layer*>(layer)) |
193 | 1.18k | { |
194 | 1.18k | vrrpLayer->getAuthTypeAsEnum(); |
195 | 1.18k | vrrpLayer->getAdvInt(); |
196 | 1.18k | } |
197 | 4.43k | } |
198 | 1.06M | if (parsedPacket.isPacketOfType(pcpp::VRRPv3)) |
199 | 3.81k | { |
200 | 3.81k | if (auto vrrpLayer = dynamic_cast<pcpp::VrrpV3Layer*>(layer)) |
201 | 1.08k | { |
202 | 1.08k | vrrpLayer->getMaxAdvInt(); |
203 | 1.08k | } |
204 | 3.81k | } |
205 | 1.06M | if (parsedPacket.isPacketOfType(pcpp::TCP)) |
206 | 616k | { |
207 | 616k | if (auto tcpLayer = dynamic_cast<pcpp::TcpLayer*>(layer)) |
208 | 147k | { |
209 | 147k | auto tcpLayer2(*tcpLayer); |
210 | 147k | tcpLayer2.insertTcpOptionAfter(pcpp::TcpOptionBuilder(pcpp::TcpOptionBuilder::NopEolOptionEnumType::Nop), |
211 | 147k | pcpp::TcpOptionEnumType::Nop); |
212 | 147k | } |
213 | 616k | } |
214 | 1.06M | if (parsedPacket.isPacketOfType(pcpp::SDP)) |
215 | 5.53k | { |
216 | 5.53k | if (auto sdpLayer = dynamic_cast<pcpp::SdpLayer*>(layer)) |
217 | 898 | { |
218 | 898 | sdpLayer->getOwnerIPv4Address(); |
219 | 898 | sdpLayer->getMediaPort("audio"); |
220 | 898 | sdpLayer->getFieldCount(); |
221 | | |
222 | 898 | auto sdpLayer2 = *sdpLayer; |
223 | 898 | std::vector<std::string> audioAttributes; |
224 | 898 | audioAttributes.push_back("rtpmap:8 PCMA/8000"); |
225 | 898 | sdpLayer2.addMediaDescription("audio", 6010, "RTP/AVP", "8 96", audioAttributes); |
226 | 898 | sdpLayer2.addField(PCPP_SDP_PROTOCOL_VERSION_FIELD, "0"); |
227 | 898 | sdpLayer2.removeField(PCPP_SDP_PROTOCOL_VERSION_FIELD); |
228 | 898 | } |
229 | 5.53k | } |
230 | 1.06M | if (parsedPacket.isPacketOfType(pcpp::SSL)) |
231 | 201k | { |
232 | 201k | if (auto handshakeLayer = dynamic_cast<pcpp::SSLHandshakeLayer*>(layer)) |
233 | 13.8k | { |
234 | 13.8k | if (auto clientHelloMessage = handshakeLayer->getHandshakeMessageOfType<pcpp::SSLClientHelloMessage>()) |
235 | 5.97k | { |
236 | 5.97k | clientHelloMessage->getCompressionMethodsValue(); |
237 | 5.97k | clientHelloMessage->getSessionID(); |
238 | 5.97k | clientHelloMessage->getHandshakeType(); |
239 | 5.97k | clientHelloMessage->getHandshakeVersion(); |
240 | | |
241 | 5.97k | pcpp::SSLCipherSuite::getCipherSuiteByName("TLS_RSA_WITH_NULL_MD5"); |
242 | 4.53M | for (int i = 0; i < clientHelloMessage->getCipherSuiteCount(); i++) |
243 | 4.52M | { |
244 | 4.52M | clientHelloMessage->getCipherSuite(i); |
245 | 4.52M | bool valid; |
246 | 4.52M | clientHelloMessage->getCipherSuiteID(i, valid); |
247 | 4.52M | } |
248 | 5.97k | if (auto ext = clientHelloMessage->getExtensionOfType<pcpp::SSLServerNameIndicationExtension>()) |
249 | 4.53k | ext->getHostName(); |
250 | 5.97k | if (auto ext = clientHelloMessage->getExtensionOfType<pcpp::SSLSupportedVersionsExtension>()) |
251 | 2.04k | ext->getSupportedVersions(); |
252 | | |
253 | 5.97k | clientHelloMessage->getExtensionOfType(pcpp::SSL_EXT_SERVER_NAME); |
254 | 5.97k | clientHelloMessage->getExtensionOfType((uint16_t)0); |
255 | | |
256 | 5.97k | auto fingerprint = clientHelloMessage->generateTLSFingerprint(); |
257 | 5.97k | fingerprint.toMD5(); |
258 | 5.97k | } |
259 | 13.8k | if (auto serverHelloMessage = handshakeLayer->getHandshakeMessageOfType<pcpp::SSLServerHelloMessage>()) |
260 | 3.81k | { |
261 | 3.81k | serverHelloMessage->getCompressionMethodsValue(); |
262 | 3.81k | serverHelloMessage->getSessionID(); |
263 | 3.81k | serverHelloMessage->getCipherSuite(); |
264 | | |
265 | 3.81k | serverHelloMessage->getExtensionOfType<pcpp::SSLServerNameIndicationExtension>(); |
266 | 3.81k | serverHelloMessage->getExtensionOfType(pcpp::SSL_EXT_SERVER_NAME); |
267 | 3.81k | serverHelloMessage->getExtensionOfType((uint16_t)0); |
268 | | |
269 | 3.81k | serverHelloMessage->getHandshakeVersion(); |
270 | 3.81k | auto fingerprint = serverHelloMessage->generateTLSFingerprint(); |
271 | 3.81k | fingerprint.toMD5(); |
272 | 3.81k | } |
273 | 13.8k | if (auto handshakeMessage = handshakeLayer->getHandshakeMessageOfType<pcpp::SSLHandshakeMessage>()) |
274 | 13.8k | { |
275 | 13.8k | handshakeMessage->isMessageComplete(); |
276 | 13.8k | } |
277 | 13.8k | } |
278 | 201k | } |
279 | 1.06M | if (parsedPacket.isPacketOfType(pcpp::NTP)) |
280 | 11.1k | { |
281 | 11.1k | if (auto ntpLayer = dynamic_cast<pcpp::NtpLayer*>(layer)) |
282 | 2.25k | { |
283 | 2.25k | ntpLayer->getLeapIndicator(); |
284 | 2.25k | ntpLayer->getMode(); |
285 | 2.25k | ntpLayer->getModeString(); |
286 | 2.25k | ntpLayer->getStratum(); |
287 | 2.25k | ntpLayer->getPollInterval(); |
288 | 2.25k | ntpLayer->getPrecision(); |
289 | 2.25k | ntpLayer->getRootDelay(); |
290 | 2.25k | ntpLayer->getRootDispersion(); |
291 | 2.25k | ntpLayer->getReferenceIdentifier(); |
292 | 2.25k | ntpLayer->getReferenceIdentifierString(); |
293 | 2.25k | ntpLayer->getReferenceTimestamp(); |
294 | 2.25k | ntpLayer->getOriginTimestamp(); |
295 | 2.25k | ntpLayer->getReceiveTimestamp(); |
296 | 2.25k | ntpLayer->getTransmitTimestamp(); |
297 | | |
298 | 2.25k | ntpLayer->getDigest(); |
299 | 2.25k | ntpLayer->getKeyID(); |
300 | | |
301 | 2.25k | ntpLayer->getPollIntervalInSecs(); |
302 | 2.25k | ntpLayer->getPrecisionInSecs(); |
303 | 2.25k | ntpLayer->getRootDelayInSecs(); |
304 | 2.25k | ntpLayer->getRootDispersionInSecs(); |
305 | 2.25k | ntpLayer->getReferenceTimestampInSecs(); |
306 | 2.25k | ntpLayer->getOriginTimestampInSecs(); |
307 | 2.25k | ntpLayer->getReceiveTimestampInSecs(); |
308 | 2.25k | ntpLayer->getTransmitTimestampInSecs(); |
309 | | |
310 | 2.25k | ntpLayer->getReferenceTimestampAsString(); |
311 | 2.25k | ntpLayer->getOriginTimestampAsString(); |
312 | 2.25k | ntpLayer->getReceiveTimestampAsString(); |
313 | 2.25k | ntpLayer->getTransmitTimestampAsString(); |
314 | | |
315 | 2.25k | auto ntpLayer2(*ntpLayer); |
316 | 2.25k | ntpLayer2.setRootDelayInSecs(0.1); |
317 | 2.25k | ntpLayer2.setReferenceTimestampInSecs(0.1); |
318 | 2.25k | } |
319 | 11.1k | } |
320 | 1.06M | if (parsedPacket.isPacketOfType(pcpp::ICMP)) |
321 | 18.2k | { |
322 | 18.2k | if (auto icmpLayer = dynamic_cast<pcpp::IcmpLayer*>(layer)) |
323 | 3.52k | { |
324 | 3.52k | auto icmpLayer2(*icmpLayer); |
325 | | |
326 | 3.52k | if (icmpLayer->isMessageOfType(pcpp::ICMP_TIMESTAMP_REPLY)) |
327 | 7 | { |
328 | 7 | icmpLayer->getTimestampReplyData(); |
329 | 7 | timeval orig = { 16131, 171000 }; |
330 | 7 | timeval recv = { 16133, 474000 }; |
331 | 7 | timeval tran = { 16133, 474000 }; |
332 | 7 | icmpLayer2.setTimestampReplyData(14640, 0, orig, recv, tran); |
333 | 7 | } |
334 | 3.51k | else if (icmpLayer->isMessageOfType(pcpp::ICMP_ADDRESS_MASK_REQUEST)) |
335 | 10 | { |
336 | 10 | icmpLayer->getAddressMaskRequestData(); |
337 | 10 | icmpLayer2.setAddressMaskRequestData(45068, 1536, pcpp::IPv4Address::Zero); |
338 | 10 | } |
339 | 3.50k | else if (icmpLayer->isMessageOfType(pcpp::ICMP_ADDRESS_MASK_REPLY)) |
340 | 155 | { |
341 | 155 | icmpLayer->getAddressMaskReplyData(); |
342 | 155 | icmpLayer2.setAddressMaskReplyData(45068, 1536, pcpp::IPv4Address::Zero); |
343 | 155 | } |
344 | 3.35k | else if (icmpLayer->isMessageOfType(pcpp::ICMP_DEST_UNREACHABLE)) |
345 | 608 | { |
346 | 608 | icmpLayer->getDestUnreachableData(); |
347 | 608 | icmpLayer2.setDestUnreachableData(pcpp::IcmpHostUnreachable, 0, nullptr, nullptr); |
348 | 608 | } |
349 | 2.74k | else if (icmpLayer->isMessageOfType(pcpp::ICMP_INFO_REPLY)) |
350 | 4 | { |
351 | 4 | auto layerData = icmpLayer->getInfoReplyData(); |
352 | 4 | icmpLayer2.setInfoReplyData(layerData->id, layerData->sequence); |
353 | 4 | } |
354 | 2.73k | else if (icmpLayer->isMessageOfType(pcpp::ICMP_INFO_REQUEST)) |
355 | 3 | { |
356 | 3 | auto layerData = icmpLayer->getInfoRequestData(); |
357 | 3 | icmpLayer2.setInfoRequestData(layerData->id, layerData->sequence); |
358 | 3 | } |
359 | 2.73k | else if (icmpLayer->isMessageOfType(pcpp::ICMP_PARAM_PROBLEM)) |
360 | 13 | { |
361 | 13 | auto layerData = icmpLayer->getParamProblemData(); |
362 | 13 | icmpLayer2.setParamProblemData(layerData->code, layerData->pointer, nullptr, nullptr); |
363 | 13 | } |
364 | 2.72k | else if (icmpLayer->isMessageOfType(pcpp::ICMP_TIME_EXCEEDED)) |
365 | 111 | { |
366 | 111 | icmpLayer->getTimeExceededData(); |
367 | 111 | icmpLayer2.setTimeExceededData(1, nullptr, nullptr); |
368 | 111 | } |
369 | 2.61k | else if (icmpLayer->isMessageOfType(pcpp::ICMP_ROUTER_ADV)) |
370 | 95 | { |
371 | 95 | icmpLayer->getRouterAdvertisementData(); |
372 | 95 | pcpp::icmp_router_address_structure addr1; |
373 | 95 | addr1.setRouterAddress(pcpp::IPv4Address("192.168.144.2"), (uint32_t)0x08000000); |
374 | 95 | std::vector<pcpp::icmp_router_address_structure> routerAddresses; |
375 | 95 | routerAddresses.push_back(addr1); |
376 | 95 | icmpLayer2.setRouterAdvertisementData(16, 200, routerAddresses); |
377 | 95 | } |
378 | 3.52k | } |
379 | 18.2k | } |
380 | 1.06M | if (parsedPacket.isPacketOfType(pcpp::DHCPv6)) |
381 | 4.31k | { |
382 | 4.31k | if (auto dhcpLayer = dynamic_cast<pcpp::DhcpV6Layer*>(layer)) |
383 | 1.00k | { |
384 | 1.00k | dhcpLayer->getTransactionID(); |
385 | 1.00k | if (dhcpLayer->getOptionCount() > 0) |
386 | 938 | { |
387 | 938 | pcpp::DhcpV6Option opt = dhcpLayer->getFirstOptionData(); |
388 | 938 | opt.getType(); |
389 | 938 | opt.getTotalSize(); |
390 | 938 | opt.getValueAsHexString(); |
391 | 5.33k | for (size_t i = 0; i < dhcpLayer->getOptionCount(); i++) |
392 | 4.39k | { |
393 | 4.39k | opt = dhcpLayer->getNextOptionData(opt); |
394 | 4.39k | } |
395 | 938 | dhcpLayer->getOptionData(pcpp::DHCPV6_OPT_CLIENTID); |
396 | 938 | } |
397 | 1.00k | } |
398 | 4.31k | } |
399 | 1.06M | if (parsedPacket.isPacketOfType(pcpp::DHCP)) |
400 | 15.4k | { |
401 | 15.4k | if (auto dhcpLayer = dynamic_cast<pcpp::DhcpLayer*>(layer)) |
402 | 3.30k | { |
403 | 3.30k | dhcpLayer->getOpCode(); |
404 | 3.30k | dhcpLayer->getDhcpHeader(); |
405 | 3.30k | dhcpLayer->getClientIpAddress(); |
406 | 3.30k | dhcpLayer->getYourIpAddress(); |
407 | 3.30k | dhcpLayer->getServerIpAddress(); |
408 | 3.30k | dhcpLayer->getGatewayIpAddress(); |
409 | 3.30k | dhcpLayer->getClientHardwareAddress(); |
410 | 3.30k | if (dhcpLayer->getOptionsCount() > 0) |
411 | 3.20k | { |
412 | 3.20k | pcpp::DhcpOption opt = dhcpLayer->getFirstOptionData(); |
413 | 3.20k | opt.getValueAsIpAddr(); |
414 | 3.20k | opt.getValueAsString(); |
415 | 258k | for (size_t i = 0; i < dhcpLayer->getOptionsCount(); i++) |
416 | 254k | { |
417 | 254k | opt = dhcpLayer->getNextOptionData(opt); |
418 | 254k | } |
419 | 3.20k | } |
420 | 3.30k | dhcpLayer->getOptionData(pcpp::DHCPOPT_SUBNET_MASK); |
421 | 3.30k | } |
422 | 15.4k | } |
423 | 1.06M | if (parsedPacket.isPacketOfType(pcpp::BGP)) |
424 | 26.1k | { |
425 | 26.1k | if (auto bgpLayer = dynamic_cast<pcpp::BgpLayer*>(layer)) |
426 | 6.43k | { |
427 | 6.43k | bgpLayer->getMessageTypeAsString(); |
428 | 6.43k | if (auto bgpOpenMsgLayer = dynamic_cast<pcpp::BgpOpenMessageLayer*>(bgpLayer)) |
429 | 529 | { |
430 | 529 | std::vector<pcpp::BgpOpenMessageLayer::optional_parameter> optionalParams; |
431 | 529 | bgpOpenMsgLayer->getOptionalParameters(optionalParams); |
432 | 529 | std::vector<pcpp::BgpOpenMessageLayer::optional_parameter> optionalParams2(optionalParams); |
433 | 529 | optionalParams2.push_back(pcpp::BgpOpenMessageLayer::optional_parameter(2, "010400010001")); |
434 | 529 | optionalParams2.push_back(pcpp::BgpOpenMessageLayer::optional_parameter(2, "8000")); |
435 | 529 | optionalParams2.push_back(pcpp::BgpOpenMessageLayer::optional_parameter(2, "0200")); |
436 | 529 | optionalParams2.push_back(pcpp::BgpOpenMessageLayer::optional_parameter(2, "4600")); |
437 | 529 | optionalParams2.push_back(pcpp::BgpOpenMessageLayer::optional_parameter(2, "410400000001")); |
438 | 529 | bgpOpenMsgLayer->setOptionalParameters(optionalParams2); |
439 | 529 | bgpOpenMsgLayer->clearOptionalParameters(); |
440 | 529 | bgpOpenMsgLayer->setOptionalParameters(optionalParams); |
441 | 529 | } |
442 | 5.90k | else if (auto bgpUpdateMsgLayer = dynamic_cast<pcpp::BgpUpdateMessageLayer*>(bgpLayer)) |
443 | 5.41k | { |
444 | 5.41k | std::vector<pcpp::BgpUpdateMessageLayer::prefix_and_ip> withdrawnRoutes; |
445 | 5.41k | bgpUpdateMsgLayer->getWithdrawnRoutes(withdrawnRoutes); |
446 | 5.41k | std::vector<pcpp::BgpUpdateMessageLayer::prefix_and_ip> withdrawnRoutes2(withdrawnRoutes); |
447 | 5.41k | withdrawnRoutes2.push_back(pcpp::BgpUpdateMessageLayer::prefix_and_ip(24, "40.1.1.0")); |
448 | 5.41k | withdrawnRoutes2.push_back(pcpp::BgpUpdateMessageLayer::prefix_and_ip(24, "40.40.40.0")); |
449 | 5.41k | withdrawnRoutes2.push_back(pcpp::BgpUpdateMessageLayer::prefix_and_ip(16, "103.103.0.0")); |
450 | 5.41k | withdrawnRoutes2.push_back(pcpp::BgpUpdateMessageLayer::prefix_and_ip(24, "103.103.40.0")); |
451 | 5.41k | bgpUpdateMsgLayer->setWithdrawnRoutes(withdrawnRoutes2); |
452 | 5.41k | bgpUpdateMsgLayer->clearWithdrawnRoutes(); |
453 | 5.41k | bgpUpdateMsgLayer->setWithdrawnRoutes(withdrawnRoutes); |
454 | | |
455 | 5.41k | std::vector<pcpp::BgpUpdateMessageLayer::prefix_and_ip> nlriVec; |
456 | 5.41k | bgpUpdateMsgLayer->getNetworkLayerReachabilityInfo(nlriVec); |
457 | 5.41k | std::vector<pcpp::BgpUpdateMessageLayer::prefix_and_ip> nlriVec2(nlriVec); |
458 | 5.41k | nlriVec2.push_back(pcpp::BgpUpdateMessageLayer::prefix_and_ip(24, "40.1.1.0")); |
459 | 5.41k | bgpUpdateMsgLayer->setNetworkLayerReachabilityInfo(nlriVec2); |
460 | 5.41k | bgpUpdateMsgLayer->clearNetworkLayerReachabilityInfo(); |
461 | 5.41k | bgpUpdateMsgLayer->setNetworkLayerReachabilityInfo(nlriVec); |
462 | | |
463 | 5.41k | std::vector<pcpp::BgpUpdateMessageLayer::path_attribute> pathAttributes; |
464 | 5.41k | bgpUpdateMsgLayer->getPathAttributes(pathAttributes); |
465 | 5.41k | std::vector<pcpp::BgpUpdateMessageLayer::path_attribute> pathAttributes2(pathAttributes); |
466 | 5.41k | pathAttributes2.push_back(pcpp::BgpUpdateMessageLayer::path_attribute(0x40, 1, "02")); |
467 | 5.41k | pathAttributes2.push_back( |
468 | 5.41k | pcpp::BgpUpdateMessageLayer::path_attribute(0x40, 2, "02030000000a0000001400000028")); |
469 | 5.41k | pathAttributes2.push_back(pcpp::BgpUpdateMessageLayer::path_attribute(0x40, 3, "1e031e03")); |
470 | 5.41k | bgpUpdateMsgLayer->setPathAttributes(pathAttributes2); |
471 | 5.41k | bgpUpdateMsgLayer->clearPathAttributes(); |
472 | 5.41k | bgpUpdateMsgLayer->setPathAttributes(pathAttributes); |
473 | 5.41k | } |
474 | 494 | else if (auto bgpNotificationMsgLayer = dynamic_cast<pcpp::BgpNotificationMessageLayer*>(bgpLayer)) |
475 | 78 | { |
476 | 78 | bgpNotificationMsgLayer->getNotificationDataAsHexString(); |
477 | 78 | } |
478 | 6.43k | } |
479 | 26.1k | } |
480 | 1.06M | if (parsedPacket.isPacketOfType(pcpp::DNS)) |
481 | 77.9k | { |
482 | 77.9k | if (auto dnsLayer = dynamic_cast<pcpp::DnsLayer*>(layer)) |
483 | 19.2k | { |
484 | 19.2k | dnsLayer->addQuery("mail-attachment.googleusercontent.com", pcpp::DNS_TYPE_A, pcpp::DNS_CLASS_IN); |
485 | 19.2k | dnsLayer->removeQuery("a", true); |
486 | 19.2k | dnsLayer->removeQuery("mail-attachment.googleusercontent.com", false); |
487 | 19.2k | pcpp::IPv4DnsResourceData ipv4DnsData(std::string("151.249.90.217")); |
488 | 19.2k | dnsLayer->addAnswer("assets.pinterest.com.cdngc.net", pcpp::DNS_TYPE_A, pcpp::DNS_CLASS_IN, 3, |
489 | 19.2k | &ipv4DnsData); |
490 | 19.2k | dnsLayer->removeAnswer("a", true); |
491 | 19.2k | dnsLayer->removeAnswer("assets.pinterest.com.cdngc.net", false); |
492 | 19.2k | dnsLayer->addAuthority("Yaels-iPhone.local", pcpp::DNS_TYPE_A, pcpp::DNS_CLASS_IN, 120, &ipv4DnsData); |
493 | 19.2k | dnsLayer->removeAuthority("a", true); |
494 | 19.2k | dnsLayer->removeAuthority("Yaels-iPhone.local", false); |
495 | 19.2k | pcpp::GenericDnsResourceData genericData("0004000800df581faa4f3f9d"); |
496 | 19.2k | dnsLayer->addAdditionalRecord("abc", pcpp::DNS_TYPE_OPT, 0xa005, 0x1194, &genericData); |
497 | 19.2k | dnsLayer->removeAdditionalRecord("a", true); |
498 | 19.2k | dnsLayer->removeAdditionalRecord("abc", false); |
499 | | |
500 | 19.2k | auto add = dnsLayer->getFirstAdditionalRecord(); |
501 | 21.5k | while (add != nullptr) |
502 | 2.27k | { |
503 | 2.27k | add = dnsLayer->getNextAdditionalRecord(add); |
504 | 2.27k | } |
505 | | |
506 | 19.2k | auto answer = dnsLayer->getFirstAnswer(); |
507 | 31.0k | while (answer != nullptr) |
508 | 11.7k | { |
509 | 11.7k | answer = dnsLayer->getNextAnswer(answer); |
510 | 11.7k | } |
511 | | |
512 | 19.2k | auto auth = dnsLayer->getFirstAuthority(); |
513 | 20.1k | while (auth != nullptr) |
514 | 940 | { |
515 | 940 | auth = dnsLayer->getNextAuthority(auth); |
516 | 940 | } |
517 | | |
518 | 19.2k | pcpp::DnsLayer other(*dnsLayer); |
519 | 19.2k | other = *dnsLayer; |
520 | 19.2k | } |
521 | 77.9k | } |
522 | 1.06M | } |