import random, struct from socket import * from time import sleep from odict import OrderedDict def longueur(payload): length = struct.pack(">i", len(''.join(payload))) return length class Packet(): fields = OrderedDict([ ]) 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", "\x00"), ("flag2", "\x00\x00"), ("pidhigh", "\x00\x00"), ("signature", "\x00\x00\x00\x00\x00\x00\x00\x00"), ("reserved", "\x00\x00"), ("tid", "\x00\x00"), ("pid", "\x00\x00"), ("uid", "\x00\x00"), ("mid", "\x00\x00"), ]) class SMBNego(Packet): fields = OrderedDict([ ("Wordcount", "\x00"), ("Bcc", "\x62\x00"), ("Data", "") ]) def calculate(self): self.fields["Bcc"] = struct.pack("