Skip to content

Commit ba59d52

Browse files
committed
pnio_rpc: fix regressions from dce_rpc changes
Tests now pass.
1 parent 792a699 commit ba59d52

File tree

2 files changed

+23
-12
lines changed

2 files changed

+23
-12
lines changed

scapy/contrib/pnio_rpc.py

Lines changed: 19 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -22,16 +22,18 @@
2222
"""
2323

2424
import struct
25+
from uuid import UUID
26+
2527
from scapy.packet import Packet, bind_layers
2628
from scapy.config import conf
27-
from scapy.fields import BitField, ByteField, BitEnumField, \
29+
from scapy.fields import BitField, ByteField, BitEnumField, ConditionalField, \
2830
FieldLenField, FieldListField, IntField, IntEnumField, \
2931
LenField, MACField, PadField, PacketField, PacketListField, \
3032
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
3435
from scapy.compat import bytes_hex
36+
from scapy.volatile import RandUUID
3537

3638
# Block Packet
3739
BLOCK_TYPES_ENUM = {
@@ -275,14 +277,19 @@
275277
}
276278

277279

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.
280285
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"),
284291
"UUID_IO_ParameterServerInterface":
285-
"dea00004-6c97-11d1-8271-00a02442df7d",
292+
UUID("dea00004-6c97-11d1-8271-00a02442df7d"),
286293
}
287294

288295

@@ -963,7 +970,7 @@ def can_handle(cls, pkt, rpc):
963970
"""heuristical guess_payload_class"""
964971
# type = 0 => request
965972
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-"):
967974
return True
968975
return False
969976

@@ -995,7 +1002,7 @@ def can_handle(cls, pkt, rpc):
9951002
"""heuristical guess_payload_class"""
9961003
# type = 2 => response
9971004
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-"):
9991006
return True
10001007
return False
10011008

scapy/contrib/pnio_rpc.uts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,10 @@
55
from scapy.contrib.dce_rpc import *
66
from scapy.contrib.pnio_rpc import *
77

8+
= Check that we have UUIDs
9+
10+
for v in RPC_INTERFACE_UUID.values():
11+
assert(isinstance(v, UUID))
812

913
+ Check Block
1014

0 commit comments

Comments
 (0)