|
22 | 22 | """ |
23 | 23 |
|
24 | 24 | import struct |
| 25 | +from uuid import UUID |
| 26 | + |
25 | 27 | from scapy.packet import Packet, bind_layers |
26 | 28 | from scapy.config import conf |
27 | | -from scapy.fields import BitField, ByteField, BitEnumField, \ |
| 29 | +from scapy.fields import BitField, ByteField, BitEnumField, ConditionalField, \ |
28 | 30 | FieldLenField, FieldListField, IntField, IntEnumField, \ |
29 | 31 | LenField, MACField, PadField, PacketField, PacketListField, \ |
30 | 32 | ShortEnumField, ShortField, StrFixedLenField, StrLenField, \ |
31 | | - XByteField, XIntField, XShortEnumField, XShortField, ConditionalField |
32 | | -from scapy.contrib.dce_rpc import DceRpc, EndiannessField, DceRpcPayload, \ |
33 | | - UUIDField, RandUUID |
| 33 | + UUIDField, XByteField, XIntField, XShortEnumField, XShortField |
| 34 | +from scapy.contrib.dce_rpc import DceRpc, EndiannessField, DceRpcPayload |
34 | 35 | from scapy.compat import bytes_hex |
| 36 | +from scapy.volatile import RandUUID |
35 | 37 |
|
36 | 38 | # Block Packet |
37 | 39 | BLOCK_TYPES_ENUM = { |
|
275 | 277 | } |
276 | 278 |
|
277 | 279 |
|
278 | | -# List of all valid activity uuid for the DceRpc |
279 | | -# layer with PROFINET RPC endpoint |
| 280 | +# List of all valid activity UUIDs for the DceRpc layer with PROFINET RPC |
| 281 | +# endpoint. |
| 282 | +# |
| 283 | +# Because these are used in overloaded_fields, it must be a ``UUID``, not a |
| 284 | +# string. |
280 | 285 | RPC_INTERFACE_UUID = { |
281 | | - "UUID_IO_DeviceInterface": "dea00001-6c97-11d1-8271-00a02442df7d", |
282 | | - "UUID_IO_ControllerInterface": "dea00002-6c97-11d1-8271-00a02442df7d", |
283 | | - "UUID_IO_SupervisorInterface": "dea00003-6c97-11d1-8271-00a02442df7d", |
| 286 | + "UUID_IO_DeviceInterface": UUID("dea00001-6c97-11d1-8271-00a02442df7d"), |
| 287 | + "UUID_IO_ControllerInterface": |
| 288 | + UUID("dea00002-6c97-11d1-8271-00a02442df7d"), |
| 289 | + "UUID_IO_SupervisorInterface": |
| 290 | + UUID("dea00003-6c97-11d1-8271-00a02442df7d"), |
284 | 291 | "UUID_IO_ParameterServerInterface": |
285 | | - "dea00004-6c97-11d1-8271-00a02442df7d", |
| 292 | + UUID("dea00004-6c97-11d1-8271-00a02442df7d"), |
286 | 293 | } |
287 | 294 |
|
288 | 295 |
|
@@ -963,7 +970,7 @@ def can_handle(cls, pkt, rpc): |
963 | 970 | """heuristical guess_payload_class""" |
964 | 971 | # type = 0 => request |
965 | 972 | if rpc.getfieldval("type") == 0 and \ |
966 | | - rpc.object_uuid.startswith("dea00000-6c97-11d1-8271-"): |
| 973 | + str(rpc.object_uuid).startswith("dea00000-6c97-11d1-8271-"): |
967 | 974 | return True |
968 | 975 | return False |
969 | 976 |
|
@@ -995,7 +1002,7 @@ def can_handle(cls, pkt, rpc): |
995 | 1002 | """heuristical guess_payload_class""" |
996 | 1003 | # type = 2 => response |
997 | 1004 | if rpc.getfieldval("type") == 2 and \ |
998 | | - rpc.object_uuid.startswith("dea00000-6c97-11d1-8271-"): |
| 1005 | + str(rpc.object_uuid).startswith("dea00000-6c97-11d1-8271-"): |
999 | 1006 | return True |
1000 | 1007 | return False |
1001 | 1008 |
|
|
0 commit comments