import struct from odict import OrderedDict def longueur(payload): length = struct.pack(">i", len(''.join(payload))) return length class Packet(): fields = OrderedDict([ ("data", ""), ]) def __init__(self, **kw): self.fields = OrderedDict(self.__class__.fields) for k,v in kw.items(): if callable(v): self.fields[k] = v(self.fields[k]) else: self.fields[k] = v def __str__(self): return "".join(map(str, self.fields.values())) class SMBHeader(Packet): fields = OrderedDict([ ("proto", "\xff\x53\x4d\x42"), ("cmd", "\x72"), ("error-code", "\x00\x00\x00\x00" ), ("flag1", "\x08"), ("flag2", "\x01\x00"), ("pidhigh", "\x00\x00"), ("signature", "\x00\x00\x00\x00\x00\x00\x00\x00"), ("reserved", "\x00\x00"), ("tid", "\x00\x00"), ("pid", "\x3c\x1b"), ("uid", "\x00\x00"), ("mid", "\x00\x00"), ]) class SMBNegoData(Packet): fields = OrderedDict([ ("wordcount", "\x00"), ("bcc", "\x54\x00"), ("separator1","\x02" ), ("dialect1", "\x50\x43\x20\x4e\x45\x54\x57\x4f\x52\x4b\x20\x50\x52\x4f\x47\x52\x41\x4d\x20\x31\x2e\x30\x00"), ("separator2","\x02"), ("dialect2", "\x4c\x41\x4e\x4d\x41\x4e\x31\x2e\x30\x00"), ]) def calculate(self): CalculateBCC = str(self.fields["separator1"])+str(self.fields["dialect1"])+str(self.fields["separator2"])+str(self.fields["dialect2"]) self.fields["bcc"] = struct.pack("