2012-04-20 47 views
7

Bạn có thể cho tôi ví dụ về việc sử dụng thư viện pysmb để kết nối với một số máy chủ samba không? Tôi đã đọc có lớp smb.SMBConnection.SMBConnection (username, password, MY_NAME, REMOTE_NAME, domain = '', use_ntlm_v2 = True) nhưng tôi không thể tìm ra cách để sử dụng nóVí dụ về pysmb

Trả lời

6

Lớp SMBConnection sẽ cho phép bạn truy cập các tệp trên máy chủ Samba từ xa trong chế độ chặn.

Để lấy danh sách các tập tin trong một thư mục chia sẻ trên máy chủ từ xa,

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', '/') 

Các filelist trở sẽ là một danh sách các SharedFile trường.

Ví dụ khác có thể được tìm thấy trong thư mục tests/SMBConnectionTests trong gói nguồn pysmb.

+1

Cảm ơn. Các biến client_machine_name và remote_machine_name có thể trông như thế nào? Tôi sử dụng một phần địa chỉ nào? thế nào để tôi bao gồm "smb: //" trong tên từ xa? – hendrixski

6

Gần đây tôi đã sử dụng pysmb để liệt kê các chia sẻ mạng, và thấy rằng không dễ dàng để tìm các ví dụ tốt/hoàn chỉnh. Tôi muốn giới thiệu bạn đến một kịch bản nhỏ mà tôi đã viết cho liệt kê cổ phiếu smb với pysmb: https://github.com/n3if/scripts/tree/master/smb_enumerator

Vì lợi ích của sự hoàn chỉnh, cũng, tôi gửi ở đây đoạn mã mà hoàn thành kết nối và đếm:

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

Điều gì sẽ xảy ra nếu máy chủ samba có thông tin đăng nhập 'GUEST'. những gì để cung cấp cho tên người dùng và mật khẩu trường trong trường hợp đó? – user2033758

+1

Tôi muốn nói User = GUEST và Password = '' nhưng tôi nên thử nó. – neif

+2

Bạn đã lưu tôi. Tôi đã sử dụng PySmbClient nhưng không thể làm cho nó hoạt động. Cảm ơn bạn. – grantathon