############
############
+ SMB

= test SMB Negociate Header - dissect

# OK test
rawpkt = b'\x45\x00\x00\x5b\x69\x10\x40\x00\x73\x06\xca\x85\x7a\xa0\x9a\xb6\xc0\xa8\xfe\x07\xeb\xec\x01\xbd\xaf\x97\x2e\xb7\x78\x60\x84\x6c\x50\x18\x40\x29\xd5\x36\x00\x00\x00\x00\x00\x2f\xff\x53\x4d\x42\x72\x00\x00\x00\x00\x18\x01\x48\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x20\x18\x00\x00\x00\x00\x00\x0c\x00\x02\x4e\x54\x20\x4c\x4d\x20\x30\x2e\x31\x32\x00'
pkt = IP(rawpkt)
# Check layers
assert TCP in pkt
assert NBTSession in pkt
assert pkt[NBTSession].LENGTH == 47
assert SMBNegociate_Protocol_Request_Header in pkt
smb = pkt[SMBNegociate_Protocol_Request_Header]
# Check header values
print(smb.show())
assert smb.Start == b'\xffSMB'
assert smb.Command == 0x72      # SMB_COM_NEGOCIATE

# KO test
rawpkt = b'\x45\x00\x00\x5b\x69\x10\x40\x00\x73\x06\xca\x85\x7a\xa0\x9a\xb6\xc0\xa8\xfe\x07\xeb\xec\x01\xbd\xaf\x97\x2e\xb7\x78\x60\x84\x6c\x50\x18\x40\x29\xd5\x36\x00\x00\x00\x00\x00\x2f\xf0\x53\x4d\x42\x72\x00\x00\x00\x00\x18\x01\x48\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x20\x18\x00\x00\x00\x00\x00\x0c\x00\x02\x4e\x54\x20\x4c\x4d\x20\x30\x2e\x31\x32\x00'
pkt = IP(rawpkt)
# Check layers
assert TCP in pkt
assert NBTSession in pkt
assert pkt[NBTSession].LENGTH == 47
assert SMBNegociate_Protocol_Request_Header_Generic in pkt
# Should not have a proper SMBNegociate header as magic is \xf0SMB, not \xffSMB
assert SMBNegociate_Protocol_Request_Header not in pkt


= test SMB Negociate Header - assemble

pkt = IP() / TCP() / NBTSession() / SMBNegociate_Protocol_Request_Header()
assert pkt[NBTSession].TYPE == 0x00         # session message
smb = pkt[SMBNegociate_Protocol_Request_Header]
assert smb.Start == b'\xffSMB'
