import socket
import struct
import sys

def scan(ip):
    try:
        pkt = b'\x00\x00\x00\xc0\xfeSMB@\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00$\x00\x08\x00\x01\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00x\x00\x00\x00\x02\x00\x00\x00\x02\x02\x10\x02"\x02$\x02\x00\x03\x02\x03\x10\x03\x11\x03\x00\x00\x00\x00\x01\x00&\x00\x00\x00\x00\x00\x01\x00 \x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03\x00\n\x00\x00\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00'
        sock = socket.socket(socket.AF_INET)
        sock.settimeout(3)
        sock.connect((ip,445))
        sock.send(pkt)

        nb, = struct.unpack(">I", sock.recv(4))
        res = sock.recv(nb)

        if res[68:70] != b"\x11\x03" or res[70:72] != b"\x02\x00":
            print("[-] Not Vulnerable:%s"%(ip))
        else:
            print ("[+] Vulnerable:%s"%(ip))
    except Exception as err:
        print("[!] %s:%s"%(ip,err))
    finally:
        sock.close()
            

if __name__ == '__main__':
    if len(sys.argv)!=2:
        print("[!] Wrong parameter")
        print("Usage:")
        print("%s <ip>"%(sys.argv[0]))
        sys.exit(0)
    else:
        scan(sys.argv[1])
