2012-04-20 21 views
7

¿Podría darme un ejemplo del uso de la biblioteca pysmb para conectarse a algún servidor samba? He leído que hay smb.SMBConnection.SMBConnection clase (nombre de usuario, contraseña, mi_nombre, remote_name, domain = '', use_ntlm_v2 = True) pero no puedo encontrar la manera de usarloEjemplo de pysmb

Respuesta

6

La clase SMBConnection le permitirá acceder a los archivos en el servidor Samba remoto en modo de bloqueo.

para recuperar la lista de los archivos en una carpeta compartida en el servidor remoto,

conn = SMBConnection(userid, password, client_machine_name, remote_machine_name, use_ntlm_v2 = True) 
conn.connect(server_ip, 139) 
filelist = conn.listPath('shared_folder_name', '/') 

La lista de archivos devuelto será una lista de SharedFile casos.

Más ejemplos se pueden encontrar en la carpeta tests/SMBConnectionTests en el paquete fuente pysmb.

+1

Gracias. ¿Cómo se supone que deben verse las variables client_machine_name y remote_machine_name? ¿Qué parte de la dirección uso? ¿Incluyo "smb: //" en el nombre remoto? – hendrixski

6

He estado usando pysmb para la enumeración de recursos compartidos de red últimamente, y he descubierto que no es tan fácil encontrar ejemplos buenos/completos. Yo te refiero a un pequeño script que escribí para enumerar los recursos compartidos SMB con pysmb: https://github.com/n3if/scripts/tree/master/smb_enumerator

En aras de la exhaustividad, también, he puesto aquí el fragmento de código que realiza la conexión y la enumeración:

try: 
    conn = SMBConnection(username,password,'name',system_name,domain,use_ntlm_v2=True, 
         sign_options=SMBConnection.SIGN_WHEN_SUPPORTED, 
         is_direct_tcp=True) 
    connected = conn.connect(system_name,445) 

    try: 
     Response = conn.listShares(timeout=30) # obtain a list of shares 
     print('Shares on: ' + system_name) 

     for i in range(len(Response)): # iterate through the list of shares 
      print(" Share[",i,"] =", Response[i].name) 

      try: 
       # list the files on each share 
       Response2 = conn.listPath(Response[i].name,'/',timeout=30) 
       print(' Files on: ' + system_name + '/' + " Share[",i,"] =", 
             Response[i].name) 

        for i in range(len(Response2)): 
         print(" File[",i,"] =", Response2[i].filename) 

      except: 
       print('### can not access the resource') 
    except: 
     print('### can not list shares')  
except: 
    print('### can not access the system') 
+1

¿Qué pasa si el servidor samba tiene un inicio de sesión 'INVITADO'. ¿Qué proporcionar para el nombre de usuario y el campo de contraseña en ese caso? – user2033758

+1

Yo diría Usuario = INVITADO y Contraseña = '' pero debería intentarlo. – neif

+2

Me has salvado. Estaba usando PySmbClient pero no pude hacer que funcionara. Gracias. – grantathon