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