#!/usr/bin/env python # This file is part of Responder, a network take-over set of tools # created and maintained by Laurent Gaffie. # email: laurent.gaffie@gmail.com # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . import socket import struct import sys from utils import color, StructPython2or3, NetworkSendBufferPython2or3, NetworkRecvBufferPython2or3 from packets import SMBHeader, SMBNego, SMBNegoFingerData, SMBSessionFingerData def OsNameClientVersion(data): try: if (sys.version_info > (3, 0)): length = struct.unpack('i', str(Packet))+str(Packet) s.send(NetworkSendBufferPython2or3(Buffer1)) data = s.recv(2048) if data[8:10] == b'\x72\x00': Header = SMBHeader(cmd="\x73",flag1="\x18",flag2="\x17\xc8",uid="\x00\x00") Body = SMBSessionFingerData() Body.calculate() Packet = str(Header)+str(Body) Buffer1 = StructPython2or3('>i', str(Packet))+str(Packet) s.send(NetworkSendBufferPython2or3(Buffer1)) data = s.recv(2048) if data[8:10] == b'\x73\x16': return OsNameClientVersion(data) except: print(color("[!] ", 1, 1) +" Fingerprint failed") return None