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