Пример pysmb

Не могли бы вы привести пример использования библиотеки pysmb для подключения к какому-нибудь серверу samba? Я читал, что есть класс smb.SMBConnection.SMBConnection(username, password, my_name, remote_name, domain='', use_ntlm_v2=True), но не могу понять, как его использовать


person Maria Kurnosova    schedule 20.04.2012    source источник


Ответы (3)


В последнее время я использую pysmb для перечисления сетевых ресурсов и обнаружил, что не так просто найти хорошие/полные примеры. Я бы отослал вас к небольшому сценарию, который я написал для перечисления общих ресурсов smb с помощью pysmb: https://github.com/n3if/scripts/tree/master/smb_enumerator

Для полноты картины я также размещаю здесь фрагмент кода, который выполняет соединение и перечисление:

from smb import SMBConnection

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')
person neif    schedule 08.05.2015
comment
Что делать, если сервер Samba имеет логин «GUEST». что указать для поля имени пользователя и пароля в этом случае? - person user2033758; 03.05.2016
comment
Я бы сказал User=GUEST и Password='', но я должен попробовать. - person neif; 03.05.2016

Класс SMBConnection позволит вам получить доступ к файлам на удаленном сервере Samba в режиме блокировки.

Чтобы получить список файлов в общей папке на удаленном сервере,

from smb.SMBConnection import SMBConnection
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', '/')

Возвращаемый список файлов будет списком из SharedFile экземпляров.

Дополнительные примеры можно найти в папке tests/SMBConnectionTests исходного пакета pysmb.

person miketeo    schedule 25.04.2012
comment
Спасибо. Как вообще должны выглядеть переменные client_machine_name и remote_machine_name? Какую часть адреса использовать? включить smb:// в удаленное имя? - person hendrixski; 16.05.2016

Например, вы хотите сохранить файл через pysmb так же, как это:

from smb.SMBConnection import SMBConnection

file_obj = open('image.png', 'rb')

connection = SMBConnection(username=username,
                           password=password,
                           remote_name=remote_name,  # It's net bios  name
                           domain=domain,
                           use_ntlm_v2=True)

connection.connect(ip=host)  # The IP of file server

connection.storeFile(service_name=service_name,  # It's the name of shared folder
                     path=path,
                     file_obj=file_obj)
connection.close()


person Mostafa Taheri    schedule 27.12.2020