| 8 | |
| 9 | |
| 10 | class SMB2Message: |
| 11 | |
| 12 | HEADER_STRUCT_FORMAT = "<4sHHIHHI" # This refers to the common header part that is shared by both sync and async SMB2 header |
| 13 | HEADER_STRUCT_SIZE = struct.calcsize(HEADER_STRUCT_FORMAT) |
| 14 | |
| 15 | ASYNC_HEADER_STRUCT_FORMAT = "<IQQQ16s" |
| 16 | ASYNC_HEADER_STRUCT_SIZE = struct.calcsize(ASYNC_HEADER_STRUCT_FORMAT) |
| 17 | |
| 18 | SYNC_HEADER_STRUCT_FORMAT = "<IQIIQ16s" |
| 19 | SYNC_HEADER_STRUCT_SIZE = struct.calcsize(SYNC_HEADER_STRUCT_FORMAT) |
| 20 | |
| 21 | HEADER_SIZE = 64 |
| 22 | |
| 23 | log = logging.getLogger('SMB.SMB2Message') |
| 24 | protocol = 2 |
| 25 | |
| 26 | def __init__(self, payload = None): |
| 27 | self.reset() |
| 28 | if payload: |
| 29 | self.payload = payload |
| 30 | self.payload.initMessage(self) |
| 31 | |
| 32 | def __str__(self): |
| 33 | b = StringIO() |
| 34 | b.write('Command: 0x%02X (%s) %s' % ( self.command, SMB2_COMMAND_NAMES.get(self.command, '<unknown>'), os.linesep )) |
| 35 | b.write('Status: 0x%08X %s' % ( self.status, os.linesep )) |
| 36 | b.write('Flags: 0x%02X %s' % ( self.flags, os.linesep )) |
| 37 | b.write('PID: %d %s' % ( self.pid, os.linesep )) |
| 38 | b.write('MID: %d %s' % ( self.mid, os.linesep )) |
| 39 | b.write('TID: %d %s' % ( self.tid, os.linesep )) |
| 40 | b.write('Data: %d bytes %s%s %s' % ( len(self.data), os.linesep, str(binascii.hexlify(self.data)), os.linesep )) |
| 41 | return b.getvalue() |
| 42 | |
| 43 | def reset(self): |
| 44 | self.raw_data = b'' |
| 45 | self.command = 0 |
| 46 | self.status = 0 |
| 47 | self.flags = 0 |
| 48 | |
| 49 | self.next_command_offset = 0 |
| 50 | self.mid = 0 |
| 51 | self.session_id = 0 |
| 52 | self.signature = b'\0'*16 |
| 53 | self.payload = None |
| 54 | self.data = b'' |
| 55 | |
| 56 | # For async SMB2 message |
| 57 | self.async_id = 0 |
| 58 | |
| 59 | # For sync SMB2 message |
| 60 | self.pid = 0 |
| 61 | self.tid = 0 |
| 62 | |
| 63 | # Not used in this class. Maintained for compatibility with SMBMessage class |
| 64 | self.flags2 = 0 |
| 65 | self.uid = 0 |
| 66 | self.security = 0 |
| 67 | self.parameters_data = b'' |
no outgoing calls
no test coverage detected