Beispiel #1
0
def get_server_name_ip(server):
    if re.compile("^\d+.\d+.\d+.\d+$").findall(server) or re.compile("^([^\.]+\.(?:[^\.]+\.)?(?:\w+)?)$").findall(server):
        server_ip = server
        server_name = None
    else:
        server_ip = None
        server_name = server.upper()

    if not server_ip: server_ip = NetBIOS().queryName(server_name)[0]
    if not server_name: server_name = NetBIOS().queryIPForName(server_ip)[0]

    return server_name, server_ip
Beispiel #2
0
def get_server_name_ip(server):
    import re
    if re.compile("^\d+.\d+.\d+.\d+$").findall(server):
        server_ip = server
        server_name = None
    else:
        server_ip = None
        server_name = server.upper()

    if not server_ip: server_ip = NetBIOS().queryName(server_name)[0]
    if not server_name: server_name = NetBIOS().queryIPForName(server_ip)[0]

    return server_name, server_ip
Beispiel #3
0
def dowload_latest_image(sysConf):
    serverIP = sysConf.imgServer['IP']
    netbios = NetBIOS()
    serverName = netbios.queryIPForName(serverIP)
    conn = SMBConnection(sysConf.imgServer['USER'],
                         sysConf.imgServer['PASSWORD'],
                         my_name="BMC_Tester",
                         remote_name=serverName[0],
                         domain="COMPAL")
    if (False == conn.connect(serverIP)):
        return None
    platformImage = "BMC/Daily_Build/" + sysConf.platform
    path = conn.listPath(sysConf.imgServer['ROOT'], platformImage)
    sortedFile = sorted(path, key=attrgetter('create_time'))
    lastFile = sortedFile[len(sortedFile) - 1]
    imagePath = os.getcwd() + "/download"

    if not os.path.exists(imagePath):
        os.mkdir(imagePath)

    image = open(imagePath + "/" + lastFile.filename, "wb")
    print("\tDownloading %s to %s ....." %
          (lastFile.filename, imagePath + "/" + lastFile.filename))
    conn.retrieveFile(sysConf.imgServer['ROOT'],
                      platformImage + "/" + lastFile.filename, image)
    image.close()
    return lastFile.filename
Beispiel #4
0
    def _test_connectivity(self, param):

        config = self.get_config()

        ip = config['ip']
        port = int(param.get('port', 137))
        timeout = int(param.get('timeout', 30))

        action_result = ActionResult(dict(param))
        self.add_action_result(action_result)

        self.save_progress("Looking up IP : {0} to test connectivity".format(ip))
        nb = NetBIOS()
        hosts = nb.queryIPForName(ip, port, timeout)
        if hosts is None:
            self.save_progress("Request timed out")
            self.save_progress("Test Connectivity Failed")
            return action_result.set_status(phantom.APP_ERROR)

        if hosts:
            self.save_progress("Got {0} hosts".format(len(hosts)))
            self.save_progress("Test Connectivity Passed")
            return action_result.set_status(phantom.APP_SUCCESS)

        self.save_progress("Lookup did not return any results, but connectivity passed")

        return action_result.set_status(phantom.APP_SUCCESS)
Beispiel #5
0
def get_server_name_ip(server):
    if re.compile("^\d+.\d+.\d+.\d+$").findall(server) or re.compile("^([^\.]+\.(?:[^\.]+\.)?(?:\w+)?)$").findall(server):
        server_ip = server
        server_name = None
    else:
        server_ip = None
        server_name = server.upper()

    if not server_ip: server_ip = NetBIOS(broadcast=False).queryName(server_name, timeout=5)
    if isinstance(server_ip, (list, tuple)) and len(server_ip) > 0: server_ip = server_ip[0]
    if not server_ip: server_ip = ''
    if not server_name: server_name = NetBIOS(broadcast=False).queryIPForName(server_ip, timeout=5)
    if isinstance(server_name, (list, tuple)) and len(server_name) > 0: server_name = server_name[0]
    if not server_name: server_name = ''

    return server_name, server_ip
Beispiel #6
0
 def run(self):
     print "Starting thread for " + self.ip
     net = NetBIOS()
     net_name = str(net.queryIPForName(self.ip)).strip("['").strip("']")
     net.close()
     conn = SMBConnection(self.user,
                          self.pwd,
                          'cobwebs',
                          net_name,
                          domain=self.domain,
                          use_ntlm_v2=False)
     if conn.connect(self.ip, port=139, timeout=10):
         print(
             "Connecting to %s was successful! How about a nice game of spidering %s%s?"
             % (self.ip, self.share, self.subfolder))
     else:
         print("Connection error: %s" % (self.ip))
     if self.recursive > 0:
         recurse(conn, self.ip, self.share, self.subfolder, self.pattern,
                 int(self.recursive))
     else:
         filelist = conn.listPath(self.share, self.subfolder)
         dir_list(filelist, self.ip, self.subfolder, self.pattern)
     conn.close()
     print "Exiting thread for " + self.ip
Beispiel #7
0
    def performTest(self):
        if(not self.smb):
            randomUser = ''.join(random.choice(string.ascii_lowercase) for _ in range(12))
            randomPass = ''.join(random.choice(string.ascii_lowercase) for _ in range(12))
            print("%sPerforming test request to benchmark failed attempt...%s" % (Y,W))

            if(not self.ntlm):
                self.test_response = self.performRequest(randomUser, randomPass)
            else:
                self.test_response = self.performNTLMRequest(randomUser, randomPass)

            self.test_hexDigest = self.getHashFromResponse(self.test_response)

            if(self.test_response.status_code == 400):
                print("%sTest request returned status code " % (R) + str(self.test_response.status_code) + "%s" % (W))
                if(input("Are you sure you want to continue? (y/N) ") != 'y'):
                    sys.exit("Unsatisfactory HTTP response code.")
            else:
                print("%sTest request did not return 400, moving on.%s\n" % (G,W))
        else:
            print("%sAttempting to reach machine for SMB login...%s" % (Y,W))
            n = NetBIOS()
            ip = n.queryIPForName(self.ip)
            s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
            try:
                s.connect((self.ip, 445))
                s.shutdown(2)
                print("%sMachine is available on port 445, moving on.%s\n" % (G,W))
            except:
                print("%sCan't reach machine on port 445" % (R) + str(self.test_response.status_code) + "%s" % (W))
                if(input("Are you sure you want to continue? (y/N) ") != 'y'):
                    sys.exit("Double check IP and port 445 open.")
                return False
Beispiel #8
0
    def authenticate(self):

        from smb.SMBConnection import SMBConnection

        # There will be some mechanism to capture userID, password, client_machine_name, server_name and server_ip
        # client_machine_name can be an arbitary ASCII string
        # server_name should match the remote machine name, or else the connection will be rejected

        #userID = 'xatportantier'
        userID = 'guest'
        #password = '******'
        password = ''
        client_machine_name = 'fmp'
        server_ip = '192.1.3.120'
        server_name = 'Server72'
        server_name = ''

        from nmb.NetBIOS import NetBIOS

        nb = NetBIOS(broadcast=True, listen_port=0)
        #print('ip', nb.queryName(server_name, port=445))
        #print('name', nb.queryIPForName(server_ip))


        conn = SMBConnection(userID, password, client_machine_name, server_name, use_ntlm_v2=True, is_direct_tcp=False)
        from pprint import pprint
        for a in [ 'capabilities', 'domain', 'host_type', 'log', 'my_name', 'remote_name', 'security_mode', 'uid', 'username' ]:
            print(a, getattr(conn, a))
        #print('cap', conn.capabilities)
        #print('domain', conn.domain)

        print('auth', conn.connect(server_ip, 139))
Beispiel #9
0
    def connect(self):
        inventory = Inventory()
        address = self.hostname
        if inventory.has_option(self.hostname, 'address'):
            address = inventory.get(self.hostname, 'address')

        ip = None
        nb_name = None
        try:
            socket.inet_aton(address)
            ip = address
        except OSError as e:
            nb_name = address

        nb = NetBIOS()
        if ip is not None and nb_name is None:
            # need to look up the hostname
            logger.debug('Looking up NetBIOS name from IP ' + ip)
            nb_names = nb.queryIPForName(ip)
            if nb_names is None or len(nb_names) < 1:
                raise RuntimeError('Cannot connect to host ' + self.hostname +
                                   '; looking up NetBIOS name failed')
            nb_name = nb_names[0]
        elif ip is None and nb_name is not None:
            # not a IPv4 address, need to look up the ip
            nb_name = address
            logger.debug('Looking up NetBIOS IP from name ' + nb_name)
            ips = nb.queryName(nb_name)
            if ips is None or len(ips) < 1:
                raise RuntimeError('Cannot connect to host ' + self.hostname +
                                   '; looking up NetBIOS IP failed')
            ip = ips[0]
        nb.close()

        if inventory.has_option(self.hostname,
                                'username') and inventory.has_option(
                                    self.hostname, 'password'):
            username = inventory.get(self.hostname, 'username')
            password = inventory.get(self.hostname, 'password')
            client_machine_name = ''.join(
                random.choice(string.ascii_letters + string.digits)
                for _ in range(15))
            logger.debug('Using client name of ' + client_machine_name)
            logger.info('Connecting to ' + nb_name + ' as ' + username +
                        ' for host ' + self.hostname)
            self.connection = SMBHost(username,
                                      password,
                                      client_machine_name,
                                      nb_name,
                                      use_ntlm_v2=True,
                                      sign_options=SMBHost.SIGN_WHEN_SUPPORTED
                                      )  #, is_direct_tcp=True)
            if not self.connection.connect(ip):
                raise RuntimeError('Cannot connect to host ' + self.hostname +
                                   '; connecting via SMB failed')
        else:
            raise RuntimeError('No method of authenticating with host ' +
                               self.hostname + ' found')

        print(str(self.connection.listPath('ADMIN$', '\\')))
Beispiel #10
0
def getServerName(IP):
    try:
        server = NetBIOS()
        servername = server.queryIPForName(IP)
        return servername[0]
    except:
        print(Fore.RED+"You need to porvide the remote computer or server name")
        exit(0)
Beispiel #11
0
def ip2hostname(ip):
    nb = NetBIOS(broadcast=True, listen_port=0)
    try:
        hostname = nb.queryIPForName(str(ip), port=137, timeout=10)
        hostname = hostname[0]
    except:
        print 'hostname get fail please use -n'
        exit(0)
    return str(hostname)
Beispiel #12
0
def get_netbios_name(remote_addr):
    nb = NetBIOS()
    names = nb.queryIPForName(remote_addr)
    nb.close()
    if len(names) == 0:
        raise NameError('No NetBIOS name found for {}'.format(remote_addr))
    elif len(names) > 1:
        logging.warn('More than one NetBIOS name for {}'.format(remote_addr))
    return names[0]
Beispiel #13
0
def get_netbios_name(remote_addr, timeout=DEFAULT_TIMEOUT):
    nb = NetBIOS()
    names = nb.queryIPForName(remote_addr, timeout=timeout)
    nb.close()
    if names is None or len(names) == 0:
        raise NameError('No NetBIOS name found for {}'.format(remote_addr))
    elif len(names) > 1:
        logging.warn('More than one NetBIOS name for {}'.format(remote_addr))
    return names[0]
Beispiel #14
0
def getBIOSName(timeout=30):
    try:
        bios = NetBIOS()
        srv_name = bios.queryIPForName('172.25.73.100', timeout=timeout)
    except:
        print("Looking up timeout, check remote_smb_ip again!!", sys.stderr)
    finally:
        bios.close()
        return srv_name
Beispiel #15
0
def getBIOSName(remote_smb_ip, timeout=30):
    try:
        bios = NetBIOS()
        srv_name = bios.queryIPForName(remote_smb_ip, timeout=timeout)
    except:
        print(sys.stderr, "Looking up timeout, check remote_smb_ip again!!")
    finally:
        bios.close()
        return srv_name
Beispiel #16
0
def getBIOSName(remote_smb_ip, timeout=5):
    try:
        bios = NetBIOS()
        srv_name = bios.queryIPForName(remote_smb_ip, timeout=timeout)
    except:
        print 'getBIOSName: timeout too short?'
    finally:
        bios.close()
        #print 'bios name = ' + srv_name[0]
        return srv_name[0]
Beispiel #17
0
 def getServerName(self, remote_smb_ip, timeout=30):
     bios = NetBIOS()
     srv_name = None
     try:
         srv_name = bios.queryIPForName(remote_smb_ip, timeout=timeout)
     except:
         log.err(
             "Couldn't find SMB server name, check remote_smb_ip again!!")
     finally:
         bios.close()
         return srv_name
Beispiel #18
0
def reverse_host(host, timeout=1, save=True):
    n = NetBIOS()
    try:
        host.hostname = n.queryIPForName(host.ip_address, timeout=timeout)[0]
    except:
        pass
    n.close()
    host.reverse_latest_time = timezone.datetime.now()
    if save:
        host.save()
    return host
Beispiel #19
0
def get_netbios_name(hostname):
    if hostname in ["127.0.0.1", "localhost"]:
        return "localhost"
    n = NetBIOS()
    resp = n.queryIPForName(hostname)
    if resp:
        return resp[0]
    else:
        # Default to first part of hostname
        # eg: smbsrv01.example.com -> smbsrv01
        dns_name = socket.gethostbyaddr(hostname)[0]  # "nslookup"
        return dns_name.split(".")[0]
Beispiel #20
0
    def get_BIOSName(self, host, timeout=30):
        try:
            bios = NetBIOS()
            srv_name = bios.queryIPForName(host, timeout=timeout)

        except Exception as e:
            logger.error("Looking up timeout, check remote_smb_ip again. %s" %
                         str(e))

        finally:
            bios.close()
            return srv_name
Beispiel #21
0
def clean_up(ip, share, subfolder, user, pwd, domain):
	net = NetBIOS()
	net_name = str(net.queryIPForName(ip)).strip("['").strip("']")
	net.close()
	conn = SMBConnection(user, pwd, 'cobwebs', net_name, domain=domain, use_ntlm_v2=True, is_direct_tcp=True)
	if conn.connect(ip, port=445, timeout=10):
		print(Fore.GREEN+"[+] Connection to %s Successful! Cleaning up SCF's Now!" % ip + Style.RESET_ALL)
	else:
		print(Fore.RED+"[!] Connection to %s Failed!" % ip + Style.RESET_ALL)

	delete_file(conn, ip, subfolder, share)

	conn.close()
Beispiel #22
0
def getBIOSName(remote_smb_ip, timeout=30):
    # 通过IP地址,查找smb服务器的名称
    srv_name = None

    bios = NetBIOS()
    try:
        srv_name = bios.queryIPForName(remote_smb_ip, timeout=timeout)
    except:
        print "查找samba服务器的名称时超时。"
    finally:
        bios.close()

    return srv_name
Beispiel #23
0
 def __resolve__(self, server:str):  # str | None
     # If no valid IP adres, try to obtain it
     # First as netBIOS on LAN
     nb = NetBIOS(broadcast=True, listen_port=0)
     # Send a query on the network and hopes that if machine matching the name will reply with its IP address.
     res = nb.queryName(server, ip='', port=NETBIOS_PORT, timeout=NETBIOS_TIMEOUT)
     if isinstance(res, list) and len(res) > 0 and isinstance(res[0], str) and self.isIP4(res[0]):
         return res[0]
     # Try to DNS resolve
     try:
         return socket.gethostbyname(server)
     except socket.gaierror as sge:
         # Nope, didn't work
         return None
Beispiel #24
0
def getBIOSName(remote_smb_ip, timeout=5):
    # Devuelvo el nombre NetBios de una máquina remota
    from nmb.NetBIOS import NetBIOS
    Aux = 'ERROR'
    try:
        bios = NetBIOS()
        srv_name = bios.queryIPForName(remote_smb_ip, timeout=timeout)
        Aux = srv_name[0]
    except:
        print 'No es posible conocer el nombre NETBIOS del servidor ' + remote_smb_ip + ' en el tiempo ' + str(
            timeout)
    finally:
        bios.close()
    return Aux
    def __init__(self, session, iface, plugin_path):
        Screen.__init__(self, session)
        self.skin_path = plugin_path
        self.session = session
        self.iface = iface or 'eth0'
        for service in eNetworkManager.getInstance().getServices():
            key = self.getServiceIF(service)
            if key:
                self.iface = key
                break
        self.networklist = []
        self.expanded = []
        self.cache_ttl = 604800  #Seconds cache is considered valid, 7 Days should be ok
        self.cache_file = eEnv.resolve(
            "${sysconfdir}/enigma2/networkbrowser.cache"
        )  #Path to cache directory
        self._nrthreads = 0
        self._netbios = NetBIOS(broadcast=False)
        self._ipv4 = iNetworkInfo.getConfiguredInterfaces()[self.iface].ipv4
        self._myhostname = self._lookupHostname(self._ipv4.address, local=True)

        self["key_red"] = StaticText(_("Close"))
        self["key_green"] = StaticText(_("Mounts"))
        self["key_yellow"] = StaticText(_("Rescan"))
        self["key_blue"] = StaticText(_("Expert"))
        self["infotext"] = StaticText(_("Press OK to mount!"))

        self["shortcuts"] = ActionMap(
            ["ShortcutActions", "WizardActions"], {
                "ok": self.go,
                "back": self.close,
                "red": self.close,
                "green": self.keyGreen,
                "yellow": self.keyYellow,
                "blue": self.keyBlue,
            })

        self.list = []
        self.statuslist = []
        self.listindex = 0
        self["list"] = List(self.list)
        self["list"].onSelectionChanged.append(self._onSelectionChanged)

        self.onLayoutFinish.append(self.startRun)
        self.onShown.append(self.setWindowTitle)
        self.onClose.append(self.cleanup)
        self.Timer = eTimer()
        self.Timer_conn = self.Timer.timeout.connect(self.TimerFire)
 def getBIOSName(self, remote_smb_ip, timeout=5):  # unused if dynamic IP
     # ip -> smb name
     try:
         self.error = None
         bios = NetBIOS()
         srv_name = bios.queryIPForName(remote_smb_ip, timeout=timeout)
         return srv_name[0]
     except Exception as e:
         if self.print_errors:
             print('Error on line {}'.format(sys.exc_info()[-1].tb_lineno),
                   type(e).__name__, e)
         else:
             self.error = 'Error on line {}'.format(
                 sys.exc_info()[-1].tb_lineno) + str(
                     type(e).__name__) + str(e)
         return None
 def getIP(self):
     # smb name -> ip
     try:
         self.error = None
         bios = NetBIOS()
         ip = bios.queryName(self.smb_name)
         return ip[0]
     except Exception as e:
         if self.print_errors:
             print('Error on line {}'.format(sys.exc_info()[-1].tb_lineno),
                   type(e).__name__, e)
         else:
             self.error = 'Error on line {}'.format(
                 sys.exc_info()[-1].tb_lineno) + str(
                     type(e).__name__) + str(e)
         return None
Beispiel #28
0
def get_name(target, timeout=5):
    logger.blue('Getting NetBIOS Name for {}'.format(logger.BLUE(target)))
    logger.verbose('Timeout for NetBIOS resolution: '+str(timeout))
    bios = NetBIOS()
    try:
        tmpnetbios_name = bios.queryIPForName(target, timeout=timeout)
        netbios_name = str(tmpnetbios_name[0])
    except:
        netbios_name = None
    bios.close()
    if netbios_name == None:
        logger.red_indent('Failed to get NetBIOS Name')
        return None
    else:
        logger.green_indent('Got NetBIOS Name: {}'.format(
            logger.GREEN(netbios_name)))
        return str(netbios_name)
Beispiel #29
0
def get_name(target, timeout=2):
    logger.live_info('[{}]:\tATTEMPTING NETBIOS NAME'.format(logger.BLUE(target)))

    # logger.verbose('Timeout for NetBIOS resolution: '+str(timeout))
    logger.verbose('[{}]:\tNETBIOS TIMEOUT: {}'.format(logger.YELLOW(target),logger.YELLOW(str(timeout))))
    bios = NetBIOS()
    try:
        tmpnetbios_name = bios.queryIPForName(target, timeout=timeout)
        netbios_name = str(tmpnetbios_name[0])
    except:
        netbios_name = None

    bios.close()
    if netbios_name == None:
        logger.live_bad('[{}]:\tNETBIOS NAME: {}'.format(logger.RED(target),logger.RED('FAILED')))
        return None
    else:
        logger.green('[{}]:\tNETBIOS NAME: {}'.format(logger.GREEN(target),logger.GREEN(netbios_name)))
        return str(netbios_name)
Beispiel #30
0
def run(options):
    ip = options['ip']
    port = options['port']
    username = options['username']
    password = options['password']

    test = random.choice(config.SMB_FILES)
    expected = test['checksum']

    try:
        n = NetBIOS()
        hostname = n.queryIPForName(ip)[0]
        n.close()

        conn = SMBConnection(username, password, '', hostname, config.DOMAIN)
        conn.connect(ip, port)
        t = tempfile.TemporaryFile()
        conn.retrieveFile(test['sharename'], test['path'], t)
    except (SMBTimeout, socket.timeout):
        logger.debug('Timeout')
        return False
    except NotReadyError:
        logger.debug(ERROR_STRINGS['NotReadyError'] % (username, password))
        return False
    except (NotConnectedError, UnsupportedFeature, ProtocolError, OperationFailure) as e:
        name = e.__class__.__name__
        if name in ERROR_STRINGS:
            logger.debug(ERROR_STRINGS[name] % e)
        else:
            logger.debug('%s: %s' % (name, e))
        return False

    sha1 = hashlib.sha1()
    t.seek(0)
    sha1.update(t.read())
    t.close()
    checksum = sha1.hexdigest()

    if checksum == expected:
        return True
    else:
        logger.debug('Check failed: output: %s | expected: %s' % (checksum, expected))
        return False