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