예제 #1
0
class Samba:
    def __init__(self, _name):
        self.config = ConfigParser.ConfigParser()
        self.config.read('lora.conf')
        self.name = _name
        self.init_parameter()
        self.init_conn()


    def init_parameter(self):
        self.conn         = None
        self.username     = self.config.get(self.name, 'username')
        self.password     = self.config.get(self.name, 'password')
        self.machine_name = self.config.get(self.name, 'machine_name')
        self.server_name  = self.config.get(self.name, 'server_name')
        self.server_ip    = self.config.get(self.name, 'server_ip')
        self.domain_name  = self.config.get(self.name, 'domain_name')
        self.remote_folder= self.config.get(self.name, 'remote_folder')

 
    def init_conn(self):
        self.conn = SMBConnection(self.username, self.password, self.machine_name, self.server_name, 
                                  domain=self.domain_name, use_ntlm_v2=True, is_direct_tcp=True)
        self.conn.connect(self.server_ip, 445)
        shares = self.conn.listShares()


    def send_data(self, _name):
        with open(_name, 'rb') as file:
            self.conn.storeFile(self.remote_folder, _name, file)


    def close(self):
        self.conn.close()
예제 #2
0
class SMBClient(object):
    """
    smb连接客户端
    """
    username = ''
    password = ''
    ip = ''
    port = None

    status = False
    samba = None

    def __init__(self, username, password, ip, port=139):
        self.username = username
        self.password = password
        self.ip = ip
        self.port = port

    def connect(self):
        try:
            self.samba = SMBConnection(self.username,
                                       self.password,
                                       '',
                                       '',
                                       use_ntlm_v2=True)
            self.samba.connect(self.ip, self.port)
            self.status = self.samba.auth_result

        except:
            self.samba.close()

    def disconnect(self):
        if self.status:
            self.samba.close()

    def all_file_names_in_dir(self, service_name, dir_name):
        """
        列出文件夹内所有文件名
        :param service_name:
        :param dir_name:
        :return:
        """
        f_names = list()
        for e in self.samba.listPath(service_name, dir_name):
            # if len(e.filename) > 3: (会返回一些.的文件,需要过滤)
            if e.filename[0] != '.':
                f_names.append(e.filename)

        return f_names

    def download(self, service_name, smb_file_path, local_file_path):
        """
        下载文件
        :param service_name:服务名(smb中的文件夹名)
        :param smb_file_path: smb文件
        :param local_file_path: 本地文件
        :return:
        """
        f = open(local_file_path, 'wb')
        self.samba.retrieveFile(service_name, smb_file_path, f)
        f.close()

    # def download(self, f_names, service_name, smb_dir, local_dir):
    #     """
    #     下载文件
    #     :param f_names:文件名
    #     :param service_name:服务名(smb中的文件夹名)
    #     :param smb_dir: smb文件夹
    #     :param local_dir: 本地文件夹
    #     :return:
    #     """
    #     assert isinstance(f_names, list)
    #     for f_name in f_names:
    #         f = open(os.path.join(local_dir, f_name), 'w')
    #         self.samba.retrieveFile(service_name, os.path.join(smb_dir, f_name), f)
    #         f.close()

    def upload(self, service_name, smb_dir, file_name):
        """
        上传文件
        :param service_name:服务名(smb中的文件夹名)
        :param smb_dir: smb文件夹
        :param file_name: 本地文件夹
        :return:
        """
        self.samba.storeFile(service_name, smb_dir, file_name)

    def create_dir(self, service_name, path):
        """
        创建文件夹
        :param service_name:
        :param path:
        :return:
        """
        try:
            self.samba.createDirectory(service_name, path)

        except OperationFailure:
            pass

    def file_size(self, service_name, path):
        """
        文件大小
        :param service_name:
        :param path:
        :return:
        """
        return self.samba.getAttributes(service_name, path).file_size

    def is_directory(self, service_name, path):
        """
        判断是否为文件夹
        :param service_name:
        :param path:
        :return:
        """
        return self.samba.getAttributes(service_name, path).isDirectory

    def retrieve_file(self, service_name, path, local_file):
        """
        下载文件
        :param service_name:
        :param path:
        :param local_file:
        :return:
        """
        file_attr, file_size = self.samba.retrieveFile(service_name, path,
                                                       local_file)
        return file_attr, file_size

    def retrieve_file_from_offset(self, service_name, path, offset, max_length,
                                  local_file):
        """
        断点续传下载文件
        :param service_name:
        :param path:
        :param offset:
        :param max_length:
        :param local_file:
        :return:
        """
        file_attr, file_size = self.samba.retrieveFileFromOffset(
            service_name, path, local_file, offset, max_length)
        return file_attr, file_size

    def del_dir(self, service_name, dir_path):
        """
        删除smb文件夹
        :param service_name:
        :param dir_path:
        :return:
        """
        self.samba.deleteDirectory(service_name, dir_path)

    def del_file(self, service_name, file_path):
        """
        删除文件
        :param service_name:
        :param file_path:
        :return:
        """
        self.samba.deleteFiles(service_name, file_path)
예제 #3
0
def main():
    # get local pdf file name first
    try:
        password = getpass.getpass('Password: '******'Error: can not access the system')
        conn.close()
    # download current homepage_file
    try:
        with open(homepage_file, 'wb') as fp:
            conn.retrieveFile('c$', docroot + homepage_file, fp)
        print('Downloading of ' + homepage_file + ' successful\n')
    except:
        print('Error: Cannot download ' + homepage_file + '\n')
        conn.close()
    recent_list = recentFiles(conn, doc_root + '/archivefolder')
    print(
        str(access_recent) +
        ' most recent filenames in the archivefolder directory: \n')
    for n in range(len(recent_list)):
        print(recent_list[n])
    arch_filename = input('\nSave current ' + homepage_file +
                          ' for archivefolder as? ')
    # TODO suggest filename

    try:
        # upload downloaded homepage_file into archivefolder as arch_filename
        with open(homepage_file, 'rb') as fp:
            conn.storeFile('c$', doc_root + '/archivefolder' + arch_filename,
                           fp)
        os.remove(homepage_file)
    except:
        print('Error: Cannot upload ' + homepage_file + ' into archivefolder')
        conn.close()
    try:
        # Delete homepage_file_old, then rename homepage_file in as homepage_file_old
        conn.deleteFiles('c$', docroot + homepage_file_old)
        conn.deleteFiles('c$', docroot + newsletter_file)
        conn.rename('c$', docroot + homepage_file, docroot + homepage_file_old)
    except:
        print('Error: Cannot rename ' + homepage_file + ' to ' +
              homepage_file_old + ' in folder.')
        conn.close()
    try:
        # TODO make this elegant
        localpdf = getLocalpdf()
        with open(localpdf, 'rb') as fp:
            conn.storeFile('c$', docroot + homepage_file, fp)
        with open(localpdf, 'rb') as fp:
            conn.storeFile('c$', docroot + newsletter_file, fp)
    except:
        print('Error: cannot upload ' + localpdf + ' to folder')
        conn.close()
    print('\n' + homepage_file +
          ' succesffully updated!\n\n   Closing SMB connection')
    os.system('pause')
    conn.close()
def connect_remote_win_path(hostname, username, password, filepath,
                            cache_path):
    localserver = "local"
    domain = ""
    service_name = ''

    try:
        if cache_path[:2] == r"\\":
            ll = cache_path.split('\\')
            service_name = ll[3]
            print("service_name")
            new_cache_path = ""
            for i in range(len(ll)):
                if i > 3:
                    new_cache_path += "/" + ll[i]
            print("new_cache_path:", new_cache_path)

        else:
            service_name = cache_path[:1] + "$"
            ll = cache_path.split('\\')
            new_cache_path = ""
            for i in range(len(ll)):
                if i > 0:
                    new_cache_path += "/" + ll[i]
            print("new_cache_path:", new_cache_path)

        print("connecting server")
        conn = SMBConnection(username,
                             password,
                             localserver,
                             hostname,
                             domain=domain,
                             use_ntlm_v2=True,
                             sign_options=SMBConnection.SIGN_WHEN_SUPPORTED,
                             is_direct_tcp=True)

        conn.connect(hostname, 445)

        response = conn.listShares(timeout=30)  # obtain a list of shares
        print('Shares on: ' + hostname)
        arcpy.AddMessage('Shares on: ' + hostname)

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

        print("filepath:", filepath)

        try:

            file_list = os.listdir(filepath)

            for Level in file_list:
                lodPath = os.path.join(filepath, Level)
                bundles = os.listdir(lodPath)
                server_lod_path = new_cache_path + "/" + Level
                for bundle in bundles:
                    local_bundle_path = lodPath + os.sep + bundle
                    server_bundle_path = server_lod_path + "/" + bundle
                    print("local:", local_bundle_path)
                    # print("server:", server_bundle_path)
                    file_obj = open(local_bundle_path, 'rb')

                    # service_name = response[2].name
                    print("service_name:", service_name)
                    conn.storeFile(service_name,
                                   server_bundle_path,
                                   file_obj,
                                   timeout=60)
                    print("uploaded:", server_bundle_path)
                    arcpy.AddMessage("uploaded:" + server_bundle_path)
                    file_obj.close()

        # print("upload over")
            conn.close()
            return True
        except:
            arcpy.AddError(
                "upload failed! Maybe there is no any tiles in the dir: " +
                filepath)
            conn.close()
            return False
    except:
        conn.close()
        return False
def connect_remote_win_path(hostname,username,password,filepath,cache_path):
    localserver = "local"
    domain = ""
    service_name = ''

    try:
        if cache_path[:2] == r"\\":
            ll = cache_path.split('\\')
            service_name = ll[3]
            print("service_name")
            new_cache_path = ""
            for i in range(len(ll)):
                if i > 3:
                    new_cache_path += "/"+ ll[i]
            print("new_cache_path:",new_cache_path)

        else:
            service_name = cache_path[:1] + "$"
            ll = cache_path.split('\\')
            new_cache_path = ""
            for i in range(len(ll)):
                if i > 0:
                    new_cache_path += "/" + ll[i]
            print("new_cache_path:", new_cache_path)

        print("connecting server")
        conn = SMBConnection(username,password,localserver,hostname,domain=domain,
                      use_ntlm_v2=True,sign_options=SMBConnection.SIGN_WHEN_SUPPORTED,is_direct_tcp=True)

        conn.connect(hostname, 445)

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

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

        print("filepath:", filepath)

        try:

            file_list = os.listdir(filepath)

            for Level in file_list:
                lodPath = os.path.join(filepath, Level)
                bundles = os.listdir(lodPath)
                server_lod_path = new_cache_path + "/" + Level
                for bundle in bundles:
                    local_bundle_path = lodPath + os.sep + bundle
                    server_bundle_path = server_lod_path + "/" + bundle
                    print("local:",local_bundle_path)
                    # print("server:", server_bundle_path)
                    file_obj = open(local_bundle_path,'rb')

                    # service_name = response[2].name
                    print("service_name:",service_name)
                    conn.storeFile(service_name, server_bundle_path, file_obj, timeout=60)
                    print("uploaded:", server_bundle_path)
                    file_obj.close()


        # print("upload over")
            conn.close()
            return True
        except:
            print("upload failed! Maybe there is no any tiles in the dir: "+filepath)
            conn.close()
            return False
    except:
        conn.close()
        return False
예제 #6
0
파일: smba.py 프로젝트: superzoon/superzoon
class SMBClient(object):
    '''
    smb连接客户端
    '''
    user_name = ''
    passwd = ''
    ip = ''
    prot = None

    status = False
    samba = None

    def __init__(self, user_name, passwd, ip, port=139):
        self.user_name = user_name
        self.passwd = passwd
        self.ip = ip
        self.port = port

    def connect(self):
        try:
            self.samba = SMBConnection(self.user_name,
                                       self.passwd,
                                       '',
                                       '',
                                       use_ntlm_v2=True)
            self.samba.connect(self.ip, self.port)
            self.status = self.samba.auth_result
        except:
            self.samba.close()

    def disconnect(self):
        if self.status:
            self.samba.close()

    def all_file_names_in_dir(self, service_name, dir_name):
        '''
        列出文件夹内所有文件名
        :param service_name:
        :param dir_name:
        :return:
        '''
        f_names = list()
        for e in self.samba.listPath(service_name, dir_name):
            # if len(e.filename) > 3: (会返回一些.的文件,需要过滤)
            if e.filename[0] != '.':
                f_names.append(e.filename)
        return f_names

    def download(self, f_names, service_name, smb_dir, local_dir):
        '''
        下载文件
        :param f_names:文件名
        :param service_name:服务名(smb中的文件夹名)
        :param smb_dir: smb文件夹
        :param local_dir: 本地文件夹
        :return:
        '''
        assert isinstance(f_names, list)
        for f_name in f_names:
            f = open(os.path.join(local_dir, f_name), 'w')
            self.samba.retrieveFile(service_name,
                                    os.path.join(smb_dir, f_name), f)
            f.close()

    def upload(self, service_name, smb_dir, file_name):
        '''
        上传文件
        :param f_names:文件名
        :param service_name:服务名(smb中的文件夹名)
        :param smb_dir: smb文件夹
        :param local_dir: 本地文件夹
        :return:
        '''
        self.samba.storeFile(service_name, smb_dir, file_name)

    def createDir(self, service_name, path):
        """
        创建文件夹
        :param service_name:
        :param path:
        :return:
        """
        try:
            self.samba.createDirectory(service_name, path)
        except OperationFailure:
            pass