Skip to content

Commit 792a699

Browse files
committed
opc_da: Migrate from PUUID to UUIDField.
Tests still pass.
1 parent 8ca09bc commit 792a699

File tree

1 file changed

+13
-66
lines changed

1 file changed

+13
-66
lines changed

scapy/contrib/opc_da.py

Lines changed: 13 additions & 66 deletions
Original file line numberDiff line numberDiff line change
@@ -36,16 +36,13 @@
3636
Using the website: https://msdn.microsoft.com/en-us/library/cc226801.aspx
3737
"""
3838

39-
import uuid
40-
41-
from scapy.compat import plain_str
4239
from scapy.config import conf
4340
from scapy.fields import Field, ByteField, ShortField, LEShortField, \
4441
IntField, LEIntField, LongField, LELongField, StrField, StrLenField, \
4542
StrFixedLenField, BitEnumField, ByteEnumField, ShortEnumField, \
4643
LEShortEnumField, IntEnumField, LEIntEnumField, FieldLenField, \
4744
LEFieldLenField, PacketField, PacketListField, PacketLenField, \
48-
ConditionalField, FlagsField
45+
ConditionalField, FlagsField, UUIDField
4946
from scapy.packet import Packet
5047

5148
# Defined values
@@ -271,58 +268,6 @@ def extract_padding(self, p):
271268
return b"", p
272269

273270

274-
class PUUID(Field):
275-
__slots__ = ["endianType"]
276-
277-
def __init__(self, name, default, endianType):
278-
_repr = {0: 'bigEndian', 1: 'littleEndian'}
279-
Field.__init__(self, name, default, "16s")
280-
self.endianType = _repr[endianType]
281-
282-
def h2i(self, pkt, x):
283-
""" Description: transform a string uuid in uuid type object """
284-
self.default = uuid.UUID(plain_str(x or ""))
285-
return self.default
286-
287-
def i2h(self, pkt, x):
288-
""" Description: transform a type uuid object in string uuid """
289-
x = str(self.default)
290-
return x
291-
292-
def m2i(self, pkt, x):
293-
""" Description: transform a byte string uuid in uuid type object """
294-
if self.endianType == 'bigEndian':
295-
self.default = uuid.UUID(bytes=x)
296-
elif self.endianType == 'littleEndian':
297-
self.default = uuid.UUID(bytes_le=x)
298-
return self.default
299-
300-
def i2m(self, pkt, x):
301-
""" Description: transform a uuid type object in a byte string """
302-
if self.endianType == 'bigEndian':
303-
x = self.default.bytes
304-
elif self.endianType == 'littleEndian':
305-
x = self.default.bytes_le
306-
return x
307-
308-
def i2repr(self, pkt, x):
309-
return str(self.default)
310-
311-
def getfield(self, pkt, s):
312-
""" Extract an internal value from a string """
313-
self.default = self.m2i(pkt, s[:self.sz])
314-
return s[self.sz:], self.default
315-
316-
def addfield(self, pkt, s, val):
317-
""" Add an internal value to a string """
318-
return s + self.i2m(pkt, val)
319-
320-
def any2i(self, pkt, x):
321-
""" Try to understand the most input values possible and make an
322-
internal value from them """
323-
return self.h2i(pkt, x)
324-
325-
326271
class LenStringPacket(Packet):
327272
name = "len string packet"
328273
fields_desc = [
@@ -358,7 +303,8 @@ def extract_padding(self, p):
358303
class SyntaxId(Packet):
359304
name = "syntax Id"
360305
fields_desc = [
361-
PUUID('interfaceUUID', str('0001' * 8), 0),
306+
UUIDField('interfaceUUID', str('0001' * 8),
307+
uuid_fmt=UUIDField.FORMAT_BE),
362308
ShortField('versionMajor', 0),
363309
ShortField('versionMinor', 0),
364310
]
@@ -370,7 +316,8 @@ def extract_padding(self, p):
370316
class SyntaxIdLE(Packet):
371317
name = "syntax Id"
372318
fields_desc = [
373-
PUUID('interfaceUUID', str('0001' * 8), 1),
319+
UUIDField('interfaceUUID', str('0001' * 8),
320+
uuid_fmt=UUIDField.FORMAT_LE),
374321
LEShortField('versionMajor', 0),
375322
LEShortField('versionMinor', 0),
376323
]
@@ -471,7 +418,7 @@ class STDOBJREF(Packet):
471418
LEIntField('cPublicRefs', 0),
472419
LELongField('OXID', 0),
473420
LELongField('OID', 0),
474-
PacketField('IPID', None, PUUID),
421+
PacketField('IPID', None, UUIDField),
475422
]
476423

477424

@@ -524,7 +471,7 @@ class OBJREF_HANDLER(Packet):
524471
name = "objetref stanDard"
525472
fields_desc = [
526473
PacketField('std', None, STDOBJREF),
527-
PUUID('clsid', str('0001' * 8), 0),
474+
UUIDField('clsid', str('0001' * 8), uuid_fmt=UUIDField.FORMAT_BE),
528475
PacketField('saResAddr', None, DualStringArray),
529476
]
530477

@@ -533,15 +480,15 @@ class OBJREF_HANDLERLE(Packet):
533480
name = "objetref stanDard"
534481
fields_desc = [
535482
PacketField('std', None, STDOBJREF),
536-
PUUID('clsid', str('0001' * 8), 1),
483+
UUIDField('clsid', str('0001' * 8), uuid_fmt=UUIDField.FORMAT_LE),
537484
PacketField('saResAddr', None, DualStringArrayLE),
538485
]
539486

540487

541488
class OBJREF_CUSTOM(Packet):
542489
name = "objetref stanDard"
543490
fields_desc = [
544-
PUUID('clsid', str('0001' * 8), 0),
491+
UUIDField('clsid', str('0001' * 8), uuid_fmt=UUIDField.FORMAT_BE),
545492
IntField('cbExtension', 0),
546493
IntField('reserved', 0),
547494
]
@@ -550,7 +497,7 @@ class OBJREF_CUSTOM(Packet):
550497
class OBJREF_CUSTOMLE(Packet):
551498
name = "objetref stanDard"
552499
fields_desc = [
553-
PUUID('clsid', str('0001' * 8), 1),
500+
UUIDField('clsid', str('0001' * 8), uuid_fmt=UUIDField.FORMAT_LE),
554501
LEIntField('cbExtension', 0),
555502
LEIntField('reserved', 0),
556503
]
@@ -946,7 +893,7 @@ class RequestSubDataLE(Packet):
946893
LEShortField('versionMinor', 0),
947894
LEIntField('flags', 0),
948895
LEIntField('reserved', 0),
949-
PUUID('subUuid', str('0001' * 8), 1),
896+
UUIDField('subUuid', str('0001' * 8), uuid_fmt=UUIDField.FORMAT_LE),
950897
StrField('subdata', ''),
951898
]
952899

@@ -960,7 +907,7 @@ class OpcDaRequest(Packet):
960907
IntField('allocHint', 0),
961908
ShortField('contextId', 0),
962909
ShortField('opNum', 0),
963-
PUUID('uuid', str('0001' * 8), 0),
910+
UUIDField('uuid', str('0001' * 8), uuid_fmt=UUIDField.FORMAT_BE),
964911
PacketLenField('subData', None, RequestSubData,
965912
length_from=lambda pkt:pkt.allocHint),
966913
PacketField('authentication', None, AuthentificationProtocol),
@@ -976,7 +923,7 @@ class OpcDaRequestLE(Packet):
976923
LEIntField('allocHint', 0),
977924
LEShortField('contextId', 0),
978925
LEShortField('opNum', 0),
979-
PUUID('uuid', str('0001' * 8), 1),
926+
UUIDField('uuid', str('0001' * 8), uuid_fmt=UUIDField.FORMAT_LE),
980927
PacketLenField('subData', None, RequestSubDataLE,
981928
length_from=lambda pkt:pkt.allocHint),
982929
PacketField('authentication', None, AuthentificationProtocol),

0 commit comments

Comments
 (0)