Convert packet payload to _PacketInfo object :param payload: packet payload :type payload: :param payload_field: packet fieldname of payload "load" for :type payload_field: str :r
(payload, payload_field="load")
| 359 | |
| 360 | @staticmethod |
| 361 | def payload_to_info(payload, payload_field="load"): |
| 362 | """ |
| 363 | Convert packet payload to _PacketInfo object |
| 364 | |
| 365 | :param payload: packet payload |
| 366 | :type payload: <class 'scapy.packet.Raw'> |
| 367 | :param payload_field: packet fieldname of payload "load" for |
| 368 | <class 'scapy.packet.Raw'> |
| 369 | :type payload_field: str |
| 370 | :returns: _PacketInfo object containing de-serialized data from payload |
| 371 | |
| 372 | """ |
| 373 | |
| 374 | # retrieve payload, currently 18 bytes (4 x ints + 1 short) |
| 375 | payload_b = getattr(payload, payload_field)[:18] |
| 376 | |
| 377 | info = _PacketInfo() |
| 378 | info.index, info.src, info.dst, info.ip, info.proto = unpack("iiiih", payload_b) |
| 379 | |
| 380 | # some SRv6 TCs depend on get an exception if bad values are detected |
| 381 | if info.index > 0x4000: |
| 382 | raise ValueError("Index value is invalid") |
| 383 | |
| 384 | return info |
| 385 | |
| 386 | def get_next_packet_info(self, info): |
| 387 | """ |