duaiziwodexiuluo 2022-07-20 11:04 采纳率: 50%
浏览 351
已结题

win10下建立了SAMBA共享空间,想通过pysmb连接,总是连接失败

win10下建立了SAMBA共享空间,想通过pysmb连接,总是连接失败(windows防火墙已关闭),无法找到原因,求解
问题相关代码,请勿粘贴截图
运行结果及报错内容

import io
import os
import smbclient
from smb.SMBConnection import *
from smb.SMBConnection import SMBConnection

class SMBClient(object):
status = False
samba = None

def __init__(self, user_name, passwd, ip, port=445):
    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
        print("连接成功")
    except:
        self.samba.close()
        print("连接失败")

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

def download(self, filenames, local_dir, service_name, smb_dir=''):
    """
    下载文件
    :param filenames: 文件路径(列表)
    :param local_dir: 本地目录
    :param service_name: 服务名(samba服务器中/etc/samba/smb.conf的[]里的名称)
    :param smb_dir: samba服务目录下的文件目录,如果目录下文件路径和filenames完全一致则保留默认值即可
    :return:
    """
    if type(filenames) is not list:
        filenames = [filenames]
    for filename in filenames:
        with open(os.path.join(local_dir, filename), 'w') as f:
            self.samba.retrieveFile(service_name, os.path.join(smb_dir, filename), f)

def upload(self, filenames, local_dir, service_name, smb_dir=''):
    """
    下载文件
    :param filenames: 文件路径(列表)
    :param local_dir: 本地目录
    :param service_name: 服务名(samba服务器中/etc/samba/smb.conf的[]里的名称)
    :param smb_dir: samba服务目录下的文件目录,如果目录下文件路径和filenames完全一致则保留默认值即可
    """
    if type(filenames) is not list:
        filenames = [filenames]
    for filename in filenames:
        with open(os.path.join(local_dir, filename), 'r') as f:
            self.samba.storeFile(service_name, os.path.join(smb_dir, filename), f)

def createDir(self, service_name, path):
    """
    创建文件夹
    :param service_name: 服务名(samba服务器中/etc/samba/smb.conf的[]里的名称)
    :param path: 目录路径
    """
    try:
        self.samba.createDirectory(service_name, path)
    except OperationFailure:
        pass

def listPath(self, service_name, path):
    """
    列举目录下的文件和目录
    :param service_name: 服务名(samba服务器中/etc/samba/smb.conf的[]里的名称)
    :param path: 目录路径
    :return: path目录下的文件和目录
    """
    filenames = []
    for shareFile in self.samba.listPath(service_name, path):
        filename = shareFile.filename
        if filename == '.' or filename == '..':
            continue        # 过滤下
        filenames.append(shareFile.filename)
    return filenames

主程序.

if name == 'main':
"""
smb = smbclient.SambaClient(server='10.2.48.119', share='yuhy1_samba', username='MECH', password=r'shafushu892721') #密码貌似有问题
smb.listdir("/")
print(smb.path)
"""

local_dir = 'D:/test/'
smb_client = SMBClient('HOME_PC', '1234567890', '192.168.1.102', 445)  
smb_client.connect()
个人不觉的是windows配置问题,其他电脑输入IP,账户及密码,可访问,应该是python pysmb库设置问题,可参考上述问题代码是否有错误
  • 写回答

6条回答

  • 脚踏南山 2022-07-20 11:25
    关注

    1、密码貌似有问题,到底有没有问题,不行就删掉share用户,重新设置。
    2、先自己看看是不是专用和公用网络设置的问题,
    3、参考一下链接的内容排查排查一下。
    https://os.51cto.com/article/658846.html

    img

    评论

报告相同问题?

问题事件

  • 系统已结题 7月28日
  • 修改了问题 7月20日
  • 创建了问题 7月20日