MikeTeo.net

A Software Developer’s Blog (Wanna Email Me?)

pysmb

June 9, 2009 By miketeo

pysmb is an experimental SMB/CIFS library written in Python. It implements the client-side SMB/CIFS protocol which allows your Python application to access and transfer files to/from SMB/CIFS shared folders like your Windows file sharing and Samba folders.

If you use pysmb in your applications, please drop me a comment at the bottom of this page to let me and the others know of what you have done using pysmb. Thanks.

Disclaimer

Use this software entirely at your own risk. pysmb has not been actively maintained for the past few years because of my work. The last major development was done during the Windows XP days. Hence, I cannot guarantee that it will work with shared folders on Windows Vista and the latest Samba service.

What It Can Do

It can run on Python 2.1 to 2.5. I have already tested them on my machines. Since the whole library is written in pure Python, it should be able to run on any Python-supported platforms. It can upload/download/copy/rename/remove/list files and directories that are shared in user mode.

From version 0.2.0, pysmb also supports encrypted authentication in DES. However, you can turn off encrypted authentication on these machines by using these registry files (Win95, Win98, Win2000, NT4) in the extra directory

From version 0.3.0, pysmb allows operations on services in share mode. Previous versions only support services in user mode.

From version 0.4.0, pysmb uses NT LM0.12 dialect to communicate with the SMB server. Note that this is only a partial implementation, so it might fail on some systems.

What It Can’t Do

Note that this is only a client library. It does not share files.

Quick Start

Simply put smb.py and nmb.py together with your Python source files and import them. Please use

import smb, nmb

and not

from smb import *

This is because smb.py defines a number of constants which might interfere with your project’s variables. For more information about the API, please consult the documentation in the docs directory, or look at the accompanying
utilities for ideas.

  1. Request the NetBIOS name of the remote machine from your user.
  2. Create a nmb.NetBIOS() object.
  3. Call nmb.NetBIOS.gethostbyname() method to resolve your remote NetBIOS name to an IP address.
  4. Create a smb.SMB() object, passing in the NetBIOS names and the resolved IP address.
  5. Call smb.SMB.is_login_required() to determine if the remote machine requires login to further access its services. If login is required, retrieve the user name and password from the user and call smb.SMB.login().
  6. Depending on your application, call the exported functions in smb.SMB object.

Utilities

pysmb also includes some simple utilities which I hope can help to demonstrate the use of pysmb. These are working applications which I feel will be very useful.

  • nmbquery
    This is very similar to Samba’s nmblookup but is quite very limited in its functionality
  • smbdu
    This displays the disk usage of the files/directories recursively like the Unix’s du program.
  • smbcp
    Performs files/directory copy to/from your local machine and the remote SMB machine.
  • smblistshare
    List the available share devices on the remote SMB machine.

Downloads

If you have problems opening tar.gz files in Windows, please install 7-Zip. It supports 7z, ZIP, GZIP, BZIP2, TAR and many other archive formats.

Version 0.4.5, 2009-06-22 (Download)

  • Prevents pysmb from failing when there are too many files/folders to
    be returned in a single SMB TRANS2 call. pysmb will “resume” requesting
    for more files/folders information in subsequent SMB TRANS2 requests.

Version 0.4.4, 2004-01-12 (Download)

  • Add in support for AMK’s Python Cryptography Toolkit which will be used for DES password hashing. If AMK’s pycrypto is found, it will be used instead of mxCrypto.

Version 0.4.3, 2003-02-22 (Download)

  • Fix a bug which fails to close the socket in nmb.py on socket exception
  • Fix a bug which fails to close the NetBIOSSession in smb.py if the session has not been properly established yet

Version 0.4.2, 2002-08-03 (Download)

  • Add new methods to SharedFile instances, get_mtime_epoch, get_atime_epoch and get_ctime_epoch. These methods will return the mtime, atime and ctime in epoch time rather than SMB time.
  • Remove debugging printout in smb.py which has been released accidentally with the last release.
  • Fix a bug in smbcp which causes to local to remote copy to fail

Version 0.4.1, 2002-06-22 (Download)

  • Fix a bug in smb.py which does not return the correct file size for files with their archive bits turned off. This results in these files not being retrieved or sent properly.
  • Fix some typo error in the documentations

Version 0.4.0, 2002-04-17 (Download)

  • Use NT LM0.12 dialect.
  • New smb.SMBMachine class
  • Add SMB.get_server_domain(), smb.get_server_os(), SMB.get_server_lanman()

Version 0.3.1, 2001-11-12 (Download)

  • Fix a problem with some Windows server where an UID is required when server is in share mode.  Now, pysmb calls login() with empty authentication information when server is in share mode.
  • Add TYPE_DOMAIN_MASTER constant and description to nmb.py.

Version 0.3.0, 2001-11-10 (Download)

  • Add support for services in share mode. Minor changes to smb.SMB class API.
  • Fix a bug in smb.py’s __raw_retr_file which has failed to initialize the max_buf_size prior to usage.
  • Fix a bug in smblistshare which fails to print the correct NMB error message
  • Modify smb.py not throw AttributeError in the destructor when there is an error while creating a session in the constructor

Version 0.2.0, 2001-10-04 (Download)

  • Add support for encrypted authentication using DES
  • Fix a bug(?) which treats all services and filenames as case-sensitive

Version 0.1.3, 2001-09-03 (Download)

  • Fix a bug in smblistshare and smbdu which fails to catch the nmb.NetBIOSError raised when session setup fails.
  • Fix a bug in smb.SMB that arises from the change in nmb.NetBIOSSession which sends the session port number as the remote host type.
Version 0.1.2, 2001-09-01 (Download)
  • Fix a bug in nmb.NetBIOSSession which specifies a TYPE_WORKSTATION for remote host instead of TYPE_SERVER.
  • Minor change to nmb.NetBIOSSession constructor API.
  • Fix a bug in smbdu which raises OverflowError when printing long file size values.
  • Fix a bug in smbcp which does not handle the destination path correctly when the source file is copied to a different filename.
Version 0.1.1, 2001-08-25 (Download)
  • Change nmb’s NetBIOS and NetBIOSSession class such that they raise a NetBIOSError with a tuple of ( err_msg, err_class, err_code )
  • Add a function strerror() in both smb and nmb to return human readable messages for error codes.
  • Fix a bug in smbcp which fails to print an error message and terminate when the remote source path is not found.
  • Add in another utility, smblistshare.
Version 0.1.0, 2001-08-20 (Download)
  • First public release
  1. MikeTeo.net » Blog Archive » pysmb 0.4.5 released! Said,

    [...] more information, please visit: http://miketeo.net/wp/index.php/projects/pysmb Bookmark This Rattle… Posted in: Python, Software Development ADD [...]

Add A Comment